水晶报表(CrystalReports)进阶篇-通过分组实现分页功能
实现的效果展示一下: 主要就是给前面提到的简单应用(水晶报表(CrystalReports)的简单应用(ASP.NET) .)中的报表添加分页功能 并且保证 当数据记录不够一页时可以由空白行补全 首先应该分析报表结构 通过上图很容易看出,报表主要分为表头,明细,脚注。这个单据是固定纸张宽度高度的,我们的表头,明细很好处 理,但是脚注放哪一节里呢?(问题一) 每六行数据规定了一页,如果一页中只有三行数据,为了保证脚注的位置不变打印出来的单据格式整齐,如何将其它 三行由空白行补全呢?(问题二) 通过分析,我们可以想到利用分组得到想要实现的效果 1.表头写到页眉节;明细写到详细资料节;脚注写到组尾; 2.其它空白行由组来控制; (1)根据页的行数确定组尾数,这里每页显示六行,我们至少要有五行的空白行; (2)所以将组尾分成六份,前五项用来控制是否要补空白行,最后一行用来显示脚注; 注:上面这个格式设置由开发人员决定,不一定非要放到这些地方,目前为了实现这一个效果,我的实现是这样 具体实现 1.插入组:【字段资源管理器】→【插入组】 (1)组很通俗易懂,把通过一或多个过虑条件的数据放在一起,这里当然也得选择一个字段作为分组的依据,数据源 这里用的是.net对象,是一个具体的实体类,在这个实体对象中,有这样一个属性专门为分组服务的标识器如:
(2)绑定报表的数据源是一个List里面也许会有很多条记录,为了每页显示6条,简单的将可以设置标识器的值为每6条记录+1 这样默认值0,记录六条时改为1,在增加6条改为2.这样分组时会自动根据这个值把数据按每页6条记录分开如:
组专家如下 2.组尾继续插入组,分为六(a,b,c,d,e,f)如下:
注:提到的有配置,没有提到的就按默认 组头 【在后面页新建页】后面的按钮点开写入:groupnumber mod 1 =0点击【保存并关闭 】如下: 组尾a 【抑制显示】后面的按钮点开写入: 注:ImportStoragePrintModel.Number是实体对象中的一个属性,在这里就是通过Count(字段名)统计行数的作用,这个组尾a实现的功能是如果最后一行的行数除6余数在0到5之间时显示,否则不显示,【抑制显示】里false代表不抑制显示 if
Count ({ImportStoragePrintModel.Number}) mod 6>0 and Count
({ImportStoragePrintModel.Number}) mod 6<=5 and onlastrecord then 点击【保存并关闭 】如下: 下面只把组尾b,c,d,e代码贴出,图都如组尾a 组尾b if Count
({ImportStoragePrintModel.Number}) mod 6>0 and Count
({ImportStoragePrintModel.Number}) mod 6<=4 and onlastrecord then 组尾c if Count
({ImportStoragePrintModel.Number}) mod 6>0 and Count
({ImportStoragePrintModel.Number}) mod 6<=3 and onlastrecord then 组尾d if Count
({ImportStoragePrintModel.Number}) mod 6>0 and Count
({ImportStoragePrintModel.Number}) mod 6<=2 and onlastrecord then 组尾e if Count
({ImportStoragePrintModel.Number}) mod 6>0 and Count
({ImportStoragePrintModel.Number}) mod 6<=1 and onlastrecord then
数据源的绑定在简单应用(水晶报表(CrystalReports)的简单应用(ASP.NET) .)中提到这里不在讨论 |
|