Исключение LocalReport.SetParameters Была предпринята попытка установить параметр отчета "ParameterName", который не определен в этом отчете.

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

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

если я сначала нажал кнопку 2, в окне сообщения отображается количество параметров = 1 (как и ожидалось), и я получаю отчет 2, отображаемый в reportviewer1, если затем я нажал кнопку 1, в окне сообщения снова отображается количество параметров = 1 (я ожидаю, что он покажет 0), я получаю отчет 1.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 ответ

Решение

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

Например:

reportViewer1.Reset();
reportViewer1.LocalReport.ReportPath = Application.StartupPath + "\\report2.rdlc";
...
Другие вопросы по тегам