1

我想将数据源从主报表传递到子报表。

所以我只需将iReport中的连接类型更改为使用数据源表达式并传递REPORT_DATA_SOURCE参数。

该报告应生成数百个站点。它每页计算 1 个子报表。

子报表只需要数据源的一些行,所以在查询中使用了他自己的WHERE。

问题是:

Connection TypeConnection 更改为 Data Source后,报表仅显示第一个站点。似乎子报表将带有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 分钟或更长时间,因为每个 Subreport 调用都会生成自己的数据集。

4

1 回答 1

2

我是上述博客条目的作者,需要转换为 JRBeanCollectionDataSource 的类型,因为我们使用的数据源是 JRBeanCollectionDataSource 并且此 JRDatasSurce 支持 cloneDataSource() 方法。

并非所有 JRDataSources 都支持这种方法。如果您有机会以编程方式读取数据库并将数据填充到另一个 JRDataSource(如 JRMapArrayDataSource)中,则可以使用 cloneDataSource() 方法。

我不确定此解决方案是否适用于附加的 where 子句。

于 2012-08-29T15:30:43.493 回答