【问题标题】:How to pass a parameter from main report to sub report?如何将参数从主报告传递到子报告?
【发布时间】:2016-01-03 06:59:18
【问题描述】:

我想将我的参数值从主报告传递到子报告。

我尝试了很多方法。我也尝试过此链接中的选项 passing-parameters-from-main-report-to-subreport-to-subreport-in-jasper

主要报告

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.2.0.final using JasperReports Library version 6.2.0  -->
<!-- 2016-01-03T00:04:36 -->
<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="parademo" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="4949f116-97b5-453c-8581-61ccb1b3159e">
    <parameter name="TITLEPARA" class="java.lang.String" isForPrompting="false">
        <defaultValueExpression><![CDATA["hi title"]]></defaultValueExpression>
    </parameter>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <background>
        <band splitType="Stretch"/>
    </background>
    <title>
        <band height="79" splitType="Stretch">
            <textField>
                <reportElement x="180" y="36" width="220" height="30" uuid="4ac55979-2248-45d2-a001-3c82b5fec56b"/>
                <textFieldExpression><![CDATA[$P{TITLEPARA}]]></textFieldExpression>
            </textField>
        </band>
    </title>
    <pageHeader>
        <band height="35" splitType="Stretch"/>
    </pageHeader>
    <columnHeader>
        <band height="61" splitType="Stretch"/>
    </columnHeader>
    <detail>
        <band height="286" splitType="Stretch">
            <subreport runToBottom="false">
                <reportElement x="0" y="86" width="560" height="74" uuid="eca8556b-2d65-462f-a3d3-ac95ea6e3ebf"/>
                <subreportParameter name="TITLEPARA">
                    <subreportParameterExpression><![CDATA[$P{TITLEPARA}]]></subreportParameterExpression>
                </subreportParameter>
                <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
                <subreportExpression><![CDATA["file:/home/rectrix/workspace/jasper/subparam.jrxml"]]></subreportExpression>
            </subreport>
        </band>
    </detail>
    <columnFooter>
        <band height="45" splitType="Stretch"/>
    </columnFooter>
    <pageFooter>
        <band height="54" splitType="Stretch"/>
    </pageFooter>
    <summary>
        <band height="42" splitType="Stretch"/>
    </summary>
</jasperReport>

子报告

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.2.0.final using JasperReports Library version 6.2.0  -->
<!-- 2016-01-03T00:04:17 -->
<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="subparam" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="b4c019e3-0dc2-425c-b449-908c4fd21bde">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="MainReportDataSet"/>
    <parameter name="TITLEPARA" class="java.lang.String" isForPrompting="false"/>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <background>
        <band splitType="Stretch"/>
    </background>
    <title>
        <band height="79" splitType="Stretch">
            <textField>
                <reportElement x="140" y="45" width="100" height="30" uuid="6b9d5038-4163-47ed-a0cd-812f07b27ff0"/>
                <textFieldExpression><![CDATA[$P{TITLEPARA}]]></textFieldExpression>
            </textField>
        </band>
    </title>
    <pageHeader>
        <band height="35" splitType="Stretch"/>
    </pageHeader>
    <columnHeader>
        <band height="61" splitType="Stretch"/>
    </columnHeader>
    <detail>
        <band height="125" splitType="Stretch"/>
    </detail>
    <columnFooter>
        <band height="45" splitType="Stretch"/>
    </columnFooter>
    <pageFooter>
        <band height="54" splitType="Stretch"/>
    </pageFooter>
    <summary>
        <band height="42" splitType="Stretch"/>
    </summary>
</jasperReport>

我可以使用主报告的title 带中的参数打印“HI TITLE”。

我想使用参数将此值传递给子报表,并将其打印在子报表的title 带上。

我想只使用参数传递这个值,因为我想知道参数是如何工作的,所以我可以在我的项目中使用它来通过参数将值传递给子报告。

【问题讨论】:

    标签: jasper-reports


    【解决方案1】:

    您传递的参数正确,这不是您的问题。

    使用您的示例文件会遇到这些问题。

    1. 如果数据源为空,您需要 jasperReport 标签上的属性 whenNoDataType="AllSectionsNoDetail" 来显示某些内容(在主报表和子报表中)。

    2. 子报表不能在 detail 带区(因为您的数据源是空的),将其移动到另一个带区示例 title 带区。

    3. 您不能在subreportExpression 中引用jrxml,您需要引用.jasper 文件(已编译的jrxml)。注意:路径必须是文件的绝对路径(通常为此使用参数,以便在运行时传递它)

    有关子报告Subreport not rendering in main report的路径的更多信息,请参阅此处

    为了测试,我建议您在子报表中放置另一个静态文本元素,以便您了解子报表是否显示。

    【讨论】:

    • 先生,您的第一点我没有正确理解...您能否详细说明并解释原因。以及在 jaspersoft 工作室中的具体做法
    • 哦,谢谢先生,我找到了一种设置whenNoDataType的方法,但是你能解释一下它到底是做什么的吗。
    • 这是一个“空数据源行为”,当你没有数据(空数据源)时,报告应该怎么做?...默认行为是NoPages(所以不会显示band),因为您没有将任何数据传递给子报表,所以它根本没有显示任何内容......有关 whenNoDataType 的更多信息,请参阅jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/…
    • 如果主报表有页眉和页脚,那么子报表应该放在哪里呢?子报表具有通过从 Java 传递数据来填充的参数。
    • @DhruvilThaker 你不能把它放在标题栏(因为没有显示页脚或页眉),或者使用摘要栏(检查属性 isSummaryWithPageHeaderAndFooter="true")或使用详细栏传递1 个空记录数据源
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多