0

我尝试使用 Crystal Reports for dot net 制作一个简单的报告。但它每次都返回错误的值“5”。正确的值为“3”。这是我的结果。

   Desktop 
   Desktop
   Laptop
   Laptop
   Laptop
Total Laptop 5

下面是我使用过的代码。

Local numberVar cnt := 0:
Local stringVar stv  := {Table_1.Property};
Local numberVar strLen := Count({Table_1.Property});
Local numberVar i;

For i := 1 to strLen do
(
   If stv = “Laptop”
   Then cnt := cnt + 1
Else cnt := cnt + 0
);
cnt;

这段代码哪里错了?谢谢:)

4

1 回答 1

0

通过假设记录打印在详细信息部分并且总计的公式位于页脚部分,您会得到错误的结果,因为在for循环中,您总是在读取详细信息部分中打印的最后一条记录,因为页脚存在在详细信息部分之后呈现。

作为解决方案,您可以使用以下方法之一:

  1. 具有 2 个公式的解决方案。

    • 创建一个名为 ItemCountDetails 的公式并添加以下代码。

      WhilePrintingRecords;
      Shared NumberVar Cnt;
      
      if RecordNumber = 1 then
          Cnt:= 0;
      
      if {Table_1.Property} = "Laptop" then
          Cnt:= Cnt + 1;
      
    • 将公式字段拖放到详细信息部分的某处(将打印您的记录)并通过右键单击字段 -> 格式对象 -> 通用选项卡 -> 并选中抑制复选框来抑制它。

    • 创建另一个名为 ItemCountFooter 的公式并添加以下代码。

      Shared NumberVar Cnt;
      
    • 将新公式字段拖放到页脚部分。

  2. 具有摘要和分组的解决方案。

    • 在一个部分内右键单击并选择摘要。
    • 从“选择要汇总的字段”中选择 Table_1 下的“属性”。
    • 从“计算此摘要”中选择“计数”
    • 单击插入组,然后从公共选项卡中从第一个 ComboBox 中选择“属性”。
    • 单击确定关闭对话框。在报告中,您将看到组名称字段和计数字段。
    • 右键单击 GroupHeaderSection1 栏并选择 Suppress。
    • 右键单击“Table_1.Property 计数”字段 -> 格式化对象 -> 通用选项卡 -> 单击抑制复选框右侧的 x+2 按钮并在其中添加以下代码

      if GroupName({Table_1.Property}) <> "Laptop" then
          true
      else
          false
      
于 2013-07-18T16:41:09.693 回答