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

时间:2012-11-29 08:27:06

标签: crystal-reports

说我在一个名为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;

是否可以迭代列以获取值?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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

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

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