当报表数据较多时,虽然精心调整报表的格式,但因为打印机不同,常常发生开发调试的效果与实际的打印机上效果不一样的情况。不过如果把每一页的内容都放到子报表中,再用父报表去调用含分页符的子报表,就可以完美实现分页效果了。那么怎样实现呢?
方法/步骤
1、首先新建一张父韫蛛泌尾报表,报表模板选择BlankA4就可以了,命名为Test。此例中父报表用于显示每张单据的基本傻疑煜阖信息,比如学生的学号、姓名等,而子报表才用来显示该学生的各科考试成绩。在实际应用中,父报表显示如销售发货单据中的单据编号、单据日期、发出仓库等等信息,而子报表才用来显示销售发货的具体物品名称、数量、单价、单位、金额等信息。
2、为了界面美观,我们只保留PageHeader、DetailPageFooter三部分就可以了。其实部分将高度设置为0。
3、为父报表抓取需要的数据跷孳岔养。因为父报表只需要显示学生的基本信息就可以了,所以不需要将其它表的数据关联进来。酴兑镗笄查询语句填写:selectA.IDSTUID,A.NAMESTUNAMEfromSYSTEM.STUDENTA即可。
4、我们要将每个学生放到单独的一页显示,就像实际应用中每张销售发货单打印一页一样。在报表名字上点击鼠标右键,为父报表添加Group。
5、我们使用学生的学号进行分组。也就是一个学号的信息显示在独立的一页内。勾选AddGroupHeader和AddGroupFooter。
6、在GroupHeader中添加每页都要显示的学生信息的格式和信息。
7、为Group设置分页符。
8、现螅岔出礤在为父报表添加显示具体数据的子报表。向Detail1拖入Subreport组件。根据向导创建一个子报表。当然建议手动创建子报表,更简洁,手动创建子报表的方法请参考经验:Jas禊诬娱飑persoftiReport怎样制作含子报表的报表。
9、由于子报表需要根据父报表的学生ID显示子报表的数据,所以为父报表添加Parameter。
10、在子报表的SQL语句中引用父报表设置的Parameter,为子报表添加Parame隋茚粟胫ter:STUID,再进入子报表的EditQuery将胨检馁秣STUID这个Parameter拖动添加到SQL语句中:Select*fromsystem.scoreBwhereB.student_id=$P{STUID}。如果参数不显示,可以先把父报表和子报表都编译一下。
11、子报表仅需要Summary栏用来显示数据,将其它栏的高度设置为0。另外子报表也不需要Group分组,如果生成子报表时生成了Group分组就删除掉。在子报表的Summary栏添加crosstab组件用来展示不确定行列数的数据。
12、crosstab组件行数据是以学生ID选取数据。
13、crosstab组件列数据是各科目。
14、crosstab组件数据部分是显示分数。
15、crosstab组件每行显示总分,并显示边框。勾选相应选项。
16、crosstab组件中不需要显示的单元格可设置单元格和边框的颜色为透明。
17、再最后把父子两报表各栏的高度或内容调整一下。
18、编译父子两报表后即可以预览分页显示数据的效果。