在我的报告中,目前有 2 个子报告,我们称它们为A和B。
A列出现金头寸,B列出股票。
我从基于 Web 的Java环境运行此报告,JasperReports的报告从 sql 数据库中读取。
我想向JR报告传递一个参数,告诉它以什么顺序排列子报告,在这种情况下,例如(首先是B,然后是 A,反之亦然)。
有没有办法做到这一点?
在我的报告中,目前有 2 个子报告,我们称它们为A和B。
A列出现金头寸,B列出股票。
我从基于 Web 的Java环境运行此报告,JasperReports的报告从 sql 数据库中读取。
我想向JR报告传递一个参数,告诉它以什么顺序排列子报告,在这种情况下,例如(首先是B,然后是 A,反之亦然)。
有没有办法做到这一点?
您应该发送一个布尔类型的参数。在生成报告时。根据该参数,您应该定义子报告的路径。这是子报告 path.eg 的 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>
在其他情况下反之亦然。我没有测试过。请看一看。
享受。
您可以使用更复杂的 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"
ETC...