2013-02-15 75 views
0

我有一個報告,顯示它的項目,因爲它應該。 現在我需要添加3個子報告到主要報告。在JasperReport的主報告中添加子報告

對於這個我使用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,並將每個頁面添加到主報告中,但是我想知道它是否可能是我尋找的。

問候。

回答

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

sub1Field ClassList

此外,您不需要將隔離1子報表放置到1個細節帶,您可以將所有子報告放在一個細節帶中。

0

如果您使用Ireport創建報告,然後在Ireport中打開主報告並選擇子報表並轉到報告的屬性部分,單擊「參數」屬性並單擊「從主複製」選項卡,從那裏您可以選擇你想傳遞給太陽報告的參數。