zoukankan      html  css  js  c++  java
  • DevExpress的XtraReport和微软RDLC报表的使用和对比

    我们开发程序的时候,经常会碰到一些报表,如果是Winform的报表,一般可以采用DevExpress控件组的XtraReport,或者微软的RDLC报表,当然还有一些其他的,在此不再赘述。由于本人在Winform开发中经常使用到一些报表,有时候使用XtraReport报表,有时候也使用RDLC报表,因此本篇主要介绍这两种不同类型报表的使用,以及对比它们的差异性,以便我们更好的掌握了解。

    1、XtraReport报表的使用

    1)报表界面展示

    在我的派车管理系统里面,我需要根据数据库的记录,把相关的派车历史信息做成一个报表统计的模块,需要列出报表的明细(派车明细)和统计值(记录数、公里数),这种类型的报表是很多情况下需要碰到的。

    我需要实现一个基于XtraReport报表技术实现的功能界面,如下面图示所示。

     

    这里面涉及的字段,包括字符型、日期型,数值型、枚举类型等,还有统计值、打印时间(参数),因此也算一个比较完整的报表展示了。

    2)创建新报表

    为了实现这个报表模块,我们先使用VS的工具创建一个报表组件对象。

    在使用前,我们需要设置好报表组件的各个显示模块,报表报表上下空间部分(TopMargin/BottomMargin),这两个部分用来调整上下的边线的;

    然后每个报表有头部内容和底部内容的区分,ReportHeader一般用来放置表格头部字段显示的,明细的内容包括展示列表的明细信息,大致调整如下所示。

    3)设计报表控件和数据源管理

    在VS左边的工具箱里面有响应的XtraReport控件,拖动到报表界面里面就可以进行绘制设计了。

    为了实现表格统计和展示,我们需要拖动两个表格到报表界面里面去,一个是报表头字段,一个用来显示报表明细的列表内容,两个单元格的宽度设置一致,并且上下空间要挨着,否则显示出来就有空间,不好看。

    表格拖动过去后,可以使用右键添加相应的单元格,然后统一设置他们的背景颜色,高度宽度,边框等属性即可。

    表格头我们可以填写相关的文字替代,但是报表的明细信息,我们需要绑定相应的字段内容,因此需要增加一个数据源用来绑定到报表上去。

    在报表属性里面,找到DataSource进行配置,如下所示。

    拖动相关的表格,然后设计其界面,并绑定明细单元格的内容为[ABC]这样的格式,就标识绑定了一个ABC的字段属性了。如下所示是绑定了一个HandNo的字段显示。

     最终设计的报表界面如下所示。

     4)特殊字段的处理

    在报表的设计过程中,我们一般会碰到各种不同的字段,它不是简单的文本信息,可能是日期,也可以是统计值,计算值等。

    打印时间,只需要增加一个XRPageInfo,然后设置里面的值就可以了,这个有点类似RDLC的参数值。

    从上面我们可以看到有很多项目可以选的,除了有时间,还有记录数、总记录数、用户名、总数等等。

    记录数的统计设计如下所示,主要是通过千制的方式显示,调用Count函数处理。

    同样,总公里数,是统计整个报表里面记录的公里数操作,调用SUM函数处理,它的设计界面如下。

     

    设计好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 进行展现即可,代码非常简洁,只是设计过程麻烦一些。

    2、RDLC报表的使用

    在我《会员管理系统的设计和开发(2)-- RDLC报表的设计及动态加载》里面,有对RDLC报表设计做了一些介绍,RDLC是微软的报表格式,它是一个相对比较独立的文件,是一个基于XML描述性的文件,除了可以用在Winform上外,也可以用在Web上,通用性也非常不错。

    基于对比的考虑,我也为同样的模块设计了一个一样的报表,RDLC报表最终展示界面如下所示。

     和前面XtraReport的报表界面做一个对比。

    两者的展现效果都差不多,只是界面效果有一些差异而已。

    1)RDLC的设计效果

    由于RDLC它是一个独立的XML文件,它的描述全部在一个XML里面,因此我们设计的时候,只是对XML文件进行处理,VS给我们提供了一个设计器及进行设计而已。

    在RDLC的设计视图里面,我们可以看到报表数据里面,包括一些预定义的数据,以及我们添加进去的数据源。

    当然报表设计少不了相关的控件,因此在工具栏里面,可以看到可以用的报表控件元素,如下所示。

    2)报表特殊元素的处理

    RDLC报表,也有一些如打印时间,分页数据等,是需要特殊的处理了,打印时间是使用报表数据里面的【内置字段】项目,如下所示。

     

    对于记录总数和统计值,我们可以通过自定义的格式内容进行处理,如下所示。

    统计总数的操作设计如下,调用SUM函数即可,如果忘记是那个,可以在下面类别里面进行查询,里面有很多运算符、常见函数等内容可以使用。

    另外,对于一些特殊的显示格式,我们需要正确设置,如下是日期的格式设置。

     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的展示,并增加统计栏目。

    2)历史记录报表展示(XtraReport报表)

    3)两种不同格式的派车单报表展示(RDLC报表)。

    3、XtraReport报表和RDLC报的差异

    这两者的报表都能实现相似的效果,不过XtraReport是把它集成到DLL里面,类似编译的窗体文件一样了;而RDLC报表本身是一个独立的文件,我们发布的时候,要把它带上,但是又有较好的通用性。

    对于XtraReport的字段内容展示,默认就是调用了ToString()的函数处理,因此类似日期、枚举类型,都不需要怎么样设置,就可以正常显示,但是RDLC报表设计里面,我们需要为每种字段设置好对应的格式,枚举类型好像解析还是会转换为整形,因此需要在数据源级别进行转换,否则显示不出来。

    对于自定义函数方面,XtraReport提供了较好的设计界面,能够很大程度减少出错的机会;RDLC则提供了弹性化的操作,提供了很多函数进行参考,需要自己添加表达式,不过在编译的时候,能够检查出现的错误。

    如果需要动态配置、加载或者开发一些新的报表展示,可能相对来说,RDLC更方便,可以增量发布一些报表,然后在后台配置即可展示,不需要改动源码编译。

  • 相关阅读:
    arcgis api 3.x for js 入门开发系列八聚合效果(附源码下载)
    arcgis api 3.x for js 入门开发系列七图层控制(附源码下载)
    arcgis api 3.x for js 入门开发系列六地图分屏对比(附源码下载)
    arcgis api 3.x for js 入门开发系列五地图态势标绘(附源码下载)
    arcgis api 3.x for js 入门开发系列四地图查询(附源码下载)
    Java里面获取当前服务器的IP地址
    Flutter at Google I/O 2018
    Modbus RTU 协议使用汇总
    plsql 创建表空间、用户、赋予权限
    Oracle:ODP.NET Managed 小试牛刀
  • 原文地址:https://www.cnblogs.com/zxtceq/p/5691010.html
Copyright © 2011-2022 走看看