如何将JRBeanCollectionDataSource的列表传递给子报表
问题描述:
我正在从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
并把它作为一个子报表?
答
您应该能够设置子报表的数据源表示:
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
。