说我在一个名为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;
是否可以迭代列以获取值?
答案 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
),以帮助分隔每个值,但您可以轻松删除它。