在我的报告中目前有2个子报表,我们称它们为A和B。
A列出了现金头寸,而B列出了股票。
我从基于web的Java环境运行此报告,JasperReports的报告从sql数据库读取。子报表订单排序
我想将一个参数传递给JR报告,告诉它按照什么顺序排列子报表,在这种情况下用于例如(B第一,然后A或反之亦然)。
有没有办法做到这一点?
在我的报告中目前有2个子报表,我们称它们为A和B。
A列出了现金头寸,而B列出了股票。
我从基于web的Java环境运行此报告,JasperReports的报告从sql数据库读取。子报表订单排序
我想将一个参数传递给JR报告,告诉它按照什么顺序排列子报表,在这种情况下用于例如(B第一,然后A或反之亦然)。
有没有办法做到这一点?
您应该发送一个布尔类型的参数。同时生成报告。在该参数的基础上,您应该定义子报表的路径。 这里是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>
而在其他case.I反之亦然没有测试。请看一看。
享受。
您可以使用更复杂的subreportExpression和“打印时的表达式”。 在第一组报表打印时,在第二
$P{NUM_OF_SUBS} <= 2 ? true : false
像
$P{NUM_OF_SUBS} <= 1 ? 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 ...
谢谢你的帮助。 – Sil
现在要从这个例子走向现实 - 有一个X数量的子报表(假设我有10个 - 现金,股票,期货等),所以来自数据库的参数不仅是订单的子报告,但也显示哪些。 - 因此数据可能是B,D,A(运行报告2,然后是4,然后是1 ..除外)。有没有办法做到这一点? – Sil
如果您有超过2个子报表,并且您想根据您的选择管理它们,那么您应该使用动态碧玉。 – user1791574