如何将表数据源中的值返回到iReport中的主报表?

时间:2012-05-01 06:34:14

标签: return jasper-reports ireport

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

我该怎么做或其他选择?

6 个答案:

答案 0 :(得分:10)

如果要从表数据集中获取一些数据,实际上可以执行此操作。我找到了一个肮脏的技巧来实现这一目标。

  1. 在主报告中创建variableMapName类型的变量java.util.Map,并使用表达式new java.util.HashMap()

  2. 对其进行初始化
  3. 在表格数据集中创建parameterMapName类型的参数java.util.Map

  4. 使用“编辑表数据源 - >参数 - >添加 - > $ P {parameterMapName} = $ V {variableMapName}”链接数据集PARAMETER和主报表中的变量右键单击主报告模板中的表格

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

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

    现在,您可以使用$V{variableMapName}.get("KEY")

    在主报表中使用表数据源中的数据

    这真的是一个肮脏的黑客,但有时你没有别的办法做某事。 谢谢!

答案 1 :(得分:8)

使用subDataset从组件返回值的正确方法(jasper report 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>
    
  4. 然后可以在主报告中使用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)

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

jasper studio 6.0.1,I找到一个名为dataset of table的属性,它设置了返回值。但进入集合,我找到了表格&#34;配置返回值&#34;是错误的,jasper工作室出现错误,从变量变为&#34; ,stuio逆转了这两个变量。 &#34;来自变量&#34;表是本地变量,&#34;是值&#34;是主报告变量。您必须在源代码中进行手动操作,然后删除"incrementerFactoryClass=""".

我测试,没关系。返回值打印在主报表上。

接下来是我的jrxml。

&#13;
&#13;
<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>
&#13;
&#13;
&#13;

答案 5 :(得分:0)

对于地图类型,可以休息任何类型,从表格集返回值到主报告是不可能的。

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