XtraReport控件VS微軟RDLC報表,誰更勝一籌?

DevExpress技術交流羣3:700924826      歡迎一起進羣討論

DevExpress擁有.NET開發需要的所有平臺控件,包含600多個UI控件、報表平臺、DevExpress Dashboard eXpressApp 框架、適用於 Visual Studio的CodeRush等一系列輔助工具。

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

一、XtraReport報表的使用

1. 報表界面展示

在我的派車管理系統裏面,我需要根據數據庫的記錄,把相關的派車歷史信息做成一個報表統計的模塊,需要列出報表的明細(派車明細)和統計值(記錄數、公里數),這種類型的報表是很多情況下需要碰到的。

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

WinForm界面開發教程

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

2. 創建新報表

爲了實現這個報表模塊,我們先使用VS的工具創建一個報表組件對象。

WinForm界面開發教程

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

然後每個報表有頭部內容和底部內容的區分,ReportHeader一般用來放置表格頭部字段顯示的,明細的內容包括展示列表的明細信息,大致調整如下所示。

WinForm界面開發教程
WinForm界面開發教程

3. 設計報表控件和數據源管理

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

WinForm界面開發教程

爲了實現表格統計和展示,我們需要拖動兩個表格到報表界面裏面去,一個是報表頭字段,一個用來顯示報表明細的列表內容,兩個單元格的寬度設置一致,並且上下空間要挨着,否則顯示出來就有空間,不好看。

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

表格頭我們可以填寫相關的文字替代,但是報表的明細信息,我們需要綁定相應的字段內容,因此需要增加一個數據源用來綁定到報表上去。

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

WinForm界面開發教程

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

WinForm界面開發教程

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

WinForm界面開發教程

4. 特殊字段的處理

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

WinForm界面開發教程

打印時間,只需要增加一個XRPageInfo,然後設置裏面的值就可以了,這個有點類似RDLC的參數值。

WinForm界面開發教程

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

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

WinForm界面開發教程

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

WinForm界面開發教程

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

 

private void PrintReport()
{
string where = GetConditionSql();
List<CarApplyInfo> list = BLLFactory<CarApply>.Instance.Find(where);

FrmHistoryReport report = new FrmHistoryReport();
report.DataSource = list;

ReportPrintTool tool = new ReportPrintTool(report);
tool.ShowPreview();
}

 

我們主要獲取數據源,並綁定數據源到對應的報表組件上,然後調用ReportPrintTool 進行展現即可,代碼非常簡潔,只是設計過程麻煩一些。

二、RDLC報表的使用

在《會員管理系統的設計和開發(2)-- RDLC報表的設計及動態加載》裏面,有對RDLC報表設計做了一些介紹,RDLC是微軟的報表格式,它是一個相對比較獨立的文件,是一個基於XML描述性的文件,除了可以用在Winform上外,也可以用在Web上,通用性也非常不錯。

基於對比的考慮,我也爲同樣的模塊設計了一個一樣的報表,RDLC報表最終展示界面如下所示。

WinForm界面開發教程

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

WinForm界面開發教程

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

WinForm界面開發教程

1. RDLC的設計效果

由於RDLC它是一個獨立的XML文件,它的描述全部在一個XML裏面,因此我們設計的時候,只是對XML文件進行處理,VS給我們提供了一個設計器及進行設計而已。

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

WinForm界面開發教程

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

WinForm界面開發教程

二、報表特殊元素的處理

RDLC報表,也有一些如打印時間,分頁數據等,是需要特殊的處理了,打印時間是使用報表數據裏面的【內置字段】項目,如下所示。

WinForm界面開發教程

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

WinForm界面開發教程

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

WinForm界面開發教程

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

WinForm界面開發教程

3. 報表的調用處理

由於報表的展現模塊,我已經放到了一個獨立的通用模塊裏面,因此對於報表的加載,只需要簡單的設置屬性,然後調用即可,如下所示。

 

private void PrintRDLCReport()
{
string where = GetConditionSql();
List<CarApplyInfo> list = BLLFactory<CarApply>.Instance.Find(where);
foreach (CarApplyInfo info in list)
{
info.Data1 = info.Status.ToString();//轉換枚舉類型描述
}

ReportViewerDialog dlg = new ReportViewerDialog();
dlg.Text = "歷史記錄報表";
dlg.DataSourceDict.Add("CarApplyInfo", list);
dlg.ReportName = "WHC.CarDispatch.HistoryReport";
dlg.IsPrintLayout = true;

dlg.ShowDialog();
}

 

上面主要也是構建數據源,指定報表路徑和佈局,然後綁定報表展示模塊窗口即可。

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

1)主界面列表,基於GridControl的展示,並增加統計欄目。

WinForm界面開發教程

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

WinForm界面開發教程

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

WinForm界面開發教程
WinForm界面開發教程

三、XtraReport報表和RDLC報的差異

這兩者的報表都能實現相似的效果,不過XtraReport是把它集成到DLL裏面,類似編譯的窗體文件一樣了;而RDLC報表本身是一個獨立的文件,我們發佈的時候,要把它帶上,但是又有較好的通用性。

對於XtraReport的字段內容展示,默認就是調用了ToString()的函數處理,因此類似日期、枚舉類型,都不需要怎麼樣設置,就可以正常顯示,但是RDLC報表設計裏面,我們需要爲每種字段設置好對應的格式,枚舉類型好像解析還是會轉換爲整形,因此需要在數據源級別進行轉換,否則顯示不出來。

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

如果需要動態配置、加載或者開發一些新的報表展示,可能相對來說,RDLC更方便,可以增量發佈一些報表,然後在後臺配置即可展示,不需要改動源碼編譯。

本文轉載自博客園-伍華聰


上DevExpress中文網,獲取第一手最新產品資訊!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章