JasperReports集合作为数据源?

时间:2011-06-16 18:54:45

标签: jasper-reports datasource

我正在尝试找出如何在JasperReports中使用字符串集合作为数据源。

我想我找到了解决方案,但我无法让这个工作起来,有人可以帮助我吗?

  1. 将特殊数据源设置为数据源JREmptyDatasource($ F {my_collection} .size())
    这将创建一个空数据集,其记录大小与集合相同。

  2. 将$ F {my_collection}作为参数传递给子数据集(使用List的数据集运行)。

  3. 要打印集合的当前元素:

  4. $ P {my_collection_param} .get($ V {REPORT_COUNT})

    <?xml version="1.0" encoding="UTF-8"?>
    <jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports   http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report1" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <subDataset name="dataset1">
        <parameter name="my_collection_param" class="java.util.Collection" isForPrompting="false">
            <defaultValueExpression><![CDATA[$P{my_collection}]]></defaultValueExpression>
        </parameter>
    </subDataset>
    <parameter name="my_collection" class="java.util.Collection">
        <defaultValueExpression><![CDATA["anna"]]></defaultValueExpression>
    </parameter>
    <field name="my_collection" class="java.util.Collection">
        <fieldDescription><![CDATA[]]></fieldDescription>
    </field>
    <background>
        <band splitType="Stretch"/>
    </background>
    <title>
        <band height="79" splitType="Stretch"/>
    </title>
    <pageHeader>
        <band height="35" splitType="Stretch"/>
    </pageHeader>
    <columnHeader>
        <band height="61" splitType="Stretch"/>
    </columnHeader>
    <detail>
        <band height="125" splitType="Stretch">
            <componentElement>
                <reportElement x="51" y="30" width="400" height="50"/>
                <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">
                        <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.JREmptyDataSource($F{my_collection}.size())]]></dataSourceExpression>
                    </datasetRun>
                    <jr:listContents height="50" width="0">
                        <textField>
                            <reportElement x="159" y="24" width="100" height="20"/>
                            <textElement/>
                            <textFieldExpression class="java.lang.String"><![CDATA[$P{my_collection_param}.get( $V{REPORT_COUNT} )]]></textFieldExpression>
                        </textField>
                    </jr:listContents>
                </jr:list>
            </componentElement>
        </band>
    </detail>
    <columnFooter>
        <band height="45" splitType="Stretch"/>
    </columnFooter>
    <pageFooter>
        <band height="54" splitType="Stretch"/>
    </pageFooter>
    <summary>
        <band height="42" splitType="Stretch"/>
    </summary>
    

1 个答案:

答案 0 :(得分:2)

我猜你使用JREmptyDataSource的黑客在定义上是好的,如果有效的话。

但如果你使用它,你会发现事情变得容易多了:

new net.sf.jasperreports.engine.data.JRMapCollectionDataSource($P{my_collection_param})