C# 以编程方式设置报表查看器参数

C# 以编程方式设置报表查看器参数,c#,reportviewer,C#,Reportviewer,我有一个方法,通过它,我猜它填充了reportviewer参数,但是当我计算ReportParameters时,(this.reportViewer1.LocalReport.GetParameters()),第一个参数的值是所有其他参数的值。这里怎么了?此代码属于FrmReport(示例): 然后我用另一种形式说: var frmReport = new FrmReport(); frmReport.SetReportParameters("1","2"); 在那里我得到了我之前说过的结果。

我有一个方法,通过它,我猜它填充了reportviewer参数,但是当我计算ReportParameters时,(this.reportViewer1.LocalReport.GetParameters()),第一个参数的值是所有其他参数的值。这里怎么了?此代码属于FrmReport(示例):

然后我用另一种形式说:

var frmReport = new FrmReport();
frmReport.SetReportParameters("1","2");

在那里我得到了我之前说过的结果。

我认为这属于“滥用ForEach”的范畴。首先(我可以看到),你的主要问题是,你永远不会递增
i
.ToList().ForEach()的主要缺点是可读性差

我认为您最好先使用循环,直到获得所需的结果,然后如果您真的必须继续并转换为LINQ

    var pCol = new ReportParameterCollection();
    for (int i = 0; i < parameters.Length; i++)
    {
        pCol.Add(new ReportParameter(ReportParameters[i].Name, parameters[i]);
    }
var pCol=new ReportParameterCollection();
对于(int i=0;i

真的不知道你为什么要检查
ReportParameters
parameters
的长度。代码相当不清楚,我看不出你的意图。但我会“取消优化”这样,在调试器中更容易单步执行,然后在方法正常工作时进行优化。

好的,ForEach的问题解决了

int i = 0;
parameters.ToList().ForEach(p => {
    pCol.Add(new ReportParameter(ReportParameters[i].Name, p));
    i++;
});

“第一个参数的值是所有其他参数的值。”-这是什么意思?下面有几个有效答案。而且,您对
SetReportParameters
的调用甚至不会编译。存根需要
string[]
但是你正在传递它,
string
…哦,我的上帝,我的错误,这是在压力下工作时发生的,谢谢Evan,我对此表示歉意。如果它解决了你的问题,请将其标记为答案=)
int i = 0;
parameters.ToList().ForEach(p => {
    pCol.Add(new ReportParameter(ReportParameters[i].Name, p));
    i++;
});