Jasper Reports打印参数,同时在数组上进行交互

时间:2018-04-17 12:29:23

标签: java jasper-reports

我正在打印一个表(数组列表),一列将包含所有行的相同值,这些值将作为参数传递给report。我试图遍历列表并打印如下所示的参数但没有成功。

        <staticText>
            <reportElement style="table_CH" x="948" y="490" width="54" height="20" backcolor="#CCCCCC" uuid="5f8ded52-e8fd-4fd0-8ea3-2b0aaed76545"/>
            <textElement textAlignment="Center" verticalAlignment="Middle">
                <font size="7" isBold="true" isItalic="true" isUnderline="false"/>
            </textElement>
            <text><![CDATA[Total from stock]]></text>
        </staticText>
        <componentElement>
            <reportElement x="950" y="510" width="51" height="20" uuid="6dfca79b-f554-41e3-b7ca-c6694759debd">
                <property name="net.sf.jasperreports.export.headertoolbar.table.name" value=""/>
            </reportElement>
            <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" printOrder="Vertical">
                <datasetRun subDataset="dataset1" uuid="2f211526-7be4-45d9-a026-e542c773e07a">
                    <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{this_is_my_array_list})]]></dataSourceExpression>
                </datasetRun>
                <jr:listContents height="20" width="51">
                    <textField>
                        <reportElement x="0" y="0" width="51" height="20" uuid="db47b136-15c8-44aa-b694-d396043c2b82"/>
                        <textElement textAlignment="Center">
                            <font size="8"/>
                        </textElement>
                        <textFieldExpression><![CDATA[$P{this_is_my_constant_parameter_string}.toString())]]></textFieldExpression>
                    </textField>
                </jr:listContents>
            </jr:list>
        </componentElement>

1 个答案:

答案 0 :(得分:1)

放置在列表中的元素在列表使用的子数据集的上下文中进行评估(在您的情况下,名为 dataset1 的子数据集)。报告中定义的参数是主数据集的一部分,不会自动与子数据集共享。

如果需要在列表中显示报表参数,则必须在子数据集中定义参数,并将报表参数的值作为数据集运行的一部分传递给它。您可以对subdataset参数或其他名称使用相同的名称(如下所示)。

这样的事情:

<subDataset name="dataset1" uuid="1a45bd64-6c6a-4b66-a676-db452e27f7a6">
    <!-- subdataset parameter -->
    <parameter name="this_is_my_subdataset_parameter"/>
    ...
</subDataset>
<!-- report parameter -->
<parameter name="this_is_my_constant_parameter_string"/>
...
            <c:list>
                <!-- pass the value to the subdataset parameter -->
                <datasetRun subDataset="dataset1">
                    <datasetParameter name="this_is_my_subdataset_parameter">
                        <datasetParameterExpression><![CDATA[$P{this_is_my_constant_parameter_string}]]></datasetParameterExpression>
                    </datasetParameter>
                    ...
                </datasetRun>
                <c:listContents>
                        <textField>
                            <reportElement/>
                            <!-- use the subdataset parameter in the list -->
                            <textFieldExpression><![CDATA[$P{this_is_my_subdataset_parameter}]]></textFieldExpression>
                        </textField>
                        ...