12

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

我该怎么做或任何替代方法?

4

6 回答 6

12

使用从组件返回值的正确方法(jasper 报告 v.5/v.6)subDataset是使用变量,在主报告和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然后可以在主报告中使用该变量,只需记住设置正确的评估时间

显示值(在主报告中)

<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>
于 2016-01-20T00:31:32.723 回答
11

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

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

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

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

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

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

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

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

于 2013-12-19T14:26:29.657 回答
1

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

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

于 2012-05-02T23:03:41.103 回答
0

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

于 2012-05-03T10:37:34.860 回答
0

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

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>

于 2015-06-05T10:00:26.693 回答
0

对于地图类型,其余任何类型的从表集返回到主报告的值都是不可能的。

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

于 2015-07-29T06:28:07.527 回答