跳到主要內容

動態改變RDLC報表DataSource

先用設定好的DataSet(這裏叫Report.xsd)設定RDLC檔,以Report.rdlc為例。
接者在Asp.Net報表裏拉入Report Viewer,指向Report.rdlc,刪掉datasource那些用不到的東西,在aspx裏會看到類似
<rsweb:reportviewer id="ReportViewer1" runat="server" font-names="Verdana" font-size="8pt" height="400px" width="800px">
<LocalReport ReportPath="Report.rdlc">
</LocalReport>
</rsweb:reportviewer>

RDLC檔其實是一個xml,和Crystal Reports的rpt二進位格式大不同。用文字編輯器打開來看,會看到類似:<DataSet Name="Report_ReportList"> 或是<DataSet Name>Report_ReportList</DataSet Name> 這裏Report是我在.xsd檔裏定義的DataSet名稱,而ReportList是table名稱,知道這個DataSet Name後,就可以動態改變RDLC的DataSource。

用我寫的程式片斷舉例:
private void RefreshReport()
{
ReportViewer1.LocalReport.DataSources.Clear();
DataTable dt = getReportDataTable(); //這是我寫的private method
ReportViewer1.LocalReport.DataSources.Add(
new Microsoft.Reporting.WebForms.ReportDataSource("Report_ReportList", dt));
}
很簡單吧!只要加入一個ReportDataSource,參數裏設定DataSet為相同名稱,再把DataTable傳入即可。要重新改變報表內容時,必須先執行
ReportViewer1.LocalReport.DataSources.Clear(); 
否則每次都只看到第一次傳入的內容。

留言

匿名表示…
你好! 很喜歡看你的blog 有不同有關電腦的專題, 很棒! 努力啞!

看完 datasource後, 有一問題請教, 在vs 2005, 使用reportview open CrystalReport每佔用了記憶體, 但沒有釋放, 即使用了clear(), dispose(), gc.collect(). 都未能釋放記憶體.
請問有這經驗嗎?
鳥毅寫道…
抱歉了,小弟只是兩光網管,programming only for fun!

這個問題在下確實不知道,因為我只有玩一玩而已:P

建議這位老大可以找原廠support,這幾年台灣的總代理是精誠公司;或是詢問uuu的鄭淑芬小姐。

幫您問了一下股溝,可能和 http://social.msdn.microsoft.com/forums/en-US/vsreportcontrols/thread/d21f8b56-3123-4aff-bf84-9cce727bc2ce 類似吧?希望對你有幫助。
匿名表示…
謝謝!

這個網誌中的熱門文章

自然人憑證讀卡機驅動程式

鳥毅用的是第一代的自然人憑證讀卡機,EZ100PU(後來有同事買EZmini可以讀SIM卡似乎更好),每年報稅時用一次。 本來只是要申請些政府業務,一時之間找不到光碟,沒想到在 驅動程式下載 居然看到Linux和Mac的驅動程式,剩下的就是政府單位的網頁和程式應該改版了吧!!!

DBeaver 介面語言

DBeaver是我個人頗常用的一套跨平台Database管理工具,最近升級後發現Windows版本居然變成簡體中文,而且無法切換為英文。

如何將較高版本SQL Server複製到低版本SQL Server (降級為舊版)並保留權限及資料庫圖表

一般若是要將SQL Server裡的Database轉往其他Server時,最簡單的方式就是備份(Backup)後再還原(Restore),或者是䣃離(detach)後附加(attach)。 但是很不幸地,若是由較低版本(e.g. 2008)到較高版本(e.g. 2012)要怎麼辦呢?