ireport:以List,Set等集合作为subreport的数据源

 最近在研究在ireport,其中很多地方用到subreport,现在分享一下以list作为子报表数据源的例子:

(主报表显示所有的老师,子报表显示每个老师下面所有的学生)

首先我们在程序中设置的数据源:

List<Teacher> teachers= (List<Teacher>) getTeachers();

JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(teachers);

这个dataSource就是一个数据源,它里面保存的是Teacher information。我们先看一下Teacher的结构:

public class Teacher{
	private String name;
	private String address;
	private List<Student> Students;

 Teacher.java类里面有一个List用来保存学生的信息,现在我们要使用一个子报表输出学生的信息。现在打开ireport,在左边的树形结构菜单中有一个fields菜单,我们在这个菜单下把Teacher的属性添加进去,注意每个字段的类型,需要跟Teacher.java类中字段保持一致,大小写,属性名,字段类型都需要保持一致。那么我们把Students字段添加到fields菜单下面,在属性框中设置:"Field Class“为java.util.List。

 

 

在主报表中把要显示的Teacher信息放入主报表中,然后

在主报表detail band中加入subreport组件,用于显示学生的信息,点击subreport,开始设置它的属性。


 

ConnectionType属性,这里我们用到的是一个list作为数据源,所以我们选择“Use a datasource expression”,

然后就是设置Data Source Expression,设置数据源的表达式,这是个关键。由于此处我们用到的是一个list集合作为数据源,所以我们设置为:new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{students})

。JRBeanCollectionDataSource中传入的参数是集合,list,Set等集合都可以。
 然后Parameters,就是用来传参数的,传参数给子报表。这个地方要注意,参数要跟子报表保持一致,名字,类型等都需要保持一致。我们先添加参数:

把teacherName传给子报表,然后右键点击子报表,选择open subreport,然后在子报表中把Parameter菜单中把参数teacherName添加进去:



 一定要注意大小写以及数据类型,那么现在teacherName就可以在子报表中使用了。然后在子表中把学生信息放进去,编译就可以了。

还有一点需要注意,当添加一个subreport组件时,在主表中的Parameter菜单下会自动生成一个参数SUBREPORT_DIR,是用来设置子报表的目录的,这个我们需要在程序中设置,

 

Map map = new HashMap();				
map.put("collectionName", collection);
map.put("SUBREPORT_DIR", ReportOption.BASENAME);

 

这样一个子报表就完成了,在下一章节中,我将具体介绍在程序中具体如何生成报表,这一节重点是讲解如何在ireport中设置subreport的属性参数等,具体跟我们程序结合如何使用,我将在接下来的章节中介绍到。

 

如果有错误的地方,望各位高手指点一二。谢谢!O(∩_∩)O~

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值