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

我們開發(fā)程序的時候绵载,經(jīng)常會碰到一些報表饲梭,如果是Winform的報表期吓,一般可以采用DevExpress控件組的XtraReport早歇,或者微軟的RDLC報表,當然還有一些其他的讨勤,在此不再贅述箭跳。由于本人在Winform開發(fā)中經(jīng)常使用到一些報表,有時候使用XtraReport報表潭千,有時候也使用RDLC報表刨晴,因此本篇主要介紹這兩種不同類型報表的使用,以及對比它們的差異性茄靠,以便我們更好的掌握了解慨绳。

1脐雪、XtraReport報表的使用

1)報表界面展示

在我的派車管理系統(tǒng)里面,我需要根據(jù)數(shù)據(jù)庫的記錄召锈,把相關的派車歷史信息做成一個報表統(tǒng)計的模塊涨岁,需要列出報表的明細(派車明細)和統(tǒng)計值(記錄數(shù)梢薪、公里數(shù))秉撇,這種類型的報表是很多情況下需要碰到的琐馆。
我需要實現(xiàn)一個基于XtraReport報表技術(shù)實現(xiàn)的功能界面瘦麸,如下面圖示所示滋饲。



這里面涉及的字段屠缭,包括字符型呵曹、日期型逢并,數(shù)值型郭卫、枚舉類型等贰军,還有統(tǒng)計值俯树、打印時間(參數(shù))贰盗,因此也算一個比較完整的報表展示了舵盈。

2)創(chuàng)建新報表

為了實現(xiàn)這個報表模塊秽晚,我們先使用VS的工具創(chuàng)建一個報表組件對象赴蝇。


在使用前句伶,我們需要設置好報表組件的各個顯示模塊考余,報表報表上下空間部分(TopMargin/BottomMargin)秃殉,這兩個部分用來調(diào)整上下的邊線的;
然后每個報表有頭部內(nèi)容和底部內(nèi)容的區(qū)分鳄袍,ReportHeader一般用來放置表格頭部字段顯示的拗小,明細的內(nèi)容包括展示列表的明細信息哀九,大致調(diào)整如下所示阅束。



3)設計報表控件和數(shù)據(jù)源管理

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



為了實現(xiàn)表格統(tǒng)計和展示厨幻,我們需要拖動兩個表格到報表界面里面去腿时,一個是報表頭字段圈匆,一個用來顯示報表明細的列表內(nèi)容跃赚,兩個單元格的寬度設置一致纬傲,并且上下空間要挨著叹括,否則顯示出來就有空間,不好看净嘀。
表格拖動過去后挖藏,可以使用右鍵添加相應的單元格膜眠,然后統(tǒng)一設置他們的背景顏色宵膨,高度寬度辟躏,邊框等屬性即可土全。
表格頭我們可以填寫相關的文字替代涯曲,但是報表的明細信息,我們需要綁定相應的字段內(nèi)容拨黔,因此需要增加一個數(shù)據(jù)源用來綁定到報表上去篱蝇。
在報表屬性里面零截,找到DataSource進行配置涧衙,如下所示弧哎。



拖動相關的表格撤嫩,然后設計其界面序攘,并綁定明細單元格的內(nèi)容為[ABC]這樣的格式程奠,就標識綁定了一個ABC的字段屬性了梦染。如下所示是綁定了一個HandNo的字段顯示朴皆。

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


4)特殊字段的處理

在報表的設計過程中伪货,我們一般會碰到各種不同的字段,它不是簡單的文本信息蒙挑,可能是日期忆蚀,也可以是統(tǒng)計值馋袜,計算值等欣鳖。



打印時間泽台,只需要增加一個XRPageInfo师痕,然后設置里面的值就可以了胰坟,這個有點類似RDLC的參數(shù)值泞辐。



從上面我們可以看到有很多項目可以選的吹缔,除了有時間厢塘,還有記錄數(shù)肌幽、總記錄數(shù)喂急、用戶名廊移、總數(shù)等等。
記錄數(shù)的統(tǒng)計設計如下所示懂诗,主要是通過千制的方式顯示响禽,調(diào)用Count函數(shù)處理芋类。

同樣侯繁,總公里數(shù)贮竟,是統(tǒng)計整個報表里面記錄的公里數(shù)操作咕别,調(diào)用SUM函數(shù)處理惰拱,它的設計界面如下偿短。



設計好Xtra報表后昔逗,我們就可以程序里面勾怒,直接調(diào)用進行加載處理即可笔链,代碼如下所示艾少。
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();
}

我們主要獲取數(shù)據(jù)源幔妨,并綁定數(shù)據(jù)源到對應的報表組件上,然后調(diào)用ReportPrintTool 進行展現(xiàn)即可古话,代碼非常簡潔陪踩,只是設計過程麻煩一些悉抵。

2、RDLC報表的使用

在我《會員管理系統(tǒng)的設計和開發(fā)(2)-- RDLC報表的設計及動態(tài)加載》里面傻谁,有對RDLC報表設計做了一些介紹审磁,RDLC是微軟的報表格式态蒂,它是一個相對比較獨立的文件,是一個基于XML描述性的文件钾恢,除了可以用在Winform上外赘那,也可以用在Web上募舟,通用性也非常不錯闻察。
基于對比的考慮辕漂,我也為同樣的模塊設計了一個一樣的報表钉嘹,RDLC報表最終展示界面如下所示。


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



兩者的展現(xiàn)效果都差不多细诸,只是界面效果有一些差異而已陋守。
1)RDLC的設計效果



由于RDLC它是一個獨立的XML文件猩系,它的描述全部在一個XML里面蝙眶,因此我們設計的時候褪那,只是對XML文件進行處理博敬,VS給我們提供了一個設計器及進行設計而已偏窝。
在RDLC的設計視圖里面武学,我們可以看到報表數(shù)據(jù)里面火窒,包括一些預定義的數(shù)據(jù)熏矿,以及我們添加進去的數(shù)據(jù)源票编。

當然報表設計少不了相關的控件慧域,因此在工具欄里面昔榴,可以看到可以用的報表控件元素碘橘,如下所示蛹屿。



2)報表特殊元素的處理
RDLC報表错负,也有一些如打印時間犹撒,分頁數(shù)據(jù)等粒褒,是需要特殊的處理了奕坟,打印時間是使用報表數(shù)據(jù)里面的【內(nèi)置字段】項目月杉,如下所示。

對于記錄總數(shù)和統(tǒng)計值,我們可以通過自定義的格式內(nèi)容進行處理蛙酪,如下所示桂塞。

統(tǒng)計總數(shù)的操作設計如下藐俺,調(diào)用SUM函數(shù)即可欲芹,如果忘記是那個吟吝,可以在下面類別里面進行查詢,里面有很多運算符官辽、常見函數(shù)等內(nèi)容可以使用同仆。

另外俗批,對于一些特殊的顯示格式岁忘,我們需要正確設置干像,如下是日期的格式設置麻汰。

3)報表的調(diào)用處理
由于報表的展現(xiàn)模塊什乙,我已經(jīng)放到了一個獨立的通用模塊里面,因此對于報表的加載智亮,只需要簡單的設置屬性点待,然后調(diào)用即可癞埠,如下所示颠区。

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

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

    dlg.ShowDialog();
}

上面主要也是構(gòu)建數(shù)據(jù)源毕莱,指定報表路徑和布局朋截,然后綁定報表展示模塊窗口即可部服。
下面附上幾個系統(tǒng)功能截圖廓八,供參考學習。
1)主界面列表瘫想,基于GridControl的展示仗阅,并增加統(tǒng)計欄目。



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



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

3减噪、XtraReport報表和RDLC報的差異

這兩者的報表都能實現(xiàn)相似的效果,不過XtraReport是把它集成到DLL里面车吹,類似編譯的窗體文件一樣了筹裕;而RDLC報表本身是一個獨立的文件,我們發(fā)布的時候窄驹,要把它帶上朝卒,但是又有較好的通用性。
對于XtraReport的字段內(nèi)容展示,默認就是調(diào)用了ToString()的函數(shù)處理伤疙,因此類似日期、枚舉類型,都不需要怎么樣設置今布,就可以正常顯示,但是RDLC報表設計里面傅蹂,我們需要為每種字段設置好對應的格式氓轰,枚舉類型好像解析還是會轉(zhuǎn)換為整形,因此需要在數(shù)據(jù)源級別進行轉(zhuǎn)換时捌,否則顯示不出來拿诸。
對于自定義函數(shù)方面,XtraReport提供了較好的設計界面蚀同,能夠很大程度減少出錯的機會;RDLC則提供了彈性化的操作,提供了很多函數(shù)進行參考卦睹,需要自己添加表達式,不過在編譯的時候垃环,能夠檢查出現(xiàn)的錯誤劲赠。
如果需要動態(tài)配置、加載或者開發(fā)一些新的報表展示,可能相對來說,RDLC更方便待逞,可以增量發(fā)布一些報表震束,然后在后臺配置即可展示,不需要改動源碼編譯拓诸。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市枢劝,隨后出現(xiàn)的幾起案子轴捎,更是在濱河造成了極大的恐慌秦驯,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件番枚,死亡現(xiàn)場離奇詭異损敷,居然都是意外死亡奥额,警方通過查閱死者的電腦和手機九榔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門先朦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來刺彩,“玉大人,你說我怎么就攤上這事≠寺” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長粘姜。 經(jīng)常有香客問我留储,道長丐膝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任岸啡,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘脐区。我一直安慰自己,他們只是感情好衰琐,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般全闷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上唆迁,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天科盛,我揣著相機與錄音母蛛,去河邊找鬼。 笑死狈醉,一個胖子當著我的面吹牛抱慌,可吹牛的內(nèi)容都是我干的信殊。 我是一名探鬼主播据德,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼赡译,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了誓斥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎顽染,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體双炕,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡狞悲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了妇斤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摇锋。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡丹拯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出荸恕,到底是詐尸還是另有隱情乖酬,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布融求,位于F島的核電站咬像,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏生宛。R本人自食惡果不足惜县昂,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望陷舅。 院中可真熱鬧倒彰,春花似錦、人聲如沸莱睁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缩赛。三九已至,卻和暖如春撰糠,著一層夾襖步出監(jiān)牢的瞬間酥馍,已是汗流浹背阅酪。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工旨袒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人术辐。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓砚尽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親辉词。 傳聞我的和親對象是個殘疾皇子必孤,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容