水晶报表分组分页且每页最多显示N条记录
2011-11-28 22:32
232 查看
本文为解http://topic.csdn.net/u/20111128/10/041ccade-1fa9-4bb2-b1ad-72430b233a97.html?50470所作
先确认下原帖需求:
1、详细节最多5条记录(不能超过5条);
2、无论前一组是否满5条记录,每个新组都要另起一页
主要就这两点。
我们知道每页最多显示N条的控制方法,打开节专家,在详细节后面新建页公式编辑:
RecordNumbermodN=0
RecordNumber即记录数,无论分组与否,是自动随记录递增的,所以在这里,我们不能用RecordNumber,而应该是在每个新组前要重置这个RecordNumber,用这个重置的RecordNumber来取模控制每页最多显示5条记录,于是我们很自然就想到了运行总计字段,由它来帮我们重置RecordNumber,这样我们应该就很明朗了,接下来让我们一起去设计模板:
报表按ID分组就不用再提及了吧?(右击报表空白处->插入->组)
首先新建一运行总计字段,如图示
该运行总计字段就是为了重置RecordNumber,模板设计好后应该是这样的,如图示
就这样是达不到我们需求的,我们还要为它处理下:)
针对需求1,我们的处理方案是
针对需求2,与需求1同理,只不过此时我们是在#组尾(组页脚)节后面新建页的公式编辑:
NotOnLastRecord
OnLastRecord意指最后一条记录,NotOnLastRecord自然是非最后一条记录,在这里就是指非最后一条记录时就在后面页新建页,最后一条记录时就不用再新建页了。若不用该公式控制的话,报表的最后一页总是空白页(没有详细节数据)
原帖还有一个小需求:在第一页的ID后自动加-(1),第二页ID后自动加-(2)
其实应该是在每个#组头(组页眉)处显示"ID:"+ID值而已:)
这样我们只需把分组后的组名自定义一下即可,如图示:
由于这边的ID是数字型,所以用ToText函数把它转成字符型,后面的参数0表示保留0位小数(即不保留小数)
本文的重点是在模板的设计,代码就不晾出来了
=========================================================================================================================
Modified@2011-11-2921:45
前文提及的小需求:在第一页的ID后自动加-(1),第二页ID后自动加-(2)
本人理解错了,应该是组内页码重置,抱歉~
其实泰哥这篇【分享】水晶报表组内分页已经做到这个效果了,但不知道为什么我这竟然没有找到RoundUp函数,所以修改下泰哥原文公式x1的内容如下:
先确认下原帖需求:
1、详细节最多5条记录(不能超过5条);
2、无论前一组是否满5条记录,每个新组都要另起一页
主要就这两点。
我们知道每页最多显示N条的控制方法,打开节专家,在详细节后面新建页公式编辑:
RecordNumbermodN=0
RecordNumber即记录数,无论分组与否,是自动随记录递增的,所以在这里,我们不能用RecordNumber,而应该是在每个新组前要重置这个RecordNumber,用这个重置的RecordNumber来取模控制每页最多显示5条记录,于是我们很自然就想到了运行总计字段,由它来帮我们重置RecordNumber,这样我们应该就很明朗了,接下来让我们一起去设计模板:
报表按ID分组就不用再提及了吧?(右击报表空白处->插入->组)
首先新建一运行总计字段,如图示
该运行总计字段就是为了重置RecordNumber,模板设计好后应该是这样的,如图示
就这样是达不到我们需求的,我们还要为它处理下:)
针对需求1,我们的处理方案是
针对需求2,与需求1同理,只不过此时我们是在#组尾(组页脚)节后面新建页的公式编辑:
NotOnLastRecord
OnLastRecord意指最后一条记录,NotOnLastRecord自然是非最后一条记录,在这里就是指非最后一条记录时就在后面页新建页,最后一条记录时就不用再新建页了。若不用该公式控制的话,报表的最后一页总是空白页(没有详细节数据)
原帖还有一个小需求:在第一页的ID后自动加-(1),第二页ID后自动加-(2)
其实应该是在每个#组头(组页眉)处显示"ID:"+ID值而已:)
这样我们只需把分组后的组名自定义一下即可,如图示:
由于这边的ID是数字型,所以用ToText函数把它转成字符型,后面的参数0表示保留0位小数(即不保留小数)
本文的重点是在模板的设计,代码就不晾出来了
=========================================================================================================================
Modified@2011-11-2921:45
前文提及的小需求:在第一页的ID后自动加-(1),第二页ID后自动加-(2)
本人理解错了,应该是组内页码重置,抱歉~
其实泰哥这篇
//每个组的总记录数 NumberVargroupRecordCount:=Count({DataTable3.Type},{DataTable3.ID}); //每个组的总页数 NumberVargroupPageCount:=groupRecordCount/5; IfInt(groupPageCount)<>groupPageCountThen ( groupPageCount:=Int(groupPageCount)+1 ); //重置后的RecordNumber NumberVargroupRecordNumber:={#RTotal0}; //组内当前页 NumberVargroupPageNumber:=groupRecordNumber/5; IfInt(groupPageNumber)<>groupPageNumberThen ( groupPageNumber:=Int(groupPageNumber)+1 ); //最终报表界面显示 '第'+ToText(groupPageNumber,0)+'页/共'+ToText(groupPageCount,0)+'页'
//说明:Int函数是取整函数,如Int(1.2)=1;Int(1.9)=1
//写好后将该公式字段拖放到#组头(组页眉)节即可
相关文章推荐
- 【水晶报表实战指南】使用分组实现超多列分段同页及分页显示
- VB.Net水晶报表:记录选择公式无效,显示出所有记录的解决方法
- [水晶报表]分组时控制每页显示的组数目
- 水晶报表如何按照分组的详细目录自动分页!
- [水晶报表]重复记录显示一次
- 水晶报表(CrystalReports)进阶篇-通过分组实现分页功能
- 水晶报表分组统计中如何让字段值居中显示
- 水晶报表分组显示
- 在水晶报表分组中,只显示一行重复的字段值
- 水晶报表按组分页出现空白页解决的方法以及组内分组
- 限定水晶报表每页显示记录条数
- 水晶报表进行页小计、固定行分页、分页中每页显示紧贴式页脚的方法
- VB.Net水晶报表:记录选择公式无效,显示出所有记录的解决方法
- 水晶报表(Crystal Reports 9) 分组 分页 delphi
- devexpress 水晶报表控件 实现递归显示
- 水晶报表不显示字段描述
- 水晶报表交叉报表多个汇总横向显示
- 在水晶报表中实现任意选择指定字段显示资料
- DataGrid实现过多信息鼠标移动到记录上显示,可分页(转)
- 水晶报表小技巧1- 动态压缩显示