【问题标题】:How to return value from table's DataSource to main report in iReport?如何将表的数据源中的值返回到 iReport 中的主报表?
【发布时间】:2012-05-01 06:34:13
【问题描述】:

我的 iReport 中有一个表,它自然有它的数据集,我有一个变量,它在表的数据集中定义和初始化,返回一个我想要的值(肯定在表的范围内,而不是在表之外)在包含表格的主报告中使用。

我怎样才能做到这一点或任何替代方案?

【问题讨论】:

    标签: return jasper-reports ireport


    【解决方案1】:

    使用subDataset 从组件返回值的正确方法(jasper 报告 v.5/v.6)是使用变量,在主报告和subDataset 中定义变量。

    示例(将表的记录数返回到主报表)

    1. 在主报告中定义一个变量

      <variable name="TABLE_COUNT" class="java.lang.Integer" resetType="None">
         <initialValueExpression><![CDATA[0]]></initialValueExpression>
      </variable>
      
    2. subdataset 中定义一个变量(例如,将使用内置变量$V{REPORT_COUNT})。

    3. datasetRun 中指明哪个subDataset 变量(fromVariable) 应该返回哪个主报表变量(toVariable

      <datasetRun subDataset="tableData" uuid="fa5df3de-f4c5-4bfc-8274-bd064e8b81e6">
         <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
         <returnValue fromVariable="REPORT_COUNT" toVariable="TABLE_COUNT"/>
      </datasetRun>
      

    TABLE_COUNT 变量随后可以在主报告中使用,只需记住设置正确的evaluationTime

    显示值(在主报告中)

    <textField evaluationTime="Report">
        <reportElement x="0" y="0" width="100" height="20" uuid="d67ddb3e-b0cc-4fae-9e05-f40eb0f7e059"/>
        <textFieldExpression><![CDATA[$V{TABLE_COUNT}]]></textFieldExpression>
    </textField>
    

    【讨论】:

    • 非常好的答案:)
    【解决方案2】:

    如果您想从表数据集中获取一些数据,您实际上可以这样做。我发现了一个肮脏的技巧来实现这一点。

    1. 在主报表中创建java.util.Map 类型的变量variableMapName 并使用表达式new java.util.HashMap() 对其进行初始化

    2. 在表数据集中创建java.util.Map 类型的参数parameterMapName

    3. 使用 "Edit table datasource -> Parameters -> Add -> $P{parameterMapName} = $V{variableMapName}" 将数据集 PARAMETER 与主报表中的变量链接起来(右键单击主报告模板中的表格)

    4. 在表数据源中创建 java.lang.String 类型的变量 putResult。此变量的表达式将如下所示

    $P{parameterMapName}.put("KEY", $F{fieldYouWantReturn}) + $P{parameterMapName}.put("KEY2", $F{otherFieldYouWantReturn})

    现在您可以通过$V{variableMapName}.get("KEY")在主报告中使用表数据源中的数据

    这确实是一个肮脏的黑客,但有时你没有其他方法可以做某事。 谢谢!

    【讨论】:

    • 试过这个解决方案,但没有奏效。看不到 putResult 将如何在表生成后将数据发送到在表创建之前完成的打印方法
    • 谢谢你,我的油炸,我只需要使用我的数据集总和 toString() 在我的报告中访问它,这样我可以从数据集中总结我的所有结果,它真的非常有用提示
    【解决方案3】:

    这听起来很合理......但我不确定这是否可能。这可能是一个有用的增强请求。

    另一种方法是使用子报表。表中的任何可能在子报表中都是可能的。子报表具有返回值,这将让您传回所需的信息。

    【讨论】:

    • 感谢 mdahlman 的回答。正如您为 iReport IDE 开发团队引用的“这可能是一个有用的增强请求”。当然,子报表可以将值返回到其主报表;这也是一种方式。但我希望是否有任何方法可以将值从表返回到它的 Main-report ?请问,如果有人对我要求的东西有任何进一步的想法吗?
    【解决方案4】:

    您将无法将变量从表的数据集中返回到主报表,反之亦然。替代方案可以按照 mdahlman 的建议。请改用子报告。

    【讨论】:

      【解决方案5】:

      现在您可以将值从表的数据集中返回到主报表。

      jasper studio 6.0.1,I 上找到了一个名为 dataset of table 的属性,它设置了返回值。但是进入集合,我发现“配置返回值”的形式是错误的,jasper studio 用“从变量到变量”错误,stuio 将两个变量颠倒。 “from variable”是表的局部变量,“to value”是主报表变量。必须在 source 中手动编辑,并删除 "incrementerFactoryClass=""".

      我测试,没问题。返回值打印在主报告上。

      接下来是我的 jrxml 的一部分。

      <jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
      					<datasetRun subDataset="workscore" uuid="307278bc-db98-4de2-9b50-dea5dc69b496">
      						<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
      						<returnValue fromVariable="returnscore" toVariable="workscore"/>
      					</datasetRun>

      【讨论】:

        【解决方案6】:

        对于 Map Type,rest 任何类型的返回值都是不可能的,从 table-set 到主报告是不可能的。

        虽然可以使用子报告,因为有返回值的选项。如果可能,请尝试使用子报告代替表格。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-03
          相关资源
          最近更新 更多