您的位置:首页 > 其它

水晶报表分组分页且每页最多显示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的内容如下:

//每个组的总记录数
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
//写好后将该公式字段拖放到#组头(组页眉)节即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: