Crystal Reports:创建数组或从列中获取值

问题描述 投票:0回答:3

假设我正在撰写一份名为

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
3个回答
2
投票

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

我想到的唯一解决方案是使用子报表。虽然你不会

pass them this column and iterate it in the details
。因为它只会传递列中的第一个值。您将向其传递报告参数,它可以使用这些参数从数据库获取列值,就像主报告一样。


0
投票

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

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

这将在报告生成过程中每次

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

注意: 您不想在此公式中设置

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


0
投票

无法使用子报表的原因?

我的报告有一个首页,其中包含审核控制和选择标准。 我在标题部分粘贴了一个子报告 - 使用之前建议的代码可以轻松实现:

formula MyVar
global StringVar output; output := output + {MyTable.MyColumn} + ",";

将 @Myvar 字段绘制到页脚部分。抑制所有其他部分。 调整子报表的大小,使其适合一行,然后将其移动到标题部分中的其他选择参数下。

© www.soinside.com 2019 - 2024. All rights reserved.