文档详情

JasperReport创建多个子报表

飞***
实名认证
店铺
PDF
380.58KB
约5页
文档ID:47518569
JasperReport创建多个子报表_第1页
1/5

JasperReport创建多个子报表2012 年 9 月 01 日项目中遇到了需要在一个报表中显示多个不同table 的问题, 不同的 table 的数据源不同,通过网上查找资料,多方面显示通过子报表可以解决但网上资料重复,而且方法各种各样,通过多方面的尝试,结合大家的方面,总结了一个成功的方面留下记录,以备后用1、 首先创建主表,按照一般的步骤来2、 主表创建完毕后,创建子报拖动 Subreport 到主表中,然后按照下一步一路默认点下去这样就创建一张新表3、 设置主表中的参数在主表的Parameters 中添加参数( 1)SUBREPORT_DIR 注:这个参数是子报表的路径参数,使用相对路径时用到的创建子报表默认的一个参数,这里就没有进行修改了 2)parameter1 注:这个参数就是子报表的数据源,这里是通过javabean 绑定数据源的方式,所以 Parameter Class选择的是List,网上有选择其他类型的,试了试选择其他类型的我没有成功通过这2 个参数就是1 个子报表需要用到的参数如果有n 个子报表就创建2n多个参数4、 设置主报表模版中的子报表参数在主报表中选中子报表,显示属性,相关的属性有4 个最重要的属性设置有2 个其中 Subreport Expression 属性是设置子报表路径。

一般新建报表后默认就生成了,不需要修改,但其中的参数部分需要和前面步骤3 中设置的路径参数一样注:创建多个子报表时默认的参数是一样的,这时就需要修改一下这个路径参数了主要属性设置是Connection type :选择为Use a datasource express Data Source Expression:设置为new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{parameter1}) 其中参数部分为步骤 3 中设置的数据源参数一样到此主报表模版设置完毕,如果是多个子报表重复步骤 4,注意参数修改5、 子模版的设置子报表模版的设置就是按照我们正常报表的设计完成就行了到此整个报表模版设置完毕注意:1、 这里我是有2 个 table,所有我把主报表中的第一个table 放到了 title 层中,把第二个table 放到了 column Header 层中,因为如果我把2 个 table 都放到header 层中,虽然是上下排序,但最后显示是重叠的2、 子报表模版如果没有放入数据源的话,需要把模版属性中的When No Data 属性选择成All Sections No detail,反正子报表一直显示不出来。

这个地方我纠结了 2 天,模版和数据怎么检查都没有问题,就是子报表显示不出来,最后在网上找个一个哥们的提示,才知道这个地方没有设置6、 java 后台代码这里我是通过strcuts2+flash 的 web 打印预览方式, 只贴与子报表相关的代码,其他代码请网上查询// realPath=/jasper/report8.jasper // subPath=/jasper //rptList 为 ArrayList 主报表的数据源// rpt8ProductList 为 ArrayList 子报表 1 的数据源// rpt8InspectList为 ArrayList 子报表 2 的数据源String reportFileName = ServletActionContext.getServletContext().getRealPath(realPath);//主报表路径String reportSubFileName = ServletActionContext.getServletContext().getRealPath(subPath);//子报表路径 , 子报表只需到文件夹,不需要到文件。

JRBeanCollectionDataSource ds = newJRBeanCollectionDataSource(rptList); Map MapJaspTitle=new Map(); MapJaspTitle.put(“parameter1“, rpt8ProductList); MapJaspTitle.put(“parameter2“, rpt8InspectList); MapJaspTitle.put(“SUBREPORT_DIR“, reportSubFileName + “\\“); MapJaspTitle.put(“SUBREPORT_DIR2“, reportSubFileName + “\\“); jasperPrint = JasperFillManager.fillReport(reportFileName,MapJaspTitle, ds); HttpServletRequest request = ServletActionContext.getRequest();request.getSession().setAttribute( BaseHttpServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE,jasperPrint); 所有内容到此结束。

下载提示
相似文档
正为您匹配相似的精品文档