单个jasper文档中的多个查询

时间:2011-09-20 08:46:42

标签: jasper-reports

到目前为止,我一直受到jasper-reports的限制 我只能在每个文档中写一个数据查询 当我需要编写另一个查询时,我必须创建一个子报表,传递它所需的参数等等。

但我绝对不相信这是做这件事的好方法。

那么是否有另一种方法可以在单个jasper文档中触发多个数据查询?

2 个答案:

答案 0 :(得分:66)

可以使用subDatasetdatasetRun从单个报告中执行多个查询。行为就像将一个或多个子报表嵌入到单个报表文件中一样。

像这样定义一个subDataset:

<subDataset name="dataset1">
    <parameter name="someParam" class="java.lang.String"/>
    <queryString><![CDATA[SELECT column1, column2 FROM table1 WHERE column1=$P!{someParam}]]></queryString>
    <field name="column1" class="java.lang.String"/>
    <field name="column2" class="java.lang.String"/>
</subDataset>

子数据集可以像报表一样具有参数,字段,变量和组。每个子数据集都可以拥有自己的查询,报表可以包含任意数量的子数据集。

要使用子数据集,您需要定义datasetRun。这只能在特定元素内完成:图表,交叉表,表格和列表。我们将使用一个列表,因为它的行为几乎与另一个细节带一样。

此代码定义了一个使用我们的子数据集的列表:

<componentElement>
    <reportElement x="0" y="0" width="100" height="40"/>
    <jr:list 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="dataset1">
            <datasetParameter name="someParam"><datasetParameterExpression><![CDATA["some value for column 1"]]></datasetParameterExpression></datasetParameter>
        </datasetRun>
        <jr:listContents height="40">
            <textField>
                <reportElement x="0" y="0" width="100" height="20"/>
                <textElement/>
                <textFieldExpression class="java.lang.String"><![CDATA[$F{column1}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="0" y="20" width="100" height="20"/>
                <textElement/>
                <textFieldExpression class="java.lang.String"><![CDATA[$F{column2}]]></textFieldExpression>
            </textField>
        </jr:listContents>
    </jr:list>
</componentElement>

一些注意事项:

  • jr:listContents元素类似于细节带元素。你几乎可以放置任何其他元素。

  • datasetRun元素非常类似于子报表元素。它内部可以有dataSourceExpressionconnectionExpression,这将改变数据的来源。如果这两个都不存在,则使用报告数据源。

  • 许多datasetRuns都可以使用相同的subDataset,因此您可以使用不同的参数轻松地多次运行查询。

答案 1 :(得分:0)

最好让 Sub 报告调用或创建一个过程来使用 select 获取最终数据。