← 返回所有博客文章

做为程序开发人员,要多想办法减轻工作量,以获得足够多的业余时间做自己喜欢做的事。如果在开发报表中,能够完成报表开发、同时还能作出漂亮的报表,那么肯定会有更多的时间做自己的事情---减少和产品经理、需求经理沟通的成本。在本节,我们通过AR9内置的一些功能作出漂亮的报表来吧:如内置地图(Chart)控件、2D/3D图表、条形码、迷你图、数据条、信号灯以及图标集等数据可视化解决方案,让报表数据更易于阅读和理解。下面我们通过3个实战报表案例进行解读。

实战报表1:常规报表--条形码--商品铭牌

ActiveReports 提供了Barcode控件,该控件支持37中条码格式,其中包括:QR二维码、Code39码、Codabar码、Code25码、ITF25码、Matrix25码、UPC-A码、UPC-E码、EAN-13码、EAN-8码等一维条码和PDF417等二维条码。

image

 

Step 1:新建报表rptBrandInfo.rpx

image

选择AR9的区域报表(基于XML),输入文件名,点击添加。

Step 2:新建数据源

image

单击Detail左边的数据源图标,输入链接字符串和SQL。

用到的SQL:

Select * from 液晶彩色电视机型号信息

Step 3:设计报表背景圆角--圆角矩形功能

image      image

添加Shape报表控件,在属性对话框中点击“属性对话框”,然后在弹出的对话框中选择RoundRect图形,用鼠标拖动圆角矩形的黄色小点,即可完成圆角矩形的设计。

image

Step 4:设计报表QR二维码

image      image

Barcode报表控件,支持37种二维码类型,完全可满足信息系统的需求。 默认的二维码是Ansi39类型,在这个例子中,我们设置为 QRCode 类型的(QR二维码),还可以对QR二维码进行更多的属性设置。

image

Step 5:设计报表数据部分

image

 

实战报表2:常规报表--报表皮肤

在 ActiveReports 中,可以设置报表中不同控件的样式,然后把这些样式保存到一个外部的XML文件当中,供其他报表使用。如果用户希望同一份报表以不用的外观分发,只需要简单地修改样式表单,无需逐个改变每个报表中的单个控件的字体、颜色、尺寸等。

image

 

Step 1:新建报表rptTheme1.rdlx

 image

Step 2:新建数据源

image

添加2个数据集,用到的SQL 1:

SELECT 类别.类别名称,订单.货主地区,SUM(订单明细.数量) AS 销售量 FROM (( 订单
INNER JOIN 订单明细 ON 订单.订单ID = 订单明细.订单ID)
INNER JOIN 产品 ON 订单明细.产品ID = 产品.产品ID)
INNER JOIN 类别 ON 产品.类别ID = 类别.类别ID
WHERE DATEDIFF("yyyy",订单.订购日期,'2011-01-01') = 0
GROUP BY 类别.类别名称,订单.货主地区
ORDER BY 类别.类别名称,订单.货主地区

 

用到的SQL 2:

SELECT DATEPART("m",订单.订购日期) AS 订购月,类别.类别名称,SUM(订单明细.数量) AS 销售量 FROM (( 订单
INNER JOIN 订单明细 ON 订单.订单ID = 订单明细.订单ID)
INNER JOIN 产品 ON 订单明细.产品ID = 产品.产品ID)
INNER JOIN 类别 ON 产品.类别ID = 类别.类别ID
WHERE DATEDIFF("yyyy",订单.订购日期,'2011-01-01') = 0
GROUP BY DATEPART("m",订单.订购日期),类别.类别ID, 类别.类别名称
ORDER BY DATEPART("m",订单.订购日期),类别.类别ID, 类别.类别名称

 

Step 3:设计报表皮肤(主题)

报表的主题,是一个XML文件,如下所示:

image

 

可通过VS主菜单的报表--报表属性来新建主题

image

配置报表的颜色分类

image

 

配置报表的字体

image

Step 4:使用报表皮肤样式(主题)

设置颜色

image 

设置字体

image

报表在运行时刻可用代码来动态切换主题,代码如下:

public static PageReport CreatePageReport(string name, Viewer viewer, string theme) { PageReport report1 = new PageReport(new System.IO.FileInfo(string.Format(@"Reports\{0}", name))); if (!string.IsNullOrEmpty(theme)) { report1.Report.Themes.Clear(); report1.Report.Themes.Add(theme); } GrapeCity.ActiveReports.Document.PageDocument document1 = new GrapeCity.ActiveReports.Document.PageDocument(report1); viewer.LoadDocument(document1); return report1; }

实战报表3:数据可视化--销售数据控制台

ActiveReports 报表中除了提供图表控件外,还提供了波形图、数据条、图标等丰富的数据可视化控件。 本示例演示了在表格控件中嵌套使用波形图控件来显示每月销售明细趋势,以及使用数据条控件和图形控件来显示全年销售业绩的完成情况。

image

Step 1:新建报表 rptSalesDashboard.rdlx

image

Step 2:新建数据源

image

 

用到的SQL1:

select 类别.类别名称,t.* from (
SELECT DATEPART("m",订单.订购日期) AS 订购月,类别.类别ID,SUM(订单明细.数量) AS 销售量 FROM (( 订单
INNER JOIN 订单明细 ON 订单.订单ID = 订单明细.订单ID)
INNER JOIN 产品 ON 订单明细.产品ID = 产品.产品ID)
INNER JOIN 类别 ON 产品.类别ID = 类别.类别ID
WHERE DATEDIFF("yyyy",订单.订购日期,'2011-01-01') = 0
GROUP BY DATEPART("m",订单.订购日期),类别.类别ID, 类别.类别名称
ORDER BY DATEPART("m",订单.订购日期),类别.类别ID, 类别.类别名称 ) as t
inner join 类别 on t.类别ID = 类别.类别ID

用到的SQL2:

SELECT 供应商.公司名称,First(产品.产品名称) AS 产品名称,SUM(订单明细.数量) AS 销售量,SUM(订单明细.单价 * 订单明细.数量) AS 销售金额
FROM 订单明细 INNER JOIN (产品 INNER JOIN 供应商 ON 产品.供应商ID = 供应商.供应商ID) ON 订单明细.产品ID = 产品.产品ID
GROUP BY 供应商.公司名称, 产品.产品ID,产品.产品名称
ORDER BY 供应商.公司名称;

Step 3:设计报表Sparkline (迷你图)

迷你图用于在表格单元格中直接插入折线图/柱形图/盈亏图,显示数据趋势

image

 

image

Step 4:设计报表Bullet (数据条)

数据条: 条状的长度表示数据大小,常用于显示关键性能指标(KPI)

image

 

image

Step 5:设计报表IconSet (图标集)

图标集: 包括箭头/形状/信号灯/等级

image

从上面的图解可以看出图标集实际上TextBox报表控件的背景图片,即用AR提供的报表引擎可自动生成漂亮的图标:

imageimageimageimage

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

在漂亮的报表中,有的会用到地图,如下面2个截图:

image

 

image

 

AR地图控件的系列教程,请参阅:

 

官方提供的完整demo和中文数据库文件下载地址

为了方便共享和交流,还可通过Git@OSC进行Watch。