0

我有一个报告,它应该显示它的项目。现在我需要在主报告中添加 3 个子报告。

为此,我使用了 iReports。

我的问题是,我如何将项目列表传递给子报告??? 我找到了一些教程,但在这些情况下,子报告的数据位于第一个报告中。

就我而言,我有一个带有 4 个细节带的报告,其中 3 个带有子报告。

我的代码:

JRBeanCollectionDataSource beanCollection = new JRBeanCollectionDataSource(report.getList());
        jasperPrint = JasperFillManager.fillReport("C:\\Users\\Desktop\\Report.jasper", new HashMap(), beanCollection) ;
HttpServletResponse http = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
        http.addHeader("Content-disposition", "attachment; filename=report.pdf");
        ServletOutputStream stream = http.getOutputStream();
        JasperExportManager.exportReportToPdfStream(jasperPrint, stream);

我正在使用 jsf 2.0。

ps:我看到我可以创建 4 个 jasperPrint,并将每个页面添加到主报告中,但我想知道它是否可能是我想要的。

问候。

4

3 回答 3

0

假设您的数据源具有以下结构

public class MyPOJO{
    private List<POJOSubData1> sub1;
    private List<POJOSubData2> sub2;
    private List<POJOSubData3> sub3;

    //getters & setters
    ... 
}

您可以通过将以下内容指定给子报表的属性,将所需的数据源传递给您的子报表

Connection type : Use a datasource expression
Data Source Expression : $F{sub1} //or sub2 or sub3

的应该Field Class是。sub1List

此外,您不需要将隔离 1 个子报表放在 1 个详细信息带中,您可以将所有子报表放在一个详细信息带中。

于 2013-02-18T02:20:50.427 回答
0

如果您使用 Ireport 创建报表,则在 Ireport 中打开主报表并选择子报表并转到报表的属性部分,单击“参数”属性并单击“从主文件复制”选项卡,从那里您可以选择参数你要传给太阳报。

于 2013-02-18T06:37:05.873 回答
0

我最终做了什么:

for(JRPrintPage p : jasperPrint1.getPages()){

     jasperPrint.addPage(p);
}

其中 jasperPrint 是主报告, jasperPrint1 是子报告(即它自己的报告)。这样,我可以正常将项目列表传递给所有报告。

 JRBeanCollectionDataSource beanCollection1 = new JRBeanCollectionDataSource(report.getSections().get(1).getRowsReports());
        JasperPrint jasperPrint1 = JasperFillManager.fillReport("C:\\Users\\Desktop\\Meeting.jasper", new HashMap(), beanCollection1) ;
于 2013-02-18T17:41:52.443 回答