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
| 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 |


~