子报表顺序排序

时间:2013-10-22 11:01:38

标签: sorting jasper-reports subreport

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

我想将参数传递给 JR 报告,该报告告诉它以什么顺序排列子报告,在本例中为例如( B 首先,然后 A ,反之亦然)。

有没有办法实现这个目标?

2 个答案:

答案 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"

等...