Jaspersoft iReport使用Group实现报表自动分页
来源:网络收集 点击: 时间:2024-07-21首先新建一张父报表,报表模板选择Blank A4就可以了,命名为Test。此例中父报表用于显示每张单据的基本信息,比如学生的学号、姓名等,而子报表才用来显示该学生的各科考试成绩。在实际应用中,父报表显示如销售发货单据中的单据编号、单据日期、发出仓库等等信息,而子报表才用来显示销售发货的具体物品名称、数量、单价、单位、金额等信息。

为了界面美观,我们只保留Page Header、Detail 1、Page Footer三部分就可以了。其实部分将高度设置为0。

为父报表抓取需要的数据。因为父报表只需要显示学生的基本信息就可以了,所以不需要将其它表的数据关联进来。查询语句填写:select A.ID STUID,A.NAME STUNAME from SYSTEM.STUDENT A 即可。


我们要将每个学生放到单独的一页显示,就像实际应用中每张销售发货单打印一页一样。在报表名字上点击鼠标右键,为父报表添加Group。

我们使用学生的学号进行分组。也就是一个学号的信息显示在独立的一页内。勾选Add Group Header和Add Group Footer。

在Group Header中添加每页都要显示的学生信息的格式和信息。

为Group设置分页符。

现在为父报表添加显示具体数据的子报表。向Detail 1拖入Subreport组件。根据向导创建一个子报表。当然建议手动创建子报表,更简洁,手动创建子报表的方法请参考经验:
Jaspersoft iReport怎样制作含子报表的报表。

由于子报表需要根据父报表的学生ID显示子报表的数据,所以为父报表添加Parameter。

在子报表的SQL语句中引用父报表设置的Parameter,为子报表添加Parameter:STUID,再进入子报表的Edit Query将STUID这个Parameter拖动添加到SQL语句中:Select * from system.score B where B.student_id=$P{STUID}。如果参数不显示,可以先把父报表和子报表都编译一下。


子报表仅需要Summary栏用来显示数据,将其它栏的高度设置为0。另外子报表也不需要Group分组,如果生成子报表时生成了Group分组就删除掉。在子报表的Summary栏添加crosstab组件用来展示不确定行列数的数据。

crosstab组件行数据是以学生ID选取数据。

crosstab组件列数据是各科目。

crosstab组件数据部分是显示分数。

crosstab组件每行显示总分,并显示边框。勾选相应选项。

crosstab组件中不需要显示的单元格可设置单元格和边框的颜色为透明。


再最后把父子两报表各栏的高度或内容调整一下。

编译父子两报表后即可以预览分页显示数据的效果。

Crosstab组件要添加在Summary栏内,添加在Detail栏会报错。
编程语言IREPORTGROUP组件CROSSTAB组件报表分页版权声明:
1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。
2、本站仅提供信息发布平台,不承担相关法律责任。
3、若侵犯您的版权或隐私,请联系本站管理员删除。
4、文章链接:http://www.1haoku.cn/art_982079.html