3

2つのボタン(button1、button2)があります。report2.rdlcに文字列パラメーターがあることを除いて、2つのボタンで2つの同じレポートが開きます。

最初にbutton1を押すと、メッセージボックスにパラメータ数が表示されます= 0(期待どおり)、report1.rdlcがreportviewer1に表示されます。次に、ボタン2を押すと、メッセージボックスにパラメータ数が表示されます= 0になります(1が表示されると思います)。 LocalProcessingException{"このレポートで定義されていないレポートパラメータ'Report2ParameterString'を設定しようとしました。"}

最初にbutton2を押すと、メッセージボックスにパラメータ数が表示されます= 1(期待どおり)、reportviewer1にreport2が表示されます。次に、button1を押すと、メッセージボックスにパラメータ数が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();
    }
4

1 に答える 1

5

ReportViewer.Reset()新しいレポートをロードする前に呼び出します。

例えば:

reportViewer1.Reset();
reportViewer1.LocalReport.ReportPath = Application.StartupPath + "\\report2.rdlc";
...
于 2012-02-17T23:22:09.260 に答える