Jasper reports 是否可以在使用子数据集的表组件中引用主报表中的JasperReport字段?
我正在处理一个包含多个字段和子数据集的报表:Jasper reports 是否可以在使用子数据集的表组件中引用主报表中的JasperReport字段?,jasper-reports,Jasper Reports,我正在处理一个包含多个字段和子数据集的报表: <subDataset name="mySubDataset"> <field name="name" class="java.lang.String"/> <field name="net" class="java.lang.String"/> <field name="tax" class="java.lang.String"/> <field name="to
<subDataset name="mySubDataset">
<field name="name" class="java.lang.String"/>
<field name="net" class="java.lang.String"/>
<field name="tax" class="java.lang.String"/>
<field name="total" class="java.lang.String"/>
</subDataset>
<parameter name="myDataSource" class="net.sf.jasperreports.engine.JRDataSource" isForPrompting="false"/>
<field name="totalAmount" class="java.lang.String"/>
我使用如下表组件迭代“mySubDataset”:
<jr:table>
<datasetRun subDataset="mySubDataset">
<dataSourceExpression><![CDATA[$P{myDataSource}]]></dataSourceExpression>
</datasetRun>
...
<jr:column width="110">
<jr:tableHeader height="25">
<staticText>
<reportElement x="0" y="0" width="110" height="25" />
</staticText>
</jr:tableHeader>
<jr:columnHeader height="25">
<textField>
<reportElement x="0" y="0" width="110" height="25"/>
<textFieldExpression><![CDATA[$R{netCol}]]></textFieldExpression>
</textField>
</jr:columnHeader>
<jr:columnFooter height="25">
<textField>
<reportElement x="0" y="0" width="110" height="25" />
<textFieldExpression><![CDATA[$F{totalAmount}]]></textFieldExpression>
</textField>
</jr:columnFooter>
<jr:detailCell height="25">
<textField>
<reportElement x="0" y="0" width="110" height="25" />
<textFieldExpression><![CDATA[$F{net}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
<subDataset name="mySubDataset">
<parameter name="totalAmount" class="java.lang.String"/>
<field name="name" class="java.lang.String"/>
<field name="net" class="java.lang.String"/>
<field name="tax" class="java.lang.String"/>
<field name="total" class="java.lang.String"/>
</subDataset>
...
我想知道的是:是否可以引用表中的“totalAmount”字段?i、 e.我想在使用“totalAmount”字段的表格末尾添加一个“total”行。e、 g.可能通过使用columnFooter元素,如下所示:
<jr:table>
<datasetRun subDataset="mySubDataset">
<dataSourceExpression><![CDATA[$P{myDataSource}]]></dataSourceExpression>
</datasetRun>
...
<jr:column width="110">
<jr:tableHeader height="25">
<staticText>
<reportElement x="0" y="0" width="110" height="25" />
</staticText>
</jr:tableHeader>
<jr:columnHeader height="25">
<textField>
<reportElement x="0" y="0" width="110" height="25"/>
<textFieldExpression><![CDATA[$R{netCol}]]></textFieldExpression>
</textField>
</jr:columnHeader>
<jr:columnFooter height="25">
<textField>
<reportElement x="0" y="0" width="110" height="25" />
<textFieldExpression><![CDATA[$F{totalAmount}]]></textFieldExpression>
</textField>
</jr:columnFooter>
<jr:detailCell height="25">
<textField>
<reportElement x="0" y="0" width="110" height="25" />
<textFieldExpression><![CDATA[$F{net}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
<subDataset name="mySubDataset">
<parameter name="totalAmount" class="java.lang.String"/>
<field name="name" class="java.lang.String"/>
<field name="net" class="java.lang.String"/>
<field name="tax" class="java.lang.String"/>
<field name="total" class="java.lang.String"/>
</subDataset>
我觉得我选错了树,“正确”的解决方案是首先将总量存储在子数据集中,但是我不确定这对我来说是否是一个可用的选项
更新:问题一直是解决方案是将主数据源中的字段添加为子数据集的参数,如下所示:
<jr:table>
<datasetRun subDataset="mySubDataset">
<dataSourceExpression><![CDATA[$P{myDataSource}]]></dataSourceExpression>
</datasetRun>
...
<jr:column width="110">
<jr:tableHeader height="25">
<staticText>
<reportElement x="0" y="0" width="110" height="25" />
</staticText>
</jr:tableHeader>
<jr:columnHeader height="25">
<textField>
<reportElement x="0" y="0" width="110" height="25"/>
<textFieldExpression><![CDATA[$R{netCol}]]></textFieldExpression>
</textField>
</jr:columnHeader>
<jr:columnFooter height="25">
<textField>
<reportElement x="0" y="0" width="110" height="25" />
<textFieldExpression><![CDATA[$F{totalAmount}]]></textFieldExpression>
</textField>
</jr:columnFooter>
<jr:detailCell height="25">
<textField>
<reportElement x="0" y="0" width="110" height="25" />
<textFieldExpression><![CDATA[$F{net}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
<subDataset name="mySubDataset">
<parameter name="totalAmount" class="java.lang.String"/>
<field name="name" class="java.lang.String"/>
<field name="net" class="java.lang.String"/>
<field name="tax" class="java.lang.String"/>
<field name="total" class="java.lang.String"/>
</subDataset>
然后在表的datasetRun中填充参数,如下所示:
<datasetRun subDataset="myDataSet">
<datasetParameter name="totalAmount">
<datasetParameterExpression><![CDATA[$F{totalAmount}]]></datasetParameterExpression>
</datasetParameter>
<dataSourceExpression><![CDATA[$P{myDataSource}]]></dataSourceExpression>
</datasetRun>
然后我可以在tableFooter中引用totalAmount,如下所示:
<jr:tableFooter height="25">
<textField>
<reportElement x="0" y="0" width="200" height="25" style="SubSummary"/>
<textFieldExpression><![CDATA[$P{totalAmount}]]></textFieldExpression>
</textField>
</jr:tableFooter>
解决方案是将主数据源中的字段添加为子数据集的参数,如下所示:
<jr:table>
<datasetRun subDataset="mySubDataset">
<dataSourceExpression><![CDATA[$P{myDataSource}]]></dataSourceExpression>
</datasetRun>
...
<jr:column width="110">
<jr:tableHeader height="25">
<staticText>
<reportElement x="0" y="0" width="110" height="25" />
</staticText>
</jr:tableHeader>
<jr:columnHeader height="25">
<textField>
<reportElement x="0" y="0" width="110" height="25"/>
<textFieldExpression><![CDATA[$R{netCol}]]></textFieldExpression>
</textField>
</jr:columnHeader>
<jr:columnFooter height="25">
<textField>
<reportElement x="0" y="0" width="110" height="25" />
<textFieldExpression><![CDATA[$F{totalAmount}]]></textFieldExpression>
</textField>
</jr:columnFooter>
<jr:detailCell height="25">
<textField>
<reportElement x="0" y="0" width="110" height="25" />
<textFieldExpression><![CDATA[$F{net}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
<subDataset name="mySubDataset">
<parameter name="totalAmount" class="java.lang.String"/>
<field name="name" class="java.lang.String"/>
<field name="net" class="java.lang.String"/>
<field name="tax" class="java.lang.String"/>
<field name="total" class="java.lang.String"/>
</subDataset>
然后在表的datasetRun中填充参数,如下所示:
<datasetRun subDataset="myDataSet">
<datasetParameter name="totalAmount">
<datasetParameterExpression><![CDATA[$F{totalAmount}]]></datasetParameterExpression>
</datasetParameter>
<dataSourceExpression><![CDATA[$P{myDataSource}]]></dataSourceExpression>
</datasetRun>
然后我可以在tableFooter中引用totalAmount,如下所示:
<jr:tableFooter height="25">
<textField>
<reportElement x="0" y="0" width="200" height="25" style="SubSummary"/>
<textFieldExpression><![CDATA[$P{totalAmount}]]></textFieldExpression>
</textField>
</jr:tableFooter>