【问题标题】:How to pass value/variabile from subreport to main report?如何将值/变量从子报表传递到主报表?
【发布时间】:2013-10-15 14:55:49
【问题描述】:

我想简单地从子报表返回一个值到主报表,但在执行报表时总是显示null。使用 iReport 5.1.0。

主要报告

<?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="report4" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="ce028d85-f7e8-4abd-ad6b-e3b2ba04d14e">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
    <defaultValueExpression><![CDATA["C:\\Users\\DellXFR\\"]]></defaultValueExpression>
</parameter>
<variable name="z" class="java.lang.Integer" calculation="System">
    <variableExpression><![CDATA[8]]></variableExpression>
</variable>
<background>
    <band splitType="Stretch"/>
</background>
<title>
    <band height="79" splitType="Stretch"/>
</title>
<detail>
    <band height="125" splitType="Stretch">
        <subreport>
            <reportElement uuid="0c501730-d98a-4982-9953-2939f127ad9e" x="40" y="10" width="200" height="100"/>
            <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
            <returnValue subreportVariable="x" toVariable="z"/>
            <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "report4_subreport1.jasper"]]></subreportExpression>
        </subreport>
        <textField evaluationTime="Band">
            <reportElement uuid="9020a8d9-5799-4907-b8a3-704f41ffdcc0" x="399" y="73" width="100" height="20"/>
            <textElement/>
            <textFieldExpression><![CDATA[$V{z}]]></textFieldExpression>
        </textField>
    </band>
</detail>
<summary>
    <band height="42" splitType="Stretch"/>
</summary>
  </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="report4_subreport1" language="groovy" pageWidth="555" pageHeight="802" columnWidth="555" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="78290b3a-34c2-496e-86ff-e213ca2c1039">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<queryString language="SQL">
    <![CDATA[select * from ot;]]>
</queryString>
<field name="salscheme_id" class="java.lang.String">
    <fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="ot_amount" class="java.lang.Double">
    <fieldDescription><![CDATA[]]></fieldDescription>
</field>
<variable name="x" class="java.lang.Integer">
    <variableExpression><![CDATA[1]]></variableExpression>
</variable>
<group name="salscheme_id">
    <groupExpression><![CDATA[$F{salscheme_id}]]></groupExpression>
</group>
<background>
    <band splitType="Stretch"/>
</background>
<detail>
    <band height="125" splitType="Stretch"/>
</detail>
    </jasperReport>

【问题讨论】:

  • 主报表变量z,子报表变量x。都是整数
  • 而当您自己运行子报表时,它会返回一个非空值?
  • 是的。它显示了我分配的值。

标签: jasper-reports subreport


【解决方案1】:

将变量从子报表传递到主报表,如下所示:

  1. 在主报表中,创建一个变量:

    <variable name="subReportValue" class="java.lang.Integer"/>
    

    注意:不要不要设置计算值。

  2. 在子报表中,还要创建一个变量:

    <variable name="returnValue" class="java.lang.Integer" calculation="First">
      <variableExpression><![CDATA[$F{myField}]]></variableExpression>
    </variable>
    

    设置计算和您想要返回的内容。注意:尊重主报表变量的类值,它们需要是同一类

  3. 在主报表中,在子报表标签中设置子报表返回值:

    <returnValue subreportVariable="returnValue" toVariable="subReportValue"/>
    
  4. 如果您想将subReportValue 放在详细信息带中,只需设置textFieldevalutationTime,因此它需要在子报表之后(否则它仍然为空)。

    <textField evaluationTime="Band">
            <reportElement x="251" y="109" width="100" height="20"/>
            <textElement lineSpacing="Single"/>
            <textFieldExpression class="java.lang.Integer"><![CDATA[$V{subReportValue}]]></textFieldExpression>
    </textField>
    

如果不在详细带集evaluationTime="Report"进行分组。要了解不同的评估时间,请参阅EvaluationTimeEnum

完成后重新编译子报告,因为主报告引用编译后的.jasper 文件,而不是.jrxml 源。

【讨论】:

    【解决方案2】:

    将元素的评估时间设置为“带”

    【讨论】:

      【解决方案3】:

      对于 Studio 6.6 中的我来说,主报告中的接收变量必须将其 “计算”属性设置为“系统”。然后它显示了预期的结果。在此之前,无论其他设置如何更改,它都会显示“null”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-17
        • 1970-01-01
        • 1970-01-01
        • 2016-10-22
        相关资源
        最近更新 更多