【水晶报表内功心法】--信手拈来,掌控对象 之 多值参数传入

在前文【水晶报表内功心法】--信手拈来,掌控对象 中,讲解了参数的输入方法。
myReport.SetParameterValue(参数名称,参数值,[子报表名称]);
比如我们这样传参数值:
myReport.SetParameterValue("x1","我是参数值");

但是如何传入多值参数,或者是区域值参数呢。
实质上我们再来看一下SetParameterValue方法,
Title

public virtual void SetParameterValue(string name, object val, string subreport)
    CrystalDecisions.CrystalReports.Engine.ReportDocument 的成员

摘要:
设置子报表中的参数字段的当前值。值可以是基元、ParameterValue、上述两种类型中某一种的数组或 ParameterValues 集合。

参数:
name: 参数字段的名称。
value: 表示一个有效的参数值。可以是基元、ParameterValue、上述两种类型中某一种的数组或 ParameterValues 集合。
subreport: 参数字段所属的子报表的名称。



value 是可以是一个ParameterValues的,所以解决方法也来了。

我们首先建立一个多值参数px,一个区域值参数py。
注意如果直接把px拖到模板上,会只显示第一个值。而py则直接不显示。
所以为了验证效果,做两个公式
fx: join({?px},',') //将值用,组合成一个字串
fy:Minimum ({?py})  //取最小的端点
这两个公式主要是为了验证显示效果的,与代码无关。

代码如下:
 1 //多值
 2         ParameterDiscreteValue pv;
 3         ParameterValues pvs = new ParameterValues();
 4         
 5         for (int i = 0; i < 5; i++)
 6         {
 7             pv = new ParameterDiscreteValue();
 8             pv.Value = i.ToString();
 9             pvs.Add(pv);
10 
11         }
12         
13         myReport.SetParameterValue("px", pvs);
14 
15         //区域值
16         pvs = new ParameterValues();
17         ParameterRangeValue pv1=new ParameterRangeValue();
18         pv1.StartValue=100;
19         pv1.EndValue = 200;
20         pvs.Add(pv1);
21         myReport.SetParameterValue("py", pvs);

这个是通过ReportDocument来传值的。
当然也可以传给CrystalReportViewer。
posted @ 2009-10-09 15:04  阿泰  阅读(3211)  评论(5编辑  收藏  举报