我想将数据源从主报告传递到子报告。
所以我只需将 iReport 中的连接类型更改为使用数据源表达式并传递 REPORT_DATA_SOURCE 参数。
报告应该生成几百个网站。它每页计算1个子报告。
子报表只需要数据源的某些行,因此它在查询中使用自己的WHERE。
问题是:
从连接到数据源更改连接类型后,报告仅显示第一个站点。似乎子报表将mainreport的数据集更改为其 WHERE 语句只有一行。
我已经看到了解决方案 http://www.billmann.de/2011/12/01/jasperreports-subreport-datasource/ 但是当我尝试这个时,我收到一个错误:
java.lang.ClassCastException:net.sf.jasperreports.engine.JRResultSetDataSource不能转换到net.sf.jasperreports.engine.data.JRBeanCollectionDataSource
是否还有其他克隆数据源的可能性?或者我可以在子报表中设置一些内容,以便不更改数据源吗?
如果我使用 Connection 而不是 DataSource ,则报告可以正常运行,但它会呈现5分钟或更长时间,因为每个子报表调用都会生成自己的数据集。
答案 0 :(得分:2)
我是上述博客条目的作者,因为我们使用的数据源是JRBeanCollectionDataSource,而且这个JRDatasSurce支持cloneDataSource()方法,所以必须使用类型转换为JRBeanCollectionDataSource。
并非所有JRDataSource都支持这样的方法。如果您有机会以编程方式读入数据库并在JRMapArrayDataSource之类的另一个JRDataSource中填充数据,则可以使用cloneDataSource()方法。
我不确定此解决方案是否适用于附加的where子句。