好,所以我的情況是,我有一個窗體上的單個報表查看器,它基於選擇連接多個報表。我將所有報告設置爲構建操作的嵌入式資源。爲什麼我的報告在設置報告參數時拋出異常?
我在設置參數之前加載這樣的報告。
myReportViewer.LocalReport.ReportEmbeddedResource = "MyApp.MyReport1.rdlc";
OR
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();
}
用戶的時間,是嚇壞了的部分。通過查看代碼,這裏沒有什麼真正有用的。只要我先運行它,它就會工作。
就是這樣!我不敢相信我沒有嘗試過......好好享受你的+50分:) – meanbunny