【问题标题】:Passing DataSource clone to Subreport将 DataSource 克隆传递给子报表
【发布时间】:2012-08-29 23:30:43
【问题描述】:

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

所以我只需将 iReport 中的 Connection Type 更改为 Use a datasource expression 并传递 REPORT_DATA_SOURCE 参数。

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

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

问题是:

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

【问题讨论】:

    标签: java jasper-reports ireport


    【解决方案1】:

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

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

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

    【讨论】:

    • 当我尝试从 iReport 3.0.0 编译 JRXML 时出现以下错误消息:'方法 cloneDataSource() 未定义类型 JRBeanCollectionDataSource'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    相关资源
    最近更新 更多