在主报表中使用表数据集字段值

时间:2017-04-22 04:56:39

标签: jasper-reports

<?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="TestingImage" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" isIgnorePagination="true" uuid="5470e3fc-1c9c-4841-8814-e3a935fa6684"> <property name="ireport.zoom" value="1.0"/><property name="ireport.x" value="0"/><property name="ireport.y" value="229"/><style name="table"><box><pen lineWidth="1.0" lineColor="#000000"/></box></style><style name="table_TH" mode="Opaque" backcolor="#F0F8FF"><box><pen lineWidth="0.5" lineColor="#000000"/></box></style><style name="table_CH" mode="Opaque" backcolor="#BFE1FF"><box><pen lineWidth="0.5" lineColor="#000000"/></box></style><style name="table_TD" mode="Opaque" backcolor="#FFFFFF"><box><pen lineWidth="0.5" lineColor="#000000"/></box></style><style name="Table_TH" mode="Opaque" backcolor="#F0F8FF"><box><pen lineWidth="0.5" lineColor="#000000"/><topPen lineWidth="0.5" lineColor="#000000"/><leftPen lineWidth="0.5" lineColor="#000000"/><bottomPen lineWidth="0.5" lineColor="#000000"/<rightPen lineWidth="0.5" lineColor="#000000"/></box></style><style name="Table_CH" mode="Opaque" backcolor="#BFE1FF"><box><pen lineWidth="0.5" lineColor="#000000"/>
        <topPen lineWidth="0.5" lineColor="#000000"/>
        <leftPen lineWidth="0.5" lineColor="#000000"/>
        <bottomPen lineWidth="0.5" lineColor="#000000"/>
        <rightPen lineWidth="0.5" lineColor="#000000"/>
    </box>
</style>
<style name="Table_TD" mode="Opaque" backcolor="#FFFFFF">
    <box>
        <pen lineWidth="0.5" lineColor="#000000"/>
        <topPen lineWidth="0.5" lineColor="#000000"/>
        <leftPen lineWidth="0.5" lineColor="#000000"/>
        <bottomPen lineWidth="0.5" lineColor="#000000"/>
        <rightPen lineWidth="0.5" lineColor="#000000"/>
    </box>
</style>
<subDataset name="ImageDemoDataset" uuid="47414685-b792-4a30-9b14-fc32127ad3cc">
    <parameter name="lastname" class="java.lang.String">
        <defaultValueExpression><![CDATA[$F{picture}]]></defaultValueExpression>
    </parameter>
    <parameter name="firstname" class="java.lang.String">
        <defaultValueExpression><![CDATA[$F{firstname}]]></defaultValueExpression>
    </parameter>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <field name="firstname" class="java.lang.String"/>
    <field name="lastname" class="java.lang.String"/>
    <field name="email" class="java.lang.String"/>
    <field name="phone_number" class="java.lang.String"/>
    <field name="picture" class="java.lang.String"/>
    <variable name="imagePath" class="java.lang.String" resetType="None">
        <variableExpression><![CDATA[$F{picture}]]></variableExpression>
    </variable>
</subDataset>
<parameter name="ImageDataSource" class="net.sf.jasperreports.engine.data.JRBeanCollectionDataSource"/>
<queryString>
    <![CDATA[]]>
</queryString>
<variable name="varImage" class="java.lang.String" resetType="None"/>
<detail>
    <band height="364" splitType="Stretch">
        <componentElement>
            <reportElement x="18" y="0" width="474" height="216" uuid="771aa5d8-1470-4fd9-b062-a913b6014f19">
                <property name="net.sf.jasperreports.export.headertoolbar.table.name" value=""/>
            </reportElement>
            <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" whenNoDataType="AllSectionsNoDetail">
                <datasetRun subDataset="ImageDemoDataset" uuid="c4a063af-d8d1-41c4-98bf-660a9eab651e">
                    <dataSourceExpression><![CDATA[$P{ImageDataSource}]]></dataSourceExpression>
                    <returnValue fromVariable="imagePath" toVariable="varImage"/>
                </datasetRun>
                <jr:column width="70" uuid="6aa96500-79ab-4b8b-aa5f-0c9dbc22638f">
                    <jr:detailCell height="30" rowSpan="1">
                        <textField>
                            <reportElement x="0" y="0" width="70" height="30" uuid="9528bbd1-627c-424c-a3f0-872f92799c94"/>
                            <textFieldExpression><![CDATA[$F{firstname}]]></textFieldExpression>
                        </textField>
                    </jr:detailCell>
                </jr:column>
                <jr:column width="90" uuid="ba88fb55-d423-4d1e-99a1-b81c44f6e65a">
                    <jr:detailCell height="30" rowSpan="1">
                        <textField>
                            <reportElement x="0" y="0" width="90" height="30" uuid="5c85fd56-54ba-4d22-a3e4-adcdbbbc2b4f"/>
                            <textElement>
                                <font size="8"/>
                            </textElement>
                            <textFieldExpression><![CDATA[$F{lastname} ]]></textFieldExpression>
                        </textField>
                    </jr:detailCell>
                </jr:column>
                <jr:column width="100" uuid="29524685-b68a-4906-be22-50b0acacba7d">
                    <jr:detailCell height="30" rowSpan="1">
                        <textField>
                            <reportElement x="0" y="0" width="100" height="30" uuid="9dacce68-21ca-4bcc-b9cb-bad1b3661611"/>
                            <textFieldExpression><![CDATA[$F{email}]]></textFieldExpression>
                        </textField>
                    </jr:detailCell>
                </jr:column>
                <jr:column width="94" uuid="4bb9635f-4173-4c5b-95ce-5a12a2332ea1">
                    <jr:detailCell height="30" rowSpan="1">
                        <textField>
                            <reportElement x="0" y="0" width="94" height="30" uuid="8c6c58b1-d3fd-4fad-995a-caaaea6afe8e"/>
                            <textFieldExpression><![CDATA[$F{phone_number}]]></textFieldExpression>
                        </textField>
                    </jr:detailCell>
                </jr:column>
                <jr:column width="100" uuid="b500de9f-6abf-41b8-9e5d-d408b94d32ce">
                    <jr:detailCell height="30" rowSpan="1">
                        <textField>
                            <reportElement x="0" y="0" width="100" height="30" uuid="0e6a1e56-974f-41a3-af08-0cf5b832b573"/>
                            <textFieldExpression><![CDATA[$F{picture}]]></textFieldExpression>
                        </textField>
                    </jr:detailCell>
                </jr:column>
            </jr:table>
        </componentElement>
        <image scaleImage="FillFrame" hAlign="Center" vAlign="Middle">
            <reportElement x="48" y="266" width="100" height="98" uuid="290e1eb9-3a18-4a65-93d4-d155b98ce964">
                <printWhenExpression><![CDATA[!$V{varImage}.equalsIgnoreCase("null")]]></printWhenExpression>
            </reportElement>
            <imageExpression><![CDATA["C:\\Users\\jigpra\\Pictures\\"+$V{varImage}]]></imageExpression>
        </image>
        <staticText>
            <reportElement x="48" y="231" width="100" height="20" uuid="32fd136d-d7c4-4256-be6c-e9ad7d5f7592"/>
            <textElement>
                <font size="12"/>
            </textElement>
            <text><![CDATA[$V{varImage}]]></text>
        </staticText>
    </band>
</detail>

我想在主报表中使用表数据集字段/参数。我在表格中添加了收集数据以显示此数据我有一个值是每列的图像。我想获得该图像名称(当前在集合数据集中我传递图像的名称)。

如何在主报告中检索图片字段名称?

1 个答案:

答案 0 :(得分:0)

您没有看到图片,因为它没有合适的Evaluation Time - 在您的情况下需要Band

staticText不支持此类设置,您需要将其转换为textField并为Evaluation Time属性设置相同。

但即使有上述建议,您仍会看到ImageDemoDataset subDataset的最后一个值。如果那就是你想要的就好了。

但是如果要为subDataset中的每条记录显示图像,则必须在表格内进行。如果间距是问题,您可以创建columnGroup并将图像放在groupFooter中,将其隔离在主数据下方。

编辑:看起来你想要的实际上更简单,不应该涉及变量。您只需要重复相同的数据源。 这可以通过两种方式完成:

(1)。使用原始ImageDataSource参数:

<parameter name="ImageDataSource" class="net.sf.jasperreports.engine.data.JRBeanCollectionDataSource"/>

将table datasetRun的表达式如下所示:

<dataSourceExpression><![CDATA[$P{ImageDataSource}.cloneDataSource()]]></dataSourceExpression>

然后在表下创建一个列表组件,使用与表和初始数据源表达式相同的subDataset

<dataSourceExpression><![CDATA[$P{ImageDataSource}]]></dataSourceExpression>

并在列表组件属性的“列表”标签中将其Print Order设置为Horizontal。确保您还指定Cell Width足够小,以允许重复项目水平流动。

克隆表的dataSource将确保表不会耗尽它,这样列表组件仍然可以迭代它。

(2)。不是将JRBeanCollectionDataSource作为参数传递,而是仅传递您创建它的集合,并为其提供参数。这样您就不再需要克隆dataSource了:

<parameter name="ImageCollection" class="java.util.Collection"/>

然后让table datasetRun的表达式如下:

<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{ImageCollection})]]></dataSourceExpression>

然后创建一个列表,其中包含您用于表格的subDataset,并使用上面的dataSourceExpression。您应该以与(1)中相同的方式设置列表。