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 16:13:03

I said something before.....
SQL Server取得當月第一天及最後一天 2010-01-19 13:00
簡單的對DataTable做Distinct 2009-09-21 10:18
使用 svcutil 編譯 WCF 錯誤解法 2009-07-09 19:59
PHP加載MSSQL函式庫 2008-10-20 20:54
資料庫抓取固定筆數資料 2008-09-19 10:27
PHP與ASP共存 2008-07-05 22:03
CheckedBoxList的設定與取得勾選值 2008-06-21 08:21
在PHP中保護檔案下載位址 2008-04-04 17:49
MSSQL資料轉移至MySQL 2008-04-04 16:33
改變.NET Windows Forms的TabControl頁籤顏色 2008-04-02 16:08
DataGridView排序後,如何抓取綁定資料的正確索引值 2008-03-21 09:37
郵件回傳瀏覽記錄訊息 2008-02-13 23:21
PHP連結ASP.NET的Web Service 2007-12-25 23:15
HTTP服務在SELinux上的設定 2007-11-06 23:31
MindMeister - 心智圖線上編輯器 2007-04-30 00:41