是否可以在使用subDataSet的表组件中引用主报表中的JasperReport字段?

时间:2012-08-17 08:27:52

标签: jasper-reports

我正在处理一个包含各种字段和subDataset的报告:

<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>
...

我想知道的是:是否可以参考表格中的“totalAmount”字段?即我想在表的末尾添加一个“total”行,使用“totalAmount”字段。例如也许通过像这样使用columnFooter eleemnt:

<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>

我觉得我正在咆哮错误的树,'正确'的解决方案是将totalAmount存储在subDataset中,但是我不确定这是否对我来说是可用的选项

更新:问题已为cross-posted in jasper forums

1 个答案:

答案 0 :(得分:2)

解决方案是将我的主数据源中的字段添加为subDataset的参数,如下所示:

<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>