iReport版本:3.7.3,JavaBean作为数据源。
1.先配置一下classpath,点击“工具”-->“选项”-->“iReport”-->“classpath”,
点击“AddFolder”,选择你的类文件编译之后的存放路径,如:D:\company\source\sponsorshipWeb\build\classes;
2.然后点击iReport主界面的Report DataSource按钮,新建一个JavaBeans set datasource,写上产生数据的类名,
还有一个静态方法名是用于预览的时候用,都无所谓。然后save。
3.点击一个数据库样的图标,在“Preview”按钮旁边。选择JavaBean DataSource,写上你的类全名,读取JavaBean的属性,再选择你需要的属性。
这样就可以完成基本的配置了,下面开始制作你的report。
1.创建主报表,添加各个静态文本域和属性(上面添加的属性都可以,也可以是系统属性),插入外部图片时,
在调色板中把“Image”拖到相应区域,在“Parameters”中添加一个参数,名字为“logoPath”(随便起名),类型为String,点击刚刚添加的那个Image的属性,在Inage Expression中选择上面添加的参数$P{logoPath},在iReport中预览的时候会弹出框让你输入图片的路径,在程序中的话,把图片的路径封装到Map中传递;
下面是重点了,子报表:
2.在调色板中有一个“Subreport”,把它拖到相应区域,选择“Create a new report”(也可选择已存在的report)-->“下一步”-->选择一个模板-->“下一步”-->选择Connections/DataSource,选择配置中新建的JavaBeans set datasource,然后一直下一步操作,到了“Subreport exp”这步,选择“Store the directory name in a parameter”,然后到“Connection exp”这步,选择“Don't use any connection or datasource”,点击完成;
3.到了子报表的设置界面,添加静态文本域和JavaBean属性,和设置主报表时一样;
4.回到主报表设置界面,会看到一个矩形框,这个就是子报表了,点击它,打开它的属性列表,在“Subreport properties”里面,会看到一个“Subreport Expression”,它的值如:$P{SUBREPORT_DIR} + "report1_subreport1.jasper",SUBREPORT_DIR这个是iReport自动生成的一个参数,在“Parameters”中可以找到,它有一个默认值,就是主报表所在的路径,预览的时候可以用,在程序中可以通过Map传递它的值;
5.在上面的属性列表中还可以看到“Connection type”,选择“Use a datasource expression”;在“Data source expression”写上:new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{applicationFileName})
$F{applicationFileName}:是主报表的JavaBean的一个属性,是一个List,里面封装的是另一个JavaBean,就是用
这个$F{applicationFileName}作为子报表的数据源,这样主报表就和子报表联系起来了。
经过我的测试是可以达到要求了。大家可以结合自己的项目参考一下。