在我的报告中,目前有2个子报告,我们称之为 A 和 B 。 A 列出现金头寸, B 列出股票 我从基于Web的 Java 环境运行此报告, JasperReports 的报告从sql数据库中读取。
我想将参数传递给 JR 报告,该报告告诉它以什么顺序排列子报告,在本例中为例如( B 首先,然后 A ,反之亦然)。
有没有办法实现这个目标?
答案 0 :(得分:1)
您应该发送布尔类型的参数。同时生成报告。在该参数的基础上,您应该定义子报表的路径。 这是subrepor path.e.g。
的jrxml代码对于第一个子报告:
<subreport>
<reportElement uuid="8dba7f58-0466-4504-9d51-7484786450d2" positionType="Float" x="0" y="16" width="315" height="16"/>
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{listOfObject})]]></dataSourceExpression>
<subreportExpression><![CDATA[$P{swap} == true ? "/path/to/first/subreport" : /path/to/second/subreport]]></subreportExpression>
</subreport>
第二个子报告:
<subreport>
<reportElement uuid="8dba7f58-0466-4504-9d51-7484786450d2" positionType="Float" x="0" y="16" width="315" height="16"/>
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{listOfObject})]]></dataSourceExpression>
<subreportExpression><![CDATA[$P{swap} == true ? "/path/to/second/subreport" : /path/to/first/subreport]]></subreportExpression>
</subreport>
反之亦然。我还没有测试过。请看看。
享受。
答案 1 :(得分:0)
您可以使用更复杂的subreportExpression和“Print When Expression”。 在第一个子报告集中打印时的类似
$P{NUM_OF_SUBS} <= 1 ? true : false
第二次
$P{NUM_OF_SUBS} <= 2 ? true : false
...等 对于第一个子报表中的subreportExpression,例如:
$P{SUBS}.split(",")[1] == "A"
? "repo:subA.jrxml"
: $P{SUBS}.split(",")[1] == "B"
? "repo:subB.jrxml"
: $P{SUBS}.split(",")[1] == "C"
? "repo:subC.jrxml"
: "repo:subD.jrxml"
和第二名:
$P{SUBS}.split(",")[2] == "A"
? "repo:subA.jrxml"
: $P{SUBS}.split(",")[2] == "B"
? "repo:subB.jrxml"
: $P{SUBS}.split(",")[2] == "C"
? "repo:subC.jrxml"
: "repo:subD.jrxml"
等...