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

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

Map 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))); 

如果您将数据源作为List那么简单的方法是:

  1. 将其传递给参数图

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

      
  3. 使用您的参数创建 JRBeanCollectionDataSource

          

我写了一篇文章,用于编程和配置带有报表,子报表和数据源的jasperreport:

对于子报告:

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

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

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

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

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

将数据源表达式设置为:

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