我已在报告中添加了一个参数,并选中了“允许多个值”选项。
这是一个状态列(IE,Proposed,In Progress,Completed,Cancelled),我希望用户能够选择要报告的不同OrderStatus(和/ p>)。
我通常如何设置参数:
report.SetParameterValue("@dtBegin", dtBegin.DateTime);
我尝试为多个值做的事情是这样的:
//pseudo loop
foreach(int intOrderStatus in intSelectedOrderStatuses)
{
report.Parameter_OrderStatus.CurrentValues.AddValue(intOrderStatus);
}
我已经检查过它会将值添加到OrderStatus参数中,但是当报表运行时,会弹出CrystalReports对话框并要求我输入OrderStatus参数的值。所以似乎值不是“提交”参数。我做了很多搜索,无法弄清楚它为什么不起作用。
谢谢,
答案 0 :(得分:9)
只需使用整数数组设置参数值。
report.SetParameterValue("@OrderStatus", new int[]{1,2,3});
在选择专家中,您将使用 运算符。
{table.order_status_id} in {?@OrderStatus}
答案 1 :(得分:1)
你可以做的是,创建一个普通的参数字段,即没有多个值,只有谨慎的值为true,你需要传递的是1,2,3,4。 “,”是分离使用的分隔符,你认为对你有用,然后在记录选择公式中简单地把
{table.order_status_id} in split({@OrderStatus}, ",")
您需要从您的页面传递的是字符串1,2,3,4,它应该可以正常工作
答案 2 :(得分:0)
您是否在Crystal Reports参数选项中将参数设置为隐藏?
答案 3 :(得分:0)
我没有尝试过这个,但我认为您应该能够将intOrderStatus添加到ParameterDiscreteValue或ParameterRangeValue中,并将其传递给Parameter_OrderStatus.CurrentValues而不是intOrderStatus。
答案 4 :(得分:0)
我有同样的问题。解决方法非常简单。不要在参数后添加数据源。 e.g
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);
答案 5 :(得分:0)
以下内容在 Crystal Reports 版本 13.0.20 中进行了测试:
1)在Parameter Fields
部分中,添加新参数,如下所示:
Name: ParamMultipleOrderStatus
Type: Number
Value Options:
Allow multiple values: true
2)在Crystal Reports中选择Select Expert Record ...
,代码可能会这样(使用=
运算符):
{Orders.OrderStatus} = {?ParamMultipleOrderStatus}
3)使用以下代码:
foreach (int intOrderStatus in intSelectedOrderStatuses)
{
report.ParameterFields["ParamMultipleOrderStatus"].CurrentValues.AddValue(intOrderStatus);
}