我刚开始使用iReport并完成了对现有报告进行一些更改的任务。
目前有一份主要报告,其中包含A部分和B部分(联系方式和其他信息)。有一个子报告C,然后是一个子报告D.我的任务是为D中的每个项目复制A和B.如果报告有很多D部分,我希望每个部分都有一个A和B.
所有数据都在同一个XML文档中,要获取A和B部分的数据,我只需
((net.sf.jasperreports.engine.data.JRXmlDataSource)$F{REPORT_DATA_SOURCE}).dataSource("/Header/")
和包含D部分的子报告
((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("/Header/ProductHeader/Member")
如果我将文档结构中的一个字段从A部分显示到D部分并检查它所说的表达式 $ F {ContactNumber}但在D中显示Null,即使它在A部分显示值
如何修改数据源以在D?
中显示A和B的内容提前致谢
答案 0 :(得分:9)
您需要将参数传递给子报告。除非您明确定义合同,否则子报告不会共享主报告中的任何数据。它更像是方法调用,然后是主报告的延续。
如果您想在子报告的主报告中显示名称为foo
的字段,则需要执行以下操作:
foo
。foo
的参数和正确的值表达式。如果要在子报告中使用foo
的值,则应使用以下表达式:$P{foo}
如果它是主报告参数。