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

I said something before.....
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