LocalReport.SetParameters Exception Была предпринята попытка установить параметр отчета «ParameterName», который не определен в этом отчете. - PullRequest
3 голосов
/ 18 февраля 2012

у меня есть две кнопки (button1, button2), две кнопки открывают два идентичных отчета, за исключением того, что report2.rdlc имеет строковый параметр

, если я нажал button1 сначала в окне сообщений отображается число параметров = 0(как и ожидалось) , и я получаю report1.rdlc, отображаемый в reportviewer1, если затем я нажимаю кнопку2 , в окне сообщения снова отображается число параметров = 0 (я ожидаю, что оно покажет 1) и я получаю LocalProcessingException {«Была предпринята попытка установить параметр отчета« Report2ParameterString », который не определен в этом отчете.»}

если я нажал кнопку2 сначала в окне сообщения отображается число параметров = 1 (как и ожидалось) и я получаю report2, отображаемый в reportviewer1, если затем я нажимаю кнопку1 в окне сообщения снова отображается число параметров = 1 (я ожидаю, что он покажет 0) я получаю report1.rdlc, отображаемый в reportviewer1 без исключений

мой код

private void report1Button_Click(object sender, EventArgs e)
    {
        reportViewer1.LocalReport.ReportPath = Application.StartupPath + "\\report1.rdlc";
        MessageBox.Show("parameters count =" + reportViewer1.LocalReport.GetParameters().Count.ToString());
        reportViewer1.LocalReport.DataSources.Clear();
        reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", reportDataTable));
        reportViewer1.RefreshReport();
    }
    private void report2Button_Click(object sender, EventArgs e)
    {
        reportViewer1.LocalReport.ReportPath = Application.StartupPath + "\\report2.rdlc";
        MessageBox.Show("parameters count =" +reportViewer1.LocalReport.GetParameters().Count.ToString());
        reportViewer1.LocalReport.SetParameters(new ReportParameter("Report2ParameterString", " testing Report2ParameterString"));
        reportViewer1.LocalReport.DataSources.Clear();
        reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", reportDataTable));
        reportViewer1.RefreshReport();
    }

1 Ответ

5 голосов
/ 18 февраля 2012

Позвоните ReportViewer.Reset() перед загрузкой нового отчета.

Например:

reportViewer1.Reset();
reportViewer1.LocalReport.ReportPath = Application.StartupPath + "\\report2.rdlc";
...
...