0

在我的报告中,目前有 2 个子报告,我们称它们为AB
A列出现金头寸B列出股票。 我从基于 Web 的Java环境运行此报告,JasperReports的报告从 sql 数据库中读取。

我想向JR报告传递一个参数,告诉它以什么顺序排列子报告,在这种情况下,例如(首先是B,然后是 A,反之亦然)。

有没有办法做到这一点?

4

2 回答 2

1

您应该发送一个布尔类型的参数。在生成报告时。根据该参数,您应该定义子报告的路径。这是子报告 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>

在其他情况下反之亦然。我没有测试过。请看一看。

享受。

于 2013-10-22T14:49:52.260 回答
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"

ETC...

于 2013-10-23T11:31:07.620 回答