iReport专题学习之子报表(SubReport) 07

一、SubReport简介

SubReport是iReport提供的高级功能,通过SubReport我们可以创建复杂的报表,通过SubReport我们可以创建一个包含若干个子报表的报表,创建一个包含子报表的报表我们需要三个对象:一个jasper文件,一个包含参数map(当然也可以是空)和一个dataSource(数据源,或者一个JDBC的Connection),在本章节中我们将解释如何通过这三个对象创建一个SubReport并实现在子报表中数据过滤显示的目的。

二、子报表实例

2.1、SubReport组成部分

一个SubReport是一个真正的包含它自己xml文件并且是一个已经编译好的jasper文件,创建一个SubReport就是创建一个普通的报表文件,创建过程中唯一需要注意的是设置SubReport的宽度、高度以及一些不需要显示的band,一般情况下对于不显示的band我们把它的高度都设为0,在设置子报表的宽度时我们应该考虑到它在父报表中显示时的效果,然后针对这一特性有针对性的去设置。

2.2、需求

本章节我们结合在实际项目中一个报表实现来讲解,在实际项目中有如下图-1所示的报表设计需求,该报表分为三个部分组成,头部是由程序传递时间参数组成的过滤条件,也就是从什么时间到什么时间的某部门的风险统计图,下面部分由具体某个部门某天的风险行为总数组成。那么这种情况下就需要采用我们这一章节学习的子报表实现,下面的数据表格我们设计为一个子报表,上面的区域统计图就是父表,这样将子报表嵌套在父报表中便可以实现我们这个需求

-1

2.3、所需知识

将一个子报表链接到父报表中需要做三件事情:1、获得SubReport对应的jasper报表对象,2、如何为它提供数据以及如何为子报表的parameters设置具体的值,所有这些信息的定义我们都可以通过SubRepprt properties窗口来实现,在后面的内容中详细讲解

2.3.1、参数传递

当我们在应用程序里通过fillReport方法来生成一个报表的时候,我们会提供一个包含参数值得Map一起传递到报表中,包含参数的Map对象是由报表引擎直接管理的。在子报表属性窗口的里的"SubReport"标签里的"Parametes Map Expression"属性,就是提供给我们最简单的方法来为子报表设置parameters的值,它允许我们定义一个最终可以返回java.util.Map对象的表达式,使用这种方法我们可以把从外部应用程序传到父报表里的parameter对象,当然这个parameter的实际值是一个java.util.Map对象传递给子报表使用(比如$P{TestMap}),这里我们也可以使用内建的报表parameters:$P{REPORT_PARAMETES_MAP}把子报表中的java.util.Map对象传递到父报表中功使用。如果该属性我们空着不填那么一个包含任何值得空的java.util.Map将会被传到子报表中,这种机制的局限性是parameters里所对应的java.util.Map值是死的,不会变的,为了克服这种局限性,jasperreport允许我们定义parameter键值对的时候每个对象的值通过一个表达式来创建,如在图中的"SubReport Parameter"表中通过添加个参数java.util.Map来填充子报表。

2.3.2、指定数据源

为了子报表指定数据源就是告诉jasperreport引擎如何获取数据来填充SubReport,我们可以指定两种类型的数据源:JDBC Connection和DataSource。

使用JDBC来填充报表是很简单的,在Connection Expression里定义一个已经连接到数据库的java.sql.Connection对象,要把一个已经处于打开状态下的连接传到SubReport中我们只需要使用一个预定义的包含一个基于从应用程序里调用fillReport方法时的传入的连接REPORT_CONNECTION参数。

如过使用一个DataSource就稍微复杂一点,事实上它是一个简单的记录的结合,记录集合的概念和JDBCConnection不同,既然如此我们可以通过一个parameter来传递一个DataSource来填充SubReport,此时采用这种机制内建的parameter REPO

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来生做一个苦行僧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值