将基本类型对象列表作为子报表的数据源传递
我需要在主报告的List
参数的帮助下将dataSource传递给我的子报表。 我不知道dataSource是什么类型是正确的以及如何在子报表中获取值。
我的主报告中的片段:
....
我的子报告的片段:
请告诉我如何通过java.util.List
类型的主报告参数将数据源传递到子报表。
编辑次数:08.14 14:20将标签添加到Java
编辑:08.14 15:30涉及如何打印iReport中另一个列表中包含的字符串列表? 适用于4.5.0和List
您必须指定在子报表中使用的字段。 您正在传递$F{}
,当您将List
作为DataSource传递时,您应该放置$F{_THIS}
。 当然你也必须添加一个具有该名称的字段,只有你可以使用表达式$F{somefield}
。
您可以使用此数据源表达式将java.util.List (通过参数)传递给子报表:
工作样本,主报告:
"]]>
子报告 :
传递 List 的Java代码 :
Map params = new HashMap(); List beansList = new ArrayList (); // The TestBean class constructor is: //public TestBean(String city, Integer id, String station) TestBean bean = new TestBean("Dallas", 10, "Central park st."); beansList.add(bean); bean = new TestBean("Dallas", 11, "Railway st."); beansList.add(bean); bean = new TestBean("Dallas", 12, "Market st."); beansList.add(bean); bean = new TestBean("Lyon", 20, "Airport st."); beansList.add(bean); params.put("listParam", beansList); JasperReport jasperReport = JasperCompileManager.compileReport(reportSource); JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, getDemoHsqldbConnection()); JasperExportManager.exportReportToPdfFile(jasperPrint, outputFileName);
结果将是(生成的PDF文件的视图) :
您可以查看net.sf.jasperreports.engine.JRDataSource的实现 。 最适合您的情况是: JRBeanCollectionDataSource和JRBeanArrayDataSource 。 如您所见,它们都是基于Bean的。
我认为您可以轻松地将List
转换为List
。
或者您可以实现自己的JRDataSource 。
是的有效。 它完全没有明确记录,但它适用于jasperreport 4.5.1。
您必须在名为“_THIS”的子报表中声明一个字段,并使用您要显示的基本类型键入。 在这种情况下,一个字符串。
子报表
...
然后在要显示String值的子报表中,只需使用$ F {_THIS}。
主要报告
父报告将List作为datasourceExpression提供
我在这里汲取灵感