【问题标题】:Jasper -Java.util.collection paramter from main to Sub reportJasper -Java.util.collection 参数从主报表到子报表
【发布时间】:2016-10-05 05:07:54
【问题描述】:

我的图表报告使用了 Java.util.collection 类型的参数。当我尝试在组带中使用此图表作为具有类似 Java.util.collection 类型参数的主报表的子报表时,图表值会在组内迭代。例如,如果图表在两个单独的页面中显示 L1 和 L2 的值。但是,当将值 L1 添加到主报表时,子报表会同时显示 L1 和 L2 而不仅仅是 L1。

当参数作为 L1 传递时,我能否仅显示子报表中的 L1,而不是组带中的 L&L2?

仅供参考,使用 Jaspersoft Studio 5.6.1

编辑:

假设我从主报告中传递 2 个项目 P1 和 P2 作为参数,现在我得到的结果是:

  • 第一页主报表数据P1
  • 子报表数据P1
  • 子报表数据P2
  • 第 2 页主报告数据 P2
  • 子报表数据P1
  • 子报表数据P2

但是,想要的结果应该是这样的:

  • 第一页主报表数据P1
  • 子报表数据P1
  • 第 2 页主报告数据 P2
  • 子报表数据P2。

我已在其中一个组标题中添加了子报表。

主要报告:

<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="test_subreport" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="d2616041-39f3-44ce-a1e4-4ce5a6a1593c">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="Dev DB Conn" />
<parameter name="param_project" class="java.util.collection" nestedType="java.lang.Integer">
    <parameterDescription>
        <![CDATA[]]>
    </parameterDescription>
</parameter>
<queryString language="SQL">
    <![CDATA[SELECT
                i.id prid,c.INUSAGE,d.CURRUSAGE
                FROM
                project table i, custom table c
                where i.id = c.id and $X{IN,I.id,param_project}
                ]]>
</queryString>
<field name="prid" class="java.math.BigDecimal" />
<field name="INUSAGE" class="java.math.BigDecimal" />
<field name="CURRUSAGE" class="java.math.BigDecimal" />
<group name="Group1">
    <groupExpression>
        <![CDATA[$F{INVID}]]>
    </groupExpression>
</group>
<columnHeader>
    <band height="210">
        <textField>
            <reportElement x="0" y="80" width="80" height="30" uuid="263d8d17-1c40-4709-ba8f-76e27a976c75" />
            <textFieldExpression>
                <![CDATA[$F{prid}]]>
            </textFieldExpression>
        </textField>
        <subreport>
            <reportElement isPrintRepeatedValues="false" x="80" y="2" width="200" height="200" uuid="da630714-b937-493c-9db5-a4baa7128f3d" />
            <subreportParameter name="param_invID">
                <subreportParameterExpression>
                    <![CDATA[$P{param_project}]]>
                </subreportParameterExpression>
            </subreportParameter>
            <connectionExpression>
                <![CDATA[$P{REPORT_CONNECTION}]]>
            </connectionExpression>
            <subreportExpression>
                <![CDATA["Workload1_added_collection_group1.jasper"]]>
            </subreportExpression>
        </subreport>
    </band>
</columnHeader>

子报告链接:subreport

谢谢

Sreeram

【问题讨论】:

  • edit您的问题并添加jrxml信息以及屏幕截图(如果可能)。你想要的方式是什么?你把它放在主要报告的什么地方?
  • 托比,更新了问题。添加了 jrxml。假设我从主报表传递 2 个项目 P1 和 P2 作为参数,现在我得到的结果是,第一页主报表数据 P1,子报表数据 P1,子报表数据 P2 第二页主报表数据 P2,子报表数据 P1 , 子报表数据 P2 但是,期望的结果应该是这样的,第一页主报表数据 P1,子报表数据 P1 第二页主报表数据 P2,子报表数据 P2。我在其中一个组标题中添加了子报表.
  • 这和子报表有关系吗?通常子报表应该只获取它应该显示的项目,例如P1 的“P1 ID”和 P2 的“P2 ID”。但是,如果您提供一个集合,它将始终在数据集合中循环。
  • 感谢托比,我将图表直接添加到主报告中,它起作用了。现在我有另一个问题。我有两个关于主要报告的子报告。对于多值参数输入(类型:集合),第一个子报表应该跟在第一个输入的第二个报表之后,对于第二个输入,第一个子报表应该跟在第二个子报表之后。但在我的情况下,它打印第一个sureport的所有值,然后打印第二个子报表的所有值。我怎样才能使它成为一个正确的报告?这是放置问题吗,因为我将子报表放置在组标题中
  • 没问题。请在此评论中使用您的描述打开一个新问题。

标签: collections jasper-reports subreport


【解决方案1】:

通常子报表应该只获取它应该显示的项目,例如P1 为“P1 ID”,P2 为“P2 ID”。但是,如果您提供一个集合,它将始终循环通过数据集合。

因此,您应该将 ID 添加到子报表或将图表放在主报表中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多