不管你是使用網站開發ASP.NET程式,還是使用Windows Applicatioion專案,在左邊的工具箱都可以找到這個元件的圖示。
或許有些人寫過Reporting Services的也有機會用到這個元件,因為這個元件不單單可以顯示Client-Side Report,也可以遠端連結到已經撰寫好放在Reporting Services中的Report(這種模式稱作:Remote Report),不過這篇文章會把重點擺放在Client-Side Report。
為使大家了解何謂Client-Side Report,請先參考底下的架構圖
開發者使用Visual Studio的IDE來開發報表定義檔,其中會定義該報表中的所有元件,但在RDLC中,並不會定義資料來源(這與Reporting Services中的RDL不同),在RDLC中只會定義報表資料格式(後續的章節會再在介紹),而資料來源則需要於Client端的應用程式,於Run Time的時候再匯入,使用者所看到的結果,其實是由報表定義檔+資料所呈現的結果。
其實RDLC的Report非常好開發,可攜性也非常高,如架構圖所示,它只需要.NETFramework Run Time即可以驅動,不像Reporting Services的Report,需先啟動Reporting Service才可,所以如果只是要純開發報表的話,不需要Reporting Service的額外功能,例如:排程、寄送Email、Cache Reports等等功能的話,使用RDLC開發報表是一項不錯的選擇,而開發RDLC需要確三個步驟
- 程式撰寫建立資料來源連結
- 設計報表版面
- 將資料匯入報表
1.程式撰寫建立資料來源連結
使用RDLC定義的資料需使用Strongly Type DataTable才可以,所以我們先於專案中新增一個Strongly Typed DataTable(這裡不再對ADO.NET相關技術再做介紹,有興趣可以參考 Building a DAL using Strongly Typed TableAdapters and DataTables in VS 2005 and ASP.NET 2.0 )
成功加入後,VS會出現之畫面如下圖
接下來我們建立一個TableAdapter(使用此技巧新增TableAdapter會順便建立Strong Typed DataTable),如下圖
選擇TableAdapter(T)...,選擇資料來源,這裡我們使用微軟的範例資料庫北風Northwnd
選擇【使用SQL陳述式(S)】
填入如下所示之SQL程式碼,點選【下一步】
使用預設設定即可,點選【完成】
完成上述步驟之後,出現如下圖所示之Strongly Type DataTable Employees
2.設計報表版面
接下來我們新增一個ReportViewer元件,所以使用Visual studio新增一個aspx頁面(這裡使用Web Application方式),然後拉入ReportViewer元件,如下圖所示
此時的原始檔如下
可看到,ReportViewer定義標籤(注意:有時候可能需要觀看定義的標籤,來確定使用UI設定是否有問題),然後再新增一個RDLC報表
出現畫面如下,此為報表設計畫面
此時拖曳【資料表】元件到設計畫面中
接下來,把左邊的視窗切換到【報表資料來源】,並拖曳欄位Title、FirstName、LastName、BirthDate到【資料表】元件的【詳細資料】欄位中,如下
此時我們已經設計好報表版面,將畫面切換到aspx(Default.aspx)設計畫面中,然後於ReportViewer元件中,設定報表為Report1.rdlc(此為我們剛剛所設計之報表版面)
3. 將資料匯入報表
將報表版面設定完畢之後,最後便是撰寫程式將資料匯入報表,我們進入Default.aspx的後置程式碼部分Default.aspx.cs,撰寫程式如下
注意,我們需要先引用Microsoft.Reporting.WebForms 命名空間,程式13~16行會呼叫我們剛剛所定義的SQL程式碼,並把資料匯入Strongly Typed DataTable 變數為 EmployeeDT中,程式19行定義報表來源物件,20行定義該來源名稱(注意:此名稱在剛剛設計報表版面的時候,Visual Studio便已自動產生,且會有一定的命名規則,如不確定,可進入RDLC的報表定義檔中,使用可觀看XMl的編輯器,確定該名稱為何)
程式 21行設定該資料來源的資料,22行將資料來源物件加入ReportViewer的DataSources中,最後我們觀看該頁面結果
設樣便簡單的完成我們第一個Client-Side Report。
1 則留言:
你好, 非常感謝您的這篇教學文章
讓我釐清一些觀念
知道可以不用透過 reporting services產生報表
也解決了 "尚未提供資料來源 'DataSet1' 的資料來源執行個體。" 這個問題
但最後還是無法成功
在網頁上瀏覽時 report viewer 會一直出現正在載入的訊息
遲遲無法出現報表
如圖
http://www.flickr.com/photos/84780185@N04/7763219794/in/photostream
不知道您有沒有遇過這樣的問題呢??
張貼留言