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

时间:2012-12-12 15:34:30

标签: jasper-reports subreport

我有一个 JasperReport ,我将报告日期从主报告传递到子报告。这很好用。我还有另一个我将相同参数传递给具有多个SubReports的子报表。当我在 Ireports 中预览它时,它的所有页面都显示为空白,这意味着正在调用子子报告,但报告日期未被传递,因为所有子子报告SQL都以报告日期。如何将报告日期字段输入子子报告?当我预览SubReport并在报告日期中输入所有报告日期时,所有四个页面都填充了正确的数据。

3 个答案:

答案 0 :(得分:31)

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

  1. 创建主报告参数,例如DATE_PARAM
  2. 打开子报告并创建具有相同名称和相同类型的参数。
  3. 返回主报告
  4. 右键单击子报告,选择属性
  5. 选择参数
  6. 将主报表中的参数添加到参数名称相同的参数名称
  7. 的子报表中

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

答案 1 :(得分:17)

我猜他们正在使用默认值。

假设主报告中的参数名称为TEST_DATE且子报告中的名称为TEST_DATE2,则需要在开始和结束之间添加以下内容{{1} XML中的元素:

subreport

为了完整起见,这里有一个包含主报表和子报表的示例,只需将<subreportParameter name="TEST_DATE2"> <subreportParameterExpression><![CDATA[$P{TEST_DATE}]]></subreportParameterExpression> </subreportParameter> 的值更改为指向放置它们的位置即可。

<强> report1.jrxml

SUBREPORT_DIR

<强> report1_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>

答案 2 :(得分:11)

如果您使用iReport创建报告,请在iReport中打开主报告,然后选择Subreport并转到报告的property部分,点击Parameters属性,然后点击Copy from master标签。从那里,您可以选择要传递给子报告的参数。