2012-11-14 81 views
4

我正在從JRBeanCollectionDataSource生成報表。這份報告是關於客戶的訂單。如何將JRBeanCollectionDataSource的列表傳遞給子報表

這是我的代碼

public class Customer 
{ 
    private String customerName; 
    private String customerNo; 
    private String customerAddress; 
    private ArrayList<CustomerOrder> customerOrders; 
    //Getters and Setters 
} 


private class CustomerOrder 
{ 
    private String itemName; 
    private BigDecimal amount; 
    private int itemQuantity; 
    //Getters and Setters 
} 

時生成客戶包含客戶詳細信息和客戶訂單列表的報告需要。 由於JRBeanCollectionDataSource需要一個集合,這就是我所做的。

Customer cust; //Customer Instance 

ArrayList<Customer> custList = new ArrayList<Customer>(); 
custList.add(cust); 

JRBeanCollectionDataSource rptData = new JRBeanCollectionDataSource(custList); 

我怎樣才能提取CustomerOrder列表Customer並把它作爲一個子報表?

回答

8

您應該能夠設置子報表的數據源表示:

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

生成的XML應該有一個類似於報表標籤:

<subreport> 
    <reportElement uuid="e9fc4a60-3844-41b7-a38c-768f06f09b44" x="0" y="57" width="555" height="68"/> 
    <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{customerOrders})]]></dataSourceExpression> 
    <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "report2_subreport1.jasper"]]></subreportExpression> 
</subreport> 

唯一的其他東西,你需要檢查報告屬性的Language設置爲Java

相關問題