Jasper reports 在Jasper中将参数从主报表传递到子报表

Jasper reports 在Jasper中将参数从主报表传递到子报表,jasper-reports,subreport,Jasper Reports,Subreport,我有一个JasperReport,我将报告日期从主报告传递到子报告。这个很好用。我还有另一个例子,我将相同的参数传递给一个包含多个子报表的子报表。当我在Ireports中预览它时,它的所有页面都显示为空白,这意味着正在调用子报表,但没有传递报表日期,因为所有子报表SQL都以报表日期为条件。如何将“报告日期”字段添加到子报告?当我预览子报告并键入报告日期时,所有报告日期都有效,所有四个页面都填充了正确的数据。我猜它们使用的是默认值 假设主报表中参数的名称为TEST\u DATE,子报表中的名称为T

我有一个JasperReport,我将报告日期从主报告传递到子报告。这个很好用。我还有另一个例子,我将相同的参数传递给一个包含多个子报表的子报表。当我在Ireports中预览它时,它的所有页面都显示为空白,这意味着正在调用子报表,但没有传递报表日期,因为所有子报表SQL都以报表日期为条件。如何将“报告日期”字段添加到子报告?当我预览子报告并键入报告日期时,所有报告日期都有效,所有四个页面都填充了正确的数据。

我猜它们使用的是默认值

假设主报表中参数的名称为
TEST\u DATE
,子报表中的名称为
TEST\u DATE2
,则需要在XML中的开始和结束
子报表
元素之间添加以下内容:

<subreportParameter name="TEST_DATE2">
    <subreportParameterExpression><![CDATA[$P{TEST_DATE}]]></subreportParameterExpression>
</subreportParameter>
report1\u subreport1.jrxml

<?xml version="1.0" encoding="UTF-8"?>
<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="report1" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="7e2bc622-d768-437e-8c33-fc777bc06f8c">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <parameter name="TEST_DATE" class="java.util.Date"/>
    <parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
        <defaultValueExpression><![CDATA["C:\\Reports\\"]]></defaultValueExpression>
    </parameter>
    <pageHeader>
        <band height="83" splitType="Stretch">
            <textField>
                <reportElement uuid="4a2cf434-4473-48db-a89f-17a19d25cc4c" x="0" y="0" width="100" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$P{TEST_DATE}]]></textFieldExpression>
            </textField>
            <subreport>
                <reportElement uuid="54c02e96-6d47-49db-9b9c-58e1dd153242" x="0" y="30" width="200" height="35"/>
                <subreportParameter name="TEST_DATE2">
                    <subreportParameterExpression><![CDATA[$P{TEST_DATE}]]></subreportParameterExpression>
                </subreportParameter>
                <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
                <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "report1_subreport1.jasper"]]></subreportExpression>
            </subreport>
        </band>
    </pageHeader>
</jasperReport>
<?xml version="1.0" encoding="UTF-8"?>
<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="report1_subreport1" language="groovy" pageWidth="200" pageHeight="35" whenNoDataType="AllSectionsNoDetail" columnWidth="200" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="3cedac90-63cb-43cb-9d0f-e401543e65dd">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <parameter name="TEST_DATE2" class="java.util.Date" isForPrompting="false"/>
    <pageHeader>
        <band height="35" splitType="Stretch">
            <textField>
                <reportElement uuid="ca7f3da6-79f0-4d95-92db-6c5dbf777df9" x="0" y="15" width="100" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$P{TEST_DATE2}]]></textFieldExpression>
            </textField>
        </band>
    </pageHeader>
</jasperReport>

按照以下步骤将参数传递到子报表中:

  • 创建主报告参数,例如
    DATE\u参数
  • 打开子报表并创建具有相同名称和类型的参数
  • 返回主报告
  • 右键单击子报告,选择属性
  • 选择参数
  • 将参数从主报表添加到参数名称与参数名称相同的子报表

  • 参数从主报表传递到子报表。

    如果您使用iReport创建报表,请在iReport中打开主报表,选择
    子报表
    ,转到报表的
    属性
    部分,单击
    参数
    属性,然后单击
    从主报表复制
    选项卡。您可以从中选择要传递给子报表的参数。

    它不起作用。当我试图编译包含另一个子报表的子报表时,它会说:无法找到带有表达式的子报表:$P{'sub_sub_report_expression'}正在使用jaspersoft 6.9.0