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

时间:2009-05-08 14:33:43

标签: c# .net crystal-reports

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

这是一个状态列(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参数的值。所以似乎值不是“提交”参数。我做了很多搜索,无法弄清楚它为什么不起作用。

谢谢,

6 个答案:

答案 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);
}