使用带参数的Jasper Reports表的正确方法?

时间:2016-04-20 16:09:58

标签: jasper-reports

我目前正在尝试制作一个使用表格的报告,以便为用户轻松排序。我已经探索了很多问题和文档,但我仍然在使用在JasperSoft Studio中构建报告的正确方法。我让它以一种方式工作,但它非常慢,我确信这不是正确的方法。这或多或少是我现在正在做的事情:

<subDataset name="Dataset1" uuid="6926ab77-6601-4046-a16e-ff19290b3c00">
    <parameter name="param" class="java.lang.Integer"/>
    <queryString>
        <![CDATA[select 
                fields
                from table
                where column = ($P{param})]]>
    </queryString>
    <!-- fields -->
    <field name="field" class="java.lang.String"/>
</subDataset>
<parameter name="param" class="java.lang.Integer"/>
<queryString>
    <![CDATA[select 
            fields
            from table]]>
</queryString>
<summary>
    <band height="66">
        <componentElement>
            <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="Dataset1" uuid="933a99f0-f34a-457e-9b90-f641f54fe213">
                    <datasetParameter name="param">
                        <datasetParameterExpression><![CDATA[$P{param}]]></datasetParameterExpression>
                    </datasetParameter>
                    <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
                </datasetRun>
                <jr:column width="100" uuid="ad2b846b-732a-4b83-aec0-959f19ce2972">
                    <jr:columnHeader style="Table_CH" height="30">
                        <staticText>
                            <reportElement x="0" y="0" width="100" height="30" uuid="84616414-4739-471e-b853-7a537e72c959"/>
                            <text><![CDATA[columnHeader]]></text>
                        </staticText>
                    </jr:columnHeader>
                    <jr:detailCell style="Table_TD" height="30">
                        <textField>
                            <reportElement x="0" y="0" width="100" height="30" uuid="bafa83be-5223-4f44-88dd-249256c22a72"/>
                            <textFieldExpression><![CDATA[$F{field}]]></textFieldExpression>
                        </textField>
                    </jr:detailCell>
                </jr:column>
            </jr:table>
        </componentElement>
    </band>
</summary>

是否真的有必要运行两次查询?如果我尝试删除任一查询并解决它,该表永远不会收到任何数据。这个问题看起来很简单,必须要有一些方法。

1 个答案:

答案 0 :(得分:1)

我没有看到使用subDataset和查询参数的方式存在问题。

您的问题确实是您正在运行SQL查询两次。 为了防止您需要将主数据集的查询设为空:

<queryString>
<![CDATA[]]>
</queryString>

然后从报告的属性中设置以下内容:

  

无数据类型时:所有部分无详细信息

这会强制渲染你的所有乐队,除了详细的乐队,因为我假设你没有乐队。