3

由于 JasperReport 可以将 JavaBean 集合作为 DataSource。我们可以发送一个带有引用多个 SetCollection 的单个对象的 SetCollection。并使用这些引用传递给编译的 jrxml 文件,每次传递不同的 SetCollection 时,多次调用 JasperFillManager.fillReport()。只是想知道编译后的 jrxml 文件是否会被最后一次调用填充,或者是否会有每次调用 JasperFillManager.fillReport() 的数据。

4

2 回答 2

5

这将被最后一个填充。您不能以这种方式使用多个数据源。尽管还有其他方法可以做到这一点。通过参数 Map 传递集合就是其中之一。

于 2012-07-25T13:52:06.490 回答
2

终于!!..完成任务了。感谢@Vycuss,因为我只使用子报告实现了它。

mainreport = JasperCompileManager.compileReport(//path of mainreport.jrxml);
subreport = JasperCompileManager.compileReport(//path of subreport.jrxml);
Map<String, Object> params = new HashMap<String, Object>();
params.put("SUB_REPORT", subreport);
params.put("DATA_SOURCE", empService.getEmpProject());

jprint1 = JasperFillManager.fillReport(mainreport,params,new JRBeanCollectionDataSource(empService.getEmpBean()));
JasperExportManager.exportReportToPdfFile(jprint1, "C://Test.pdf");

方法:在 Activator.java 中的上述代码之后,我正在创建一个 OSGi 包。在 MainReport.jrxml 中创建两个参数,第一个是没有类型的“SUB_REPORT”,第二个是 java.util.collection 类型的“DATA_SOURCE”。现在在 MainReport 中提供新的 net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{DATA_SOURCE}) 作为放置在详细信息带中的子报表元素的数据源表达式。还要确保子报表只有列标题、详细信息和列页脚区域。子报告中的字段也将为 javabean 的相应成员创建。

于 2012-07-26T13:41:35.893 回答