如何在水晶报告的公式中使用循环?

时间:2015-03-26 09:53:15

标签: c# crystal-reports crystal-reports-2008 crystal-reports-xi crystal-reports-2010

我在详细信息部分有一个表格,其中包含3列(ID_Player,名称播放器,奖牌),奖牌列取金,银或铜牌。在标题页部分我有3个图像为每种类型的奖牌我需要根据详细信息部分显示的奖牌值显示图像?

我尝试: 在图像1(黄金)的抑制选项中:

numbervar i ;
for i:=1 to count({table.medal}) do
(
if ({table.medal} = "gold") then false else true
)

其他2张图片的代码相同,但始终只读取第一张记录!!

3 个答案:

答案 0 :(得分:0)

您必须在单独的公式中检查是否存在奖牌,该公式将针对所有记录进行评估,并将结果作为全局变量传递以抑制公式:

公式hasMedal:

Global NumberVar num_var;
If {table.medal} = "gold" Then
num_var := 1

抑制公式:

EvaluateAfter({@hasMedal});
Global NumberVar num_var;
num_var = 0;

在当前的for循环中,NumberVar i遍历所有值,但{table.medal}指向整个时间的第一行。

答案 1 :(得分:0)

你不能迭代for循环显示图像bcoz它引用当前行.. 你必须使用嵌套if ... else..to显示图像......

 if ({table.medal} = "gold") then 
     false 
else if ({table.medal} = "silver ") then
     false
else if ({table.medal} = "bronze") then    
     false   
else
     true

答案 2 :(得分:0)

我试图将@hasmedal放在详细信息部分中,当黄金值存在时,其余为1,否则为0。对于其他值(银色和青铜色),我现在有两条线:第一行包含金线,第二条线包含银色...... hasmedalGold在第一行显示1,在第二行显示0。并且hasmedalSilver在第一行显示0,在第二行显示1 ...并且hasmedalBronze在supress公式的2行中显示为0我把这段代码:

    EvaluateAfter({@hasmedalGold});
Global NumberVar num_var;
num_var <> 0;
if ({@hasmedalGold} =1)
then false else true   

                                                                                              but the problem persist it display only the gold medal which is in the first line record :(