【问题标题】:Crystal Reports: Create Array or get values from a columnCrystal Reports:创建数组或从列中获取值
【发布时间】:2012-12-08 05:15:25
【问题描述】:

假设我正在编写一份名为someTable.someColumn 的专栏的报告。我需要的是拥有 ReportHeader 中的所有值。我知道我可以创建一个子报表,将此列传递给他们并在详细信息中对其进行迭代,但我想知道是否可以在没有子报表的情况下执行此操作。

如果我使用以下命令,我会得到正确的结果,在我的例子中是 9:

COUNT(someTable.someColumn)

我也尝试了以下方法,但它不起作用 - 它只随机取 9 个值之一。

Local NumberVar i := 0;
Local StringVar Array items := {someTable.someColumn};
Local StringVar output := "";
while (i < count(items)) do (
  i := i+1;
  output := output + items[i];
);

output;

是否可以遍历列以获取值?

【问题讨论】:

    标签: crystal-reports


    【解决方案1】:

    您不能在报告标题中执行此操作。您必须使用详细信息部分来读取每个值。

    想到的唯一解决方案是使用子报表。虽然你不会pass them this column and iterate it in the details。因为它只会传递列中的第一个值。您可以将报告参数传递给它,它可以使用这些参数从数据库中获取列值,就像您的主报告一样。

    【讨论】:

      【解决方案2】:

      我还没有找到在报表页眉中执行此操作的方法,但您可以使用以下公式将其放在报表页脚中:

      global StringVar output;
      output := output + {someTable.someColumn} + ",";
      

      这将在报告生成过程中每次someTable.someColumn 更改时执行,并将其附加到全局变量中。不幸的是,它并没有保持它的所有实例都是最新的——例如,如果您将它包含在某个地方的报告详细信息中,您将能够在报告过程中看到output 的演变。在标题中,它只会显示第一个值。

      注意:您不会希望在此公式中设置 output := "",因为这会每次都重置值。不过,Crystal 似乎在创建变量时会自动为您初始化变量,并且仅使用上述公式我没有遇到任何错误(即,我不需要创建第二个公式来初始化 output) .我还添加了一个分隔符 (+ ","),以帮助分隔每个值,但您可以轻松地将其删除。

      【讨论】:

      • 谢谢,不过没用...不管你想用这个变量做什么,你只能在报告的最后使用它。
      • 确实,这就是我规定的限制。不幸的是,我不相信有办法修改它以在标题(报告的开头)中工作。
      猜你喜欢
      • 2012-11-06
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-11
      • 2021-04-18
      相关资源
      最近更新 更多