天天看點

DevExpress的XtraReport和微軟RDLC報表的使用和對比

我們開發程式的時候,經常會碰到一些報表,如果是Winform的報表,一般可以采用DevExpress控件組的XtraReport,或者微軟的RDLC報表,當然還有一些其他的,在此不再贅述。由于本人在Winform開發中經常使用到一些報表,有時候使用XtraReport報表,有時候也使用RDLC報表,是以本篇主要介紹這兩種不同類型報表的使用,以及對比它們的差異性,以便我們更好的掌握了解。

在我的派車管理系統裡面,我需要根據資料庫的記錄,把相關的派車曆史資訊做成一個報表統計的子產品,需要列出報表的明細(派車明細)和統計值(記錄數、公裡數),這種類型的報表是很多情況下需要碰到的。

我需要實作一個基于XtraReport報表技術實作的功能界面,如下面圖示所示。

DevExpress的XtraReport和微軟RDLC報表的使用和對比

這裡面涉及的字段,包括字元型、日期型,數值型、枚舉類型等,還有統計值、列印時間(參數),是以也算一個比較完整的報表展示了。

為了實作這個報表子產品,我們先使用VS的工具建立一個報表元件對象。

DevExpress的XtraReport和微軟RDLC報表的使用和對比

在使用前,我們需要設定好報表元件的各個顯示子產品,報表報表上下空間部分(TopMargin/BottomMargin),這兩個部分用來調整上下的邊線的;

然後每個報表有頭部内容和底部内容的區分,ReportHeader一般用來放置表格頭部字段顯示的,明細的内容包括展示清單的明細資訊,大緻調整如下所示。

DevExpress的XtraReport和微軟RDLC報表的使用和對比
DevExpress的XtraReport和微軟RDLC報表的使用和對比

在VS左邊的工具箱裡面有響應的XtraReport控件,拖動到報表界面裡面就可以進行繪制設計了。

DevExpress的XtraReport和微軟RDLC報表的使用和對比

為了實作表格統計和展示,我們需要拖動兩個表格到報表界面裡面去,一個是報表頭字段,一個用來顯示報表明細的清單内容,兩個單元格的寬度設定一緻,并且上下空間要挨着,否則顯示出來就有空間,不好看。

表格拖動過去後,可以使用右鍵添加相應的單元格,然後統一設定他們的背景顔色,高度寬度,邊框等屬性即可。

表格頭我們可以填寫相關的文字替代,但是報表的明細資訊,我們需要綁定相應的字段内容,是以需要增加一個資料源用來綁定到報表上去。

在報表屬性裡面,找到DataSource進行配置,如下所示。

DevExpress的XtraReport和微軟RDLC報表的使用和對比

拖動相關的表格,然後設計其界面,并綁定明細單元格的内容為[ABC]這樣的格式,就辨別綁定了一個ABC的字段屬性了。如下所示是綁定了一個HandNo的字段顯示。

DevExpress的XtraReport和微軟RDLC報表的使用和對比

 最終設計的報表界面如下所示。

DevExpress的XtraReport和微軟RDLC報表的使用和對比

在報表的設計過程中,我們一般會碰到各種不同的字段,它不是簡單的文本資訊,可能是日期,也可以是統計值,計算值等。

DevExpress的XtraReport和微軟RDLC報表的使用和對比

列印時間,隻需要增加一個XRPageInfo,然後設定裡面的值就可以了,這個有點類似RDLC的參數值。

DevExpress的XtraReport和微軟RDLC報表的使用和對比

從上面我們可以看到有很多項目可以選的,除了有時間,還有記錄數、總記錄數、使用者名、總數等等。

記錄數的統計設計如下所示,主要是通過千制的方式顯示,調用Count函數處理。

DevExpress的XtraReport和微軟RDLC報表的使用和對比

同樣,總公裡數,是統計整個報表裡面記錄的公裡數操作,調用SUM函數處理,它的設計界面如下。

DevExpress的XtraReport和微軟RDLC報表的使用和對比

設計好Xtra報表後,我們就可以程式裡面,直接調用進行加載處理即可,代碼如下所示。

我們主要擷取資料源,并綁定資料源到對應的報表元件上,然後調用ReportPrintTool 進行展現即可,代碼非常簡潔,隻是設計過程麻煩一些。

基于對比的考慮,我也為同樣的子產品設計了一個一樣的報表,RDLC報表最終展示界面如下所示。

DevExpress的XtraReport和微軟RDLC報表的使用和對比

 和前面XtraReport的報表界面做一個對比。

DevExpress的XtraReport和微軟RDLC報表的使用和對比

兩者的展現效果都差不多,隻是界面效果有一些差異而已。

DevExpress的XtraReport和微軟RDLC報表的使用和對比

由于RDLC它是一個獨立的XML檔案,它的描述全部在一個XML裡面,是以我們設計的時候,隻是對XML檔案進行處理,VS給我們提供了一個設計器及進行設計而已。

在RDLC的設計視圖裡面,我們可以看到報表資料裡面,包括一些預定義的資料,以及我們添加進去的資料源。

DevExpress的XtraReport和微軟RDLC報表的使用和對比

當然報表設計少不了相關的控件,是以在工具欄裡面,可以看到可以用的報表控件元素,如下所示。

DevExpress的XtraReport和微軟RDLC報表的使用和對比

RDLC報表,也有一些如列印時間,分頁資料等,是需要特殊的處理了,列印時間是使用報表資料裡面的【内置字段】項目,如下所示。

DevExpress的XtraReport和微軟RDLC報表的使用和對比

對于記錄總數和統計值,我們可以通過自定義的格式内容進行處理,如下所示。

DevExpress的XtraReport和微軟RDLC報表的使用和對比

統計總數的操作設計如下,調用SUM函數即可,如果忘記是那個,可以在下面類别裡面進行查詢,裡面有很多運算符、常見函數等内容可以使用。

DevExpress的XtraReport和微軟RDLC報表的使用和對比

另外,對于一些特殊的顯示格式,我們需要正确設定,如下是日期的格式設定。

DevExpress的XtraReport和微軟RDLC報表的使用和對比

由于報表的展現子產品,我已經放到了一個獨立的通用子產品裡面,是以對于報表的加載,隻需要簡單的設定屬性,然後調用即可,如下所示。

上面主要也是建構資料源,指定報表路徑和布局,然後綁定報表展示子產品視窗即可。 

下面附上幾個系統功能截圖,供參考學習。

1)主界面清單,基于GridControl的展示,并增加統計欄目。

DevExpress的XtraReport和微軟RDLC報表的使用和對比

2)曆史記錄報表展示(XtraReport報表)

DevExpress的XtraReport和微軟RDLC報表的使用和對比

3)兩種不同格式的派車單報表展示(RDLC報表)。

DevExpress的XtraReport和微軟RDLC報表的使用和對比
DevExpress的XtraReport和微軟RDLC報表的使用和對比

這兩者的報表都能實作相似的效果,不過XtraReport是把它內建到DLL裡面,類似編譯的窗體檔案一樣了;而RDLC報表本身是一個獨立的檔案,我們釋出的時候,要把它帶上,但是又有較好的通用性。

對于XtraReport的字段内容展示,預設就是調用了ToString()的函數處理,是以類似日期、枚舉類型,都不需要怎麼樣設定,就可以正常顯示,但是RDLC報表設計裡面,我們需要為每種字段設定好對應的格式,枚舉類型好像解析還是會轉換為整形,是以需要在資料源級别進行轉換,否則顯示不出來。

對于自定義函數方面,XtraReport提供了較好的設計界面,能夠很大程度減少出錯的機會;RDLC則提供了彈性化的操作,提供了很多函數進行參考,需要自己添加表達式,不過在編譯的時候,能夠檢查出現的錯誤。

如果需要動态配置、加載或者開發一些新的報表展示,可能相對來說,RDLC更友善,可以增量釋出一些報表,然後在背景配置即可展示,不需要改動源碼編譯。