为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);