2012-08-29 81 views
1

我想将主报表中的数据源传递给子报表。将DataSource克隆传递给子报表

所以我只是在的iReport改变连接类型使用DataSource表达并通过REPORT_DATA_SOURCE参数。

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

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

的问题是:

连接到数据源改变连接类型后,该报告只显示第一个站点。看起来子报表似乎将主报表的数据集与其WHERE语句更改为只有一行。

我已经看到该 http://www.billmann.de/2011/12/01/jasperreports-subreport-datasource/ 解决方案,但是当我尝试,我得到一个错误:

java.lang.ClassCastException: net.sf.jasperreports.engine.JRResultSetDataSource cannot be cast to net.sf.jasperreports.engine.data.JRBeanCollectionDataSource

是否还有其他的可能性克隆一个数据源?或者我可以在Subreport中设置某些内容,以便数据源不会更改?

如果我使用连接而不是数据源,报告工作,但它呈现5分钟以上,因为每个子报表调用生成它自己的数据集。

回答

2

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

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

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

+0

当我尝试从iReport 3.0.0编译JRXML时,出现以下错误消息 :'方法cloneDataSource()未定义为类型JRBeanCollectionDataSource' – w35l3y

相关问题