将基本类型对象列表作为子报表的数据源传递

我需要在主报告的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 (通过参数)传递给子报表:

  

工作样本,主报告:

     "]]>                                                      

子报告

         <band height="39"> <textfield> <reportelement x="220" y="14" width="161" height="20"></reportelement> <box leftPadding="10"></box> <textelement> <font isBold="true" isItalic="true"></font> </textelement> <textfieldexpression><![CDATA["City param: " + $P{cityParam}]]></textfieldexpression> </textfield> </band>                               

传递 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文件的视图)

生成PDF格式的结果


您可以查看net.sf.jasperreports.engine.JRDataSource的实现 。 最适合您的情况是: JRBeanCollectionDataSourceJRBeanArrayDataSource 。 如您所见,它们都是基于Bean的。

我认为您可以轻松地将List转换为List

或者您可以实现自己的JRDataSource

是的有效。 它完全没有明确记录,但它适用于jasperreport 4.5.1。

您必须在名为“_THIS”的子报表中声明一个字段,并使用您要显示的基本类型键入。 在这种情况下,一个字符串。

子报表

       ... 

然后在要显示String值的子报表中,只需使用$ F {_THIS}。

          

主要报告

父报告将List作为datasourceExpression提供

      

我在这里汲取灵感