ReportViewer顯示LocalReport及ServerReport
最近因為要開發多個報表,以前的做法是每個報表寫成一支程式供User操作,如果有10個報表,就會有10支程式....
這幾天把這些報表做了一下分析,使用相同變數的報表整合成一支程式,透過下拉選單讓User決定要看哪個報表,再依選擇顯示結果,程式如下:
// 遠端報表
string sReportName = cbReportName.SelectedValue.ToString();
rvViewer.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Remote;
rvViewer.ServerReport.ReportPath = string.Format("/路徑/{0}", sReportName);
後來,User的報表中有必須透過額外計算,因此無法直接使用遠端報表,因此,必須使用LocalReport,上網查了一下資料並修改程式,報表已可以自由切換本機及遠端了,程式如下:
// 本機報表
rvViewer.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local;
// 設定本機報表名稱
rvViewer.LocalReport.ReportEmbeddedResource = "ReportName1";
// 抓取資料
DataTable dtResult = .....;
DataSet ds = new DataSet("DataSetName");
ds.Tables.Add(dtResult.Copy());
bsReport.DataSource = ds;
bsReport.DataMember = "DataTableName";
ReportDataSource rdsData1 = new ReportDataSource("DataSetName_DataTableName", sReport);
rvViewer.LocalReport.DataSources.Add(rdsData1);
但問題來了,如果有兩個以上的LocalReport呢?這時候,User如先選擇本機A報表,再切換本機B報表時,系統就變的不聽話,所顯示的竟然還是A報表.....好像ReportViewer把A報表Cache住,不管怎麼改ReportEmbeddedResource屬性就是不理我.....
最後,在網路上發現只要加上rvViewer.Reset()問題就迎刃而解!這麼簡單一行,卻讓我花了大半天的時間.....
參考資料
2010-05-24 04:13:03
Label 在 PictureBox 上背景不能透明 | 2021-05-24 06:32 |
Textbox限制輸入數字 | 2016-11-14 21:17 |
C# 字串分割 | 2016-07-28 20:25 |
LINQ筆記 | 2016-07-27 03:33 |
SQL Server的記錄檔無限成長 | 2015-11-02 05:47 |
安裝MySQL ODBC 5.2錯誤 – Error 1918 | 2014-02-03 19:27 |
在Reporting Service報表上顯示QRCode | 2013-04-01 02:59 |
SQL Server DB管理筆記 | 2012-07-05 20:21 |
還原MSSQL遇到「備份組包含現有的XXX資料庫以外的資料庫備份」的錯誤 | 2012-05-15 12:35 |
Informix計算兩時間的差距 | 2010-08-12 06:01 |
SQL Server取得當月第一天及最後一天 | 2010-01-19 00:00 |
簡單的對DataTable做Distinct | 2009-09-20 22:18 |
使用 svcutil 編譯 WCF 錯誤解法 | 2009-07-09 07:59 |
PHP加載MSSQL函式庫 | 2008-10-20 08:54 |
資料庫抓取固定筆數資料 | 2008-09-18 22:27 |