前一段時間,發了幾篇關於RDLC報表的隨筆,由於這些隨筆中沒有關於報表設計方面的內容,於是不少網友和我聯絡,問了一些關於報表設計方面的問題,最近準備寫幾篇關於RDLC報表設計的隨筆。
這篇隨筆主要描述實現鑽研報表的步驟。
鑽研報表的資料來源應該是兩個具有主子關係的表,在這篇隨筆中以Northwind資料庫中的訂單和訂單明細作為資料來源。
1、在Visual Studio 2005中建立一個Windows應用程式RDLCDR。
2、在項目中添加資料來源,資料來源並不一定用來為報表提供資料(當然Visual Studio 2005提供的操作非常方便),主要是在報表設計時可以方便向報表中進列欄位拖曳。添加資料來源意味著在項目中添加了一個資料集Orders.xsd檔案,當報表的資料不是來源於關係型資料庫(如Flat Files或Web Services等)時,我們可以自己定義一個xsd檔案作為報表設計時的資料來源,而在程式中重新為報表載入資料。
3、在項目中添加報表rptOrder.rdlc,這個報表非常簡單,不具體介紹其設計步驟。報表檔案中將顯示“訂單”的內容,其結構如1所示:
圖1 “訂單”報表的結構
4、同上,添加報表rptOrderDetails.rdlc,其結構如2所示:
圖2 “訂單明細”報表的結構
5、在報表rptOrder.rdlc中,選中表控制項的“表詳細資料”行的第一列“=Fields!訂單ID.Value”儲存格,右鍵“屬性”彈出“文字框屬性”對話方塊(3所示),在“導航”選項卡的“超連結操作”中,選中“跳至報表”並在下拉式清單中選擇報表rptOrderDetails,單擊下拉式清單右邊的“參數...”按鈕,進行入圖4所示的設定。
圖3 “文字框屬性”對話方塊
圖4 “跳至報表”參數設定
6、在報表rptOrderDetails中,使用菜單“報表” →“報表參數”進入“報表參數”對話方塊,並如5所示設定參數orderid,這個參數主要用於從rptOrder接收傳值。
圖5 報表參數orderid設定(點擊小圖看大圖)
7、選中報表rptOrderDetail中的表格控制項,右鍵“屬性”,進入“表屬性”對話方塊,在“篩選器”選項卡中,設定如6所示的篩選器。在構造篩選器時,最好使用“編輯運算式”對話方塊產生運算式,除非足夠熟悉,否則,手寫運算式很可能會出現錯誤,例如運算式前面一定要有“=”。
圖6 篩選器設定
OK,至此,報表設計需要做的內容就完成了,下面是如何為報表提供資料,並顯示在ReportViewer中了。
8、在WinForm表單上放置ReportViewer控制項,並單擊控制項右上方的三角符號,彈出“ReportViewer 任務”對話方塊中(圖7),選擇報表RDLCDR.rptOrder.rdlc。如果前面提到的資料集檔案(.xsd檔案)是由系統自動產生的話,系統會自動為表單產生DataAdapter、BindingSource和DataSet,刪除之,我們在下面的步驟中手動指定報表的資料來源,否則可能會出現報表不報錯,但報表內無資料的情況。
圖7 ReportViewer任務對話方塊
9、在表單中使用8所示的代碼為報表和鑽研報表指定資料來源,完成最後的操作。需要注意的是8中的“資料集名稱”必須指定正確,而這個名稱可以從9所示的對話方塊中取得。
圖8 指定資料來源的代碼(點擊小圖看大圖)
圖9 “資料集名稱”的出處
結果如下:
圖10 “訂單”報表
圖11 “訂單明細”鑽研報表
Demo下載
另外,在Web應用程式中,也可以使用此方法建立DrillThrough報表,不過代碼中的Microsoft.Reporting.WinForms.ReportDataSource要改為Microsoft.Reporting.WebForms.ReportDataSource。