主报表的设计图如下图:
子报表中有交叉表,所以放在了summary里面
子报表的Collection/data source expression 设置的是 use Collection expression
子报表中的fields:
date java.lang.String
quantity java.lang.Integer
categoryName java.lang.String
子报表里面的sql:
SELECT DATE_FORMAT(po.date,'%Y-%m-%d') AS date,SUM(pi.quantity) AS quantity,c.name AS categoryName FROM serviced_by sb ,purchase_item PI,purchase_order po,product_option opt,product p,product_category pc,category c
WHERE sb.purchase_item_id=pi.purchase_item_id
AND pi.purchase_order_id=po.purchase_order_id
AND pi.product_option_id=opt.product_option_id
AND opt.product_id=p.product_id
AND pc.product_id=p.product_id
AND pc.category_id=c.category_id
AND sb.company_id=7
AND sb.user_id=24322
GROUP BY po.date,c.category_id
ORDER BY po.date
我这样直接动态执行主报表,可以从数据库中查询到数据如图显示:
然后修改了这个交叉表的数据源,数据由java程序获取,然后传到ireport里面
我把数据封装成了一个List list里面肯定是有数据的
把payrllVO传到主报表中(payrllVO里面有payrollItemsVOList 已有get/set方法)
在主报表中定义了一个filed
payrollItemsVOList java.util.List
然后把子报表原来的sql删除
再设置子报表的
Collection/data source expression
设置为 user data source expression
new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{payrollItemsVOList})
现在子报表中的数据拿不到,就显示了一条横线
有用过ireport的朋友,指导下吧,这问题困扰好几天了
另外如果有交叉表 貌似只能放在summary里面 其他地方貌似不显示数据