如何将数据源发送到子报表?

时间:2016-05-03 13:29:51

标签: java jasper-reports

我在需要子报表的报表中工作,所以我想将数据源从Java方法传递到子报表,但是我没有以正确的方式到达。通常我使用以下代码来创建我的报告。将数据源发送到子报告的正确方法是什么?

Map<String, Object> param = new HashMap<>();
param.put("rapportNom", "Module");
param.put("PAR_IMAGE_BACKGROUND", "/dz/suivi/reporting/sources/BackgroundElit.png");
param.put("PAR_IMAGE_HEADER", "/dz/suivi/reporting/sources/headerElit.png");
param.put("SUBREPORT_DIR", "/dz/suivi/reporting/sources/moduleAllDetail_subreport1.jasper");
param.put("SUBREPORT_DATA", "LIST OF OBJECT");

return Reporting.printEtat(getClass().getResourceAsStream("/dz/suivi/reporting/sources/moduleAllDetail.jasper"),
                param, new JRBeanCollectionDataSource(reportingModuleViewFacade.findById(module)));

2 个答案:

答案 0 :(得分:6)

如果您的数据源为List<MyBean>,则简单方法为:

  1. 在参数图中传递

    param.put("SUBREPORT_DATA", myBeanList);
    
  2. 在jrxml中定义参数

    <parameter name="SUBREPORT_DATA" class="java.util.List"/>
    
  3. 使用您的参数创建 JRBeanCollectionDataSource

    <subreport>
        <reportElement x="0" y="0" width="200" height="100" uuid="406c9014-e74b-42d9-b9e1-4af106bfb779"/>
        <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{SUBREPORT_DATA})]]></dataSourceExpression>
        <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "theSubreport.jasper"]]></subreportExpression>
    </subreport>
    

答案 1 :(得分:2)

我编写了一个article来编程和配置报表,子报表和数据源的jasperreport:

对于子报告:

  

将子报表附加到主报表时,设置非常重要   表达式和数据源表达式属性;

     

Expression属性用于找出要使用的报告,而   数据源是附加在子报表上的数据。

     

Expression可以设置为子报表的相对路径   .jasper(例如“report / subreport.jasper”),也可以加载   来自其他来源的已编译的jasper,如输入流。

     

为此,在主报告中创建一个参数(在此处   案例名为PersonsSubReport)并将Expression属性设置为   $ P {PersonsSubReport}。

     

通过这种方式,可以从代码中注入子报告   填写和构建过程。 (我们稍后会看到)

     

将数据源表达式设置为:

new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{persons})