mea*_*nny 2 c# reportviewer reportparameter
好吧,我的情况是我在表单上有一个报表查看器,它根据选择连接多个报表.我将所有报告设置为构建操作的嵌入式资源.
在设置参数之前,我正在加载这样的报告.
myReportViewer.LocalReport.ReportEmbeddedResource = "MyApp.MyReport1.rdlc";
Run Code Online (Sandbox Code Playgroud)
要么
myReportViewer.LocalReport.ReportEmbeddedResource = "MyApp.MyReport2.rdlc";
Run Code Online (Sandbox Code Playgroud)
这种情况很奇怪.假设我运行应用程序并首先选择MyReport1并运行它.该报告是保存参数的报告.MyReport2没有任何参数,只有数据源.MyReport1将正确加载,一切运行完美.然后,我可以切换到MyReport2,并根据需要在两个报告之间来回切换.
假设我先运行MyReport2.它正确加载,我可以多次运行它.但是,如果我切换回MyReport1,它会在尝试设置参数时抛出以下异常.
An attempt was made to set a report parameter 'TotalTime' that is not defined in this report.
Run Code Online (Sandbox Code Playgroud)
看看这个异常我会假设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();
}
Run Code Online (Sandbox Code Playgroud)
用户的时间,是一个吓坏了的部分.通过查看代码,没有什么真正有用的.只要我先运行它,它就可以工作.
您需要做的是myReportViewer.Reset()在加载新报告之前调用.这样做会将ReportViewer控件重置为其默认状态,LocalReport对象将替换为新实例.这应该可以解决您的问题.
(实际上,我偶然发现了一个非常相似的帖子,该帖子具有相同的解决方案:: LocalReport.SetParameters Exception尝试设置报告参数'ParameterName',此参数未在此报告中定义)