好的,所以我的场景是我在表单上有一个报表查看器,它可以根据选择连接多个报表。我将所有报告设置为构建操作的嵌入式资源。
在设置参数之前,我正在加载这样的报告。
myReportViewer.LocalReport.ReportEmbeddedResource = "MyApp.MyReport1.rdlc";
或者
myReportViewer.LocalReport.ReportEmbeddedResource = "MyApp.MyReport2.rdlc";
这种情况很奇怪。假设我运行应用程序并首先选择 MyReport1 并运行它。该报告是保存参数的报告。MyReport2 没有任何参数,只有数据源。MyReport1 将正确加载,一切运行完美。然后我可以切换到 MyReport2 并在两个报告之间来回切换任意多次。
假设我首先运行 MyReport2。它加载正确,我可以多次运行它。但是,如果我切换回 MyReport1,它会在我尝试设置参数时引发以下异常。
An attempt was made to set a report parameter 'TotalTime' that is not defined in this report.
看看这个异常,我会假设 MyReport1 由于某种原因没有加载。当我设置 LocalReport.ReportEmbeddedResource。什么会导致 MyReport1 无法正确加载,因为我没有先使用它?
这是代码,我当然已经剪掉了我无法显示的部分。
if (ReportComboBox.SelectedItem.ToString() == "Time by user") {
myReportViewer.LocalReport.DataSources.Clear();
ReportDataSource datasource = new ReportDataSource();
datasource.Name = "DataSet1";
datasource.Value = DataSet1BindingSource;
myReportViewer.LocalReport.DataSources.Add(datasource);
try {
myReportViewer.LocalReport.ReportEmbeddedResource = "";
myReportViewer.LocalReport.ReportEmbeddedResource = "MyApp.MyReport1.rdlc";
ReportParameter test = new ReportParameter("TotalTime", total.ToString("c"));
myReportViewer.LocalReport.SetParameters(test);
myReportViewer.RefreshReport();
} catch (Exception ex) {
}
} else if (ReportComboBox.SelectedItem.ToString() == "Time - Everyone") {
myReportViewer.LocalReport.DataSources.Clear();
ReportDataSource datasource = new ReportDataSource();
datasource.Name = "CompetitionUsers";
datasource.Value = MyData;
myReportViewer.LocalReport.DataSources.Add(datasource);
myReportViewer.LocalReport.ReportEmbeddedResource = "";
myReportViewer.LocalReport.ReportEmbeddedResource = "MyApp.MyReport2.rdlc";
myReportViewer.RefreshReport();
}
用户的时间,是吓坏了的部分。通过查看代码,那里没有什么真正有用的。只要我先运行它,它就可以工作。