首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

6.4  排序、分组设计方案

设计报表时,为了使数据更具有顺序性和层次感,需要对数据表中的数据进行排序和分组,并且针对各组的数据进行分析、统计、运算。本节将介绍如何在报表中对数据进行排序、分组。

6.4.1  使用查询来排序报表数据

当打印报表时,希望数据根据特定的顺序来排列。比如,按人名的笔画多少来排列,依薪资值的高低、依销售业绩由高到低排列等等。

1.方案分析

第一次创建和预览报表时,报表按照自然顺序显示数据字段。自然顺序就是数据库将记录发给Crystal Reports的顺序,这个顺序会因所用的数据库、链接表的方法和其他变量的不同而不同。

开发者可以控制报表上信息显示的顺序。例如,一个雇员表如果不按字母顺序排列,那么这个表就不会很有用。只有当销售数字按照特别的顺序排列,销售报表才有帮助。如果想要在节假日寄礼物给最好的顾客,那么最有可能是按照购买数额从高到低的顺序排列。

实现报表排序最简单的方法是,将一个已进行排序处理的查询作为报表的数据源,即可使报表数据依照特定的顺序来打印。使用SQL语句ORDER By可以轻松完成数据排序。

Order By子句用于对查询结果进行排序。

语法:

[ORBER BY{order_by_字段名[ASC|DESC]}[,…n]]

参数说明:

ORBER BY:子句中的字段数目没有限制。

order_by_字段名:指要排序的字段名。

ASC:按指定字段中的值进行递增顺序排序。默认按ASC排序。

DESC:按指定字段中的值进行递减顺序排序。

2.实施过程

*  实例位置光盘\ mr\06\6.4\6.4.1\01

打印“员工基本信息”报表模块时,将报表数据记录排序,先根据部门排列,而相同部门者,则根据性别来排列,相同性别者,则再根据员工工资排列。如图6.83所示。

图6.83  排序效果

使用查询来排序报表数据方案的实施步骤如下:

(1)设计报表,如图6.84所示。

图6.84  报表设计

(2)显示报表排序数据

从“工具箱/Crystal Reports”中拖放CrystalReportViewer控件放置到要显示报表数据的页面,在页面的加载事件中编写查询排序语句。主要代码如下。

  protected void Page_Load(object sender, EventArgs e)

    {

        SqlConnection con = new SqlConnection("server=(local);uid=sa;pwd=;database=db_06");

        con.Open();

        //使用ORDER BY 查询语句

       string strSql = "select tb_employ.所在部门,tb_employ.姓名,tb_employ.性别,tb_employ.婚姻状况,tb_employ.学历,tb_employ.出生年月,tb_employ.工龄,tb_employ.工资from tb_employ order by tb_employ.所在部门,tb_employ.性别,tb_employ.工资";

        SqlDataAdapter da = new SqlDataAdapter(strSql, con);

        DataSet ds = new DataSet();

        da.Fill(ds, "tb_info");

        con.Close();

       ReportDocument studentsReport = new ReportDocument();//定义ReportDocument类对象

        studentsReport.Load(Server.MapPath("CrystalReport1.rpt"));//加载报表

        studentsReport.SetDataSource(ds.Tables[0].DefaultView);//加载数据源

        this.CrystalReportViewer1.ReportSource = studentsReport;//为CrystalReportViewer控件指定报表

3.补充说明

除了使用查询来排序报表数据外,还可以使用视图来作为报表的数据源排序数据。使用视图有以下好处。

l          使用户可以着重于特定的数据进行排序,而不是所有的数据。

l          可以简化数据库操作,在报表中视图简化了对数据库的访问,因为每次生成报表时无需写或提交基础查询,而是直接查询视图。

6.4.2  报表排序设计

虽然使用自行排序的查询或视图表能够使报表数据依照特定的顺序来排序,然而不可能所有的报表都使用查询或视图表。此外,就算是使用查询或视图表,其排序方式与所需求的也不一定相同。此时就必须自行的在Crystal Report Designer中设计报表数据排序。

1.方案分析

在一堆杂乱无章的销售资料中,总会遇到无数产品生产、销售或其他商业活动的具体数据。如何才能有效地处理这些繁杂的数据,从中找出有用的信息?这就需要进行资料的排序和筛选,将资料根据条件重新进行整理,找到对公司业务有用的信息,从而节省收集整理资料的时间。

Crystal Report Designer报表,提供了一个功能强大的工具“记录排序”专家,对排序中的数据进行排序整理。

2.实施过程

*  实例位置光盘\ mr\06\6.4\6.4.2\01

打印“商品销售信息统计”报表模块时,将销售信息的数据按销售地区进行排序,而相同地区,则按产品的实际销售量进行降序排序。统计产品在名个地区的销售量,将“销量年增长率”大于0.4的地区信息加上底色,便于查看。图6.85为“商品销售信息统计”报表效果。

图6.85  商品销售信息统计

使用“记录排序”专家排序报表数据方案的实施步骤如下:

(1)设计的表格式,如图6.86所示。

图6.86  报表设计

(2)对报表进行排序

使用鼠标右键任意单击报表空白处,在弹出的快捷菜单中选择“报表/记录排序专家”命令,弹出“记录排序专家”对话框。

(3)在“可用字段”列表框中,选中“销售地区”字段,单击【】按钮,添加到“排序字段”列表框中。在“排序方向”区域中选择“降序”单选按钮;在“可用字段”列表框中,选中“实际销量”字段,单击【】按钮,添加到“排序字段”列表框中。在“排序方向”区域中选择“降序”单选按钮,如图6.87所示。单击【确定】按钮返回报表设计器。

图6.87  “记录排序专家”对话框

(4)筛选信息

使用鼠标右键任意单击报表空白处,在弹出的快捷菜单中选择“报表/节专家”命令,弹出“记录排序专家”对话框。在“节”列表框中选择“详细资料”项,然后选择“颜色”选项卡,勾选“背景颜色”复选框。如图6.88所示。

图6.88  “节专家”对话框

(5)在“颜色”选项卡中单击按钮,弹出“公式工作室”对话框。在编辑区域输入如下代码。效果如图6.89所示。

此段代码实现,将销量年增长率大于0.4的商品信息加上底色。主要代码如下。

formula=IIF({tb_sell.销量年增长率}>0.4,RGB(255,187,119),DefaultAttribute)

*注意:此段代码语法为Basic语法

图6.89  “公式工作室”对话框

(6)单击【保存并关闭】按钮,关闭该对话框。返回“节专家”对话框,单击【确定】按钮,返回报表设计器。运行报表,查看效果。

3.补充说明

在报表中的数据排序经常会用大量连续排列相同的字段数据。为了使数据排序层次更加分明,节省打印机的墨水与碳粉。经常会将排序字段设置成“若重复则抑制显示”。图6.90所示是将“销售地区”设置成“若重复则抑制显示”的效果。

*  实例位置光盘\ mr\06\6.4\6.4.2\02

图6.90  “若重复则抑制显示”的效果

使用鼠标右键单击“详细资料”节中的“销售地区”对象,在弹出的快捷菜单中选择“设置对象格式”命令,弹出“格式化编辑器”对话框,在“公用”选项卡中勾选“若重复则抑制显示”复选框。如图6.91所示。

图6.91  设置“若重复则抑制显示”

6.4.3  单级与多级分组设计

通过报表排序能够使报表中相同的数据排列在一起打印,想要让数据更加层次分明,并且根据针对各组数据进行分析、统计和运算,则必须将报表中的数据分组。Crystal Report for Visual Studio.Net允许根据数据库字段或公式字段来分组报表中的数据。

1.方案分析

在办公管理中,除了对数据进行整理、排序和筛选外,通常每隔一段时间,就需对数据进行阶段的汇总计算,即根据需要对数据进行分类汇总。在报表中分组数据有利于商业用户分析数据和有目的地汇总数据。在报表中经常使用分组的例子有:

l          按照销售代表、生产线、销售区域或季度分组的销售报表。

l          按照部门、管理水平或公司的任职期分组的财务报表。

l          按照公司部门(分公司)、生产线或季度分组的财物报表。

l          按照部件编号、供应商和生产厂家分组的投资报表。

Crystal Reports提供了容易使用的分组功能,能够进行多种功能强大而且非常灵活数据分组。

2.实施过程

l          方案实施一  单层分组

*  实例位置光盘\ mr\06\6.4\6.4.3\01

在对客户信息打印报表时,为了明确的掌握客户消费信息的状态。将数据以“客户类别”分组,并将客户“目前消费金额”进行降序排序。效果如图6.92所示。

图6.92  单层分组效果

单层分组方案的实施步骤如下:

(1)将数据库的“tb_Poehfin”表作为报表数据源,从“字段资源管理器”中将“地区”、“客户名称”、“目前消费金额”拖放至“详细资料”节中。

(2)使用鼠标右键任意单击报表节空白处,在弹出的快捷菜单中选择“插入/组”命令,弹出“插入组”对话框。在“公用”选项卡中,在分组依据下拉列表框中选择“客户类别”;在排序下拉列表框中选择“按升序”,如图6.93所示。

图6.93  “插入组”对话框

(3)单击【确定】按钮,返回报表设计器,这时会在“字段资源管理器”中创建一个组名字段“组#1名”并自动将它添加至页眉节中。在报表“页眉”、“组页眉”和“详细资料”节中画三条线,如图6.94所示。运行报表查看效果。

图6.94  单层报表分组

l          方案实施二  嵌套分组

*  实例位置光盘\ mr\06\6.4\6.4.3\02

在对员工工资信息打印报表时,先根据员工所在的部门分组,而同部门的数据再根据性别分组,然后性别相同者再根据婚姻状况分组。这样就能更加清晰明了的了解员工的工资信息,图6.95所示。

图6.95  嵌套分组

嵌套分组方案的实施步骤如下:

(1)将数据库中的“tb_employ”表做为报表数据源。

(2)使用鼠标右键单击任意报表节的空白外,在弹出的快捷菜单中选择“报表/组专家”命令,弹出“组专家”对话框。

(3)在“可用字段”列表框中依次将“所在部门”、“性别”、“婚姻状况”添加至“分组依据”列表框中,如图6.96所示。

图6.96  “组专家”对话框

(4)单击【确定】按钮,返回报表设计器,这时报表设计器中会添加3个组字段“组#1名”、“组#2名”和“组#3名。如图6.97所示。

图6.97  添加后的组字段。

(5)从“字段资源管理器”中将“姓名”和“工资”字段拖放到报表“详细资料”节中。调整分组字段的位置。在分组字段页眉节中画3条线。在报表中添加相应的文本对象,设计效果如图6.98所示。至此报表设计完成。运行报查看效果。

图6.98  报表外观设计

3.补充说明

在报表中要想更改组的设置,可以在“组专家”对话框中完成。

例如,要修改组“婚姻状态”,在“组专家”对话框中的分组依据列表中选中“婚姻状态”字段。如图6.99所示。

图6.99  “组专家”对话框

然后,单击【选项】按钮,弹出“更改组选项”对话框,在分组依据列表框中选择要修改的组字段即可,如图6.100所示。

图6.100  “更改组选项”对话框

6.4.4  层次分组设计方案

“层次分组”是种非常特别的组方式,正如其名所示的,它能够替数据产生一种层级式的从属关系。使用“层次分组”能报表中数据显示更加明了。

1.方案分析

在报表设计过程中,当两个字段在层次结构中相互关联时,层次分组就十分有用了。一个特别的例子就是员工与管理者之间的组织关系,例如数据库的表结构如图6.101所示。其表结构中有这么两个字段员工“序号”与“主管”。其中员工“序号”字段存放每一位员工的员工编号,“主管”字段则存放该位员工之主管的员工编号,由于主管也是员工,因此,两个字段之间便有了层次式的从属关系。这时在报表中使用层次分组就能快捷准确的打印出公司员工管理结构。

图6.101  表结构

2.实施过程

*  实例位置光盘\ mr\06\6.4\6.4.4\01

本实例打印出公司员工管理的结构,如图6.102所示。

图6.102  层次分组设计方案

层次分组设计方案的实施步骤如下:

(1)将数据库中的“tb_employ”表作为报表数据源。

(2)使用鼠标右键单击任意报表节的空白外,在弹出的快捷菜单中选择“插入/组”命令,弹出“插入组”对话框。

(3)在“公用”选项卡中,在分组依据下拉列表框中选择“序号”;在排序下拉列表框中选择“按升序”,如图6.103所示。

图6.103  “公用”选项卡

(4)在“选项”选项卡中,勾选“自定义组名称字段”复选框,并选择“姓名”字段作为组名字段。如图6.104所示。

图6.104  “选项”选项卡

(5)单击【确定】按钮,返回报表设计器,使用鼠标右键任意单击报表节空白处,在弹出的快捷菜单中选择“报表/层次分组”命令,弹出“层次分组”对话框。

(6)在左侧的“可用组”列表框中进行层次分组设置。勾选复选框“分层次对数据排序”,在“父ID字段”列表框中选取层级关系较高的字段。本实例选择“主管”字段。在“组缩进”文本框中输入组缩进的距离,本实例设置为2厘米。如图6.105所示。

图6.105  层次分组设计

(7)单击【确定】按钮,返回报表设计器,从“字段资源管理器”中将“职务”和“所在部门”字段拖放到报表“详细资料”节中。设计报表格式如图6.106所示。

图6.106  报表设计

3.补充说明

当创建层次分组的时候,唯一符合条件的父字段是在被选择数据源中有相同的字段类型,例如,数字、字符串、日期,作为“分组依据”字段。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论