为Crystal Reports中的参数指定多个值

我已在报表中添加了一个参数,并选中了“允许多个值”选项。

这是一个状态列(IE,Proposed,In Progress,Completed,Cancelled),我希望用户能够选择要报告的不同OrderStatus(以及多少个)。

我通常如何设置参数是:

report.SetParameterValue("@dtBegin", dtBegin.DateTime); 

我试图为多个值做的是这样的:

 //pseudo loop foreach(int intOrderStatus in intSelectedOrderStatuses) { report.Parameter_OrderStatus.CurrentValues.AddValue(intOrderStatus); } 

我已检查它是否将值添加到OrderStatus参数,但是当报表运行时,会弹出CrystalReports对话框并要求我输入OrderStatus参数的值。 因此,似乎值不会“提交”到参数。 我做了很多搜索,无法弄清楚它为什么不起作用。

谢谢,

只需使用int数组设置参数值即可。

 report.SetParameterValue("@OrderStatus", new int[]{1,2,3}); 

在select专家中,您将使用in运算符。

 {table.order_status_id} in {?@OrderStatus} 

您可以做的是,创建一个普通的参数字段,即没有多个值,只有谨慎的值为true,您需要传递的是1,2,3,4。 “,”是分离使用的分隔符,你认为对你有用,然后在记录选择公式中简单地说

 {table.order_status_id} in split({@OrderStatus}, ",") 

你需要从你的页面传递的是字符串1,2,3,4,它应该工作

以下内容在Crystal Reports 13.0.20版中进行了测试:

1)Parameter Fields部分添加新参数如下:

 Name: ParamMultipleOrderStatus Type: Number Value Options: Allow multiple values: true 

2)在Crystal Reports中选择“ Select Expert Record ... ”,代码可能是这样的(use = operator):

 {Orders.OrderStatus} = {?ParamMultipleOrderStatus} 

3)使用以下代码:

 foreach (int intOrderStatus in intSelectedOrderStatuses) { report.ParameterFields["ParamMultipleOrderStatus"].CurrentValues.AddValue(intOrderStatus); } 

您是否在Crystal Reports参数选项中将参数设置为隐藏?

我没有试过这个,但我认为你应该能够将intOrderStatus添加到ParameterDiscreteValue或ParameterRangeValue并将其传递给Parameter_OrderStatus.CurrentValues而不是intOrderStatus。

我有同样的问题。 解决方法非常简单。 不要在参数后添加数据源。 例如

 report.SetParameterValue("@dtBegin", dtBegin.DateTime); report.SetParameterValue("@dtBegin2", dtBegin.DateTime1); //Note datasource is assigned after parameters report.SetDatasource(dataset); 

在应用数据源进行报告之前,晶体报告将刷新参数。 下面是不弹出的离散对话框

 //Note Datasource is applied before parameters report.SetDatasource(dataset); report.SetParameterValue("@dtBegin", dtBegin.DateTime); report.SetParameterValue("@dtBegin2", dtBegin.DateTime1);