有些時候,你需要在程序中使用報表的功能,但是又不想去部署和維護一台報表服務器。這個時候你可以考慮使用客戶端報表。
客戶端報表與前面提到的SSRS報表略有不同,SSRS報表是需要部署在報表服務的實例中以供其它平台使用,而客戶端報表不需要報表服務實例,它直接在相應的webform或者 winform程序中解析運行。
打開上一篇所創建的項目,右鍵單擊項目名稱選擇Add->New Item…,創建另外一個asp.net頁面。后續的客戶端報表我們將host到這個頁面中。
首先添加一個客戶端報表到項目中,同樣在右鍵項目名稱選擇Add->New Item…,左側選擇 Reporting,右邊選擇Report。
選擇一個名稱然后點擊Add。可以看到客戶端報表的設計界面,跟SQL Server 2012的服務器端報表設計界面類似,但是少了預覽。
同樣先為報表添加數據源,右鍵Report Data下的Datasets選擇Add Dataset…。
客戶端報表添加數據集的方式跟服務器報表的很不同。
在數據源配置工具界面中點擊New Connection…。
服務器名稱選擇本地,數據庫選擇AdventureWorksDW2012。
Adventure Works是微軟的示例數據庫,關於如何獲取並且部署這個數據庫可以參考我的這篇隨筆:
http://www.cnblogs.com/aspnetx/archive/2013/01/30/2883831.html
點 OK完成連接設置后,回到數據源配置向導界面,可以看到剛才配置的數據庫連接字符串信息。
點擊下一步之后,會提示將連接字符串進行保存,這里指定的是asp.net中的web.config文件中的連接字符串名稱。
點擊下一步,選擇FactInternetSales表。然后點完成。
回到數據集屬性,可以看到數據集當中的字段列表。
點OK完成數據集的創建。接下來數據集的結構可以看到跟服務器端報表沒有太大區別。
接下來按照服務器端報表的操作方式,先拖拽一個Table控件到報表設計界面上,然后依次拖拽需要的字段都Table控件中,如下圖。
到這里一個客戶端報表就創建完成了。接下來需要將其承載到一個帶有reportviewer控件的asp.net頁面中。
回到前面創建的asp.net頁面,拖拽一個reportviewer控件到頁面中,然后在設計界面中點擊ReportViewer右邊向右的箭頭,在ReportViewer Tasks里選擇剛才建立的報表。
切換到Source視圖,可以看到系統自動生成的標簽。
這里需要手動修改一下,把ReportEmbeddedResource里的設置更換成ReportPath="Report1.rdlc"。
Choose Report之后系統會自動為報表建立一個ObjectDataSource實例,這個實例是要傳遞給ReportViewer的。
不過這里還是需要手動做一個設置,否則在VS2012下會出現錯誤。
點擊ObjectDataSource向右的箭頭,點擊Configure Data Source…配置數據源。
點擊下拉列表,選擇第二個。
到這里直接點完成。
運行項目,可以看到客戶端報表的顯示結果。
以上,簡單建立客戶端報表的過程簡單介紹到這里。RDLC在asp.net下的使用方法從VS2008到2010再到2012都有細節上的變化,總體感覺后面的版本更復雜一些,如本文所描述。
此篇主要是介紹通過Dataset的方法作為客戶端報表的數據源,下一篇將介紹如何通過代碼的方式為客戶端報表提供數據源從而使客戶端報表獲取數據的方式更加靈活。
BTW: Visual Studio 2012中,如果直接按照以前版本的套路直接在Choose Report里選擇已經建立好的報表,會有一些問題。
比如在Choose Data Source之后選擇報表附帶的Dataset ,會導致Visual Studio 2012"閃退"。