1

我需要在详细带中创建子报表,我将主报表的相同数据源传递给子报表。我在进入子报告时面临的问题会增加不允许添加剩余子报告的索引计数器。

MainReport.jrxml

<group name="Account Summary">
    <groupHeader>
        <band height="100" splitType="Stretch">
            <printWhenExpression><![CDATA[$F{accountSummary.hasRepots}]]></printWhenExpression>
            <subreport isUsingCache="false">
                <reportElement x="28" y="0" width="540" height="100" isRemoveLineWhenBlank="true"/>
                <subreportParameter name="accountSummary">
                    <subreportParameterExpression><![CDATA[$F{accountSummary.hasRepots}]]></subreportParameterExpression>
                </subreportParameter>
                <dataSourceExpression><![CDATA[$P{REPORT_DATA_SOURCE}]]></dataSourceExpression>
                <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "SubReport.jasper"]]></subreportExpression>
            </subreport>
        </band>
    </groupHeader>
</group>

子报表.jrxml

<detail>
    <band height="100" splitType="Stretch">
        <subreport isUsingCache="false">
            <reportElement positionType="Float" x="0" y="0" width="540" height="100" isRemoveLineWhenBlank="true"/>
            <dataSourceExpression><![CDATA[$P{REPORT_DATA_SOURCE}]]></dataSourceExpression>
            <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + $F{subreportFileName}]]></subreportExpression>
        </subreport>
    </band>
</detail>

我从我的数据源传递 $F{subreportFileName},例如“SubSubReport.jrxml”,但它只显示第一个报告,我猜是由于我的索引计数器在我的子子报告中用完,所以我的子报告详细信息带没有去每个元素。

子报表.jrxml

<field name="chartData.label" class="java.lang.String"/>
<field name="chartData.value" class="java.lang.Float"/>
<field name="value1" class="java.lang.String"/>
<field name="value2" class="java.lang.String"/>
<field name="value3" class="java.lang.String"/>
<pageHeader>
    <band height="114" splitType="Stretch">
        <staticText>
            <reportElement style="lbl-light-golden" x="12" y="19" width="170" height="67"/>
            <textElement>
                <font size="26"/>
            </textElement>
            <text><![CDATA[Some Label]]></text>
        </staticText>
        <pieChart>
            <chart evaluationTime="Band">
                <reportElement x="272" y="0" width="268" height="114"/>
                <chartTitle/>
                <chartSubtitle/>
                <chartLegend position="Left"/>
            </chart>
            <pieDataset>
                <keyExpression><![CDATA[$F{chartData.label}]]></keyExpression>
                <valueExpression><![CDATA[$F{chartData.value}]]></valueExpression>
                <labelExpression><![CDATA[null]]></labelExpression>
            </pieDataset>
            <piePlot isShowLabels="false" isCircular="true">
                <plot/>
                <itemLabel/>
            </piePlot>
        </pieChart>
    </band>
</pageHeader>
<columnHeader>
    <band height="18" splitType="Stretch">
        <line>
            <reportElement x="0" y="1" width="540" height="1"/>
        </line>
        <staticText>
            <reportElement style="lbl-black-table-header" x="12" y="4" width="158" height="14"/>
            <textElement/>
            <text><![CDATA[Header 1]]></text>
        </staticText>
        <staticText>
            <reportElement style="lbl-black-table-header" x="205" y="4" width="199" height="14"/>
            <textElement textAlignment="Right"/>
            <text><![CDATA[Header 2]]></text>
        </staticText>
        <staticText>
            <reportElement style="lbl-black-table-header" x="445" y="4" width="74" height="13"/>
            <textElement textAlignment="Center"/>
            <text><![CDATA[Header 3]]></text>
        </staticText>
        <line>
            <reportElement x="0" y="17" width="540" height="1"/>
        </line>
    </band>
</columnHeader>
<detail>
    <band height="18" splitType="Stretch">
        <textField isStretchWithOverflow="true">
            <reportElement positionType="Float" x="12" y="1" width="158" height="16"/>
            <textElement/>
            <textFieldExpression><![CDATA[$F{value1}]]></textFieldExpression>
        </textField>
        <textField isStretchWithOverflow="true">
            <reportElement positionType="Float" x="205" y="1" width="199" height="16"/>
            <textElement textAlignment="Right">
                <font isStrikeThrough="false"/>
            </textElement>
            <textFieldExpression><![CDATA[$F{value2}]]></textFieldExpression>
        </textField>
        <textField isStretchWithOverflow="true">
            <reportElement positionType="Float" x="445" y="1" width="74" height="16"/>
            <textElement textAlignment="Right"/>
            <textFieldExpression><![CDATA[$F{value3}]]></textFieldExpression>
        </textField>
    </band>
</detail>

我还尝试在“SubReport.jrxml”中使用组而不是详细信息带,如下所示

子报表.jrxml

<group name="Sub report 1">
    <groupHeader>
        <band height="100" splitType="Stretch">
            <subreport isUsingCache="false">
                <reportElement positionType="Float" x="0" y="0" width="540" height="100" isRemoveLineWhenBlank="true"/>
                <dataSourceExpression><![CDATA[$P{REPORT_DATA_SOURCE}]]></dataSourceExpression>
                <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "SubSubReport.jasper"]]></subreportExpression>
            </subreport>
        </band>
    </groupHeader>
</group>
<group name="Sub report 2">
    <groupHeader>
        <band height="200" splitType="Stretch">
            <staticText>
                <reportElement x="110" y="10" width="100" height="20"/>
                <textElement/>
                <text><![CDATA[Sub report 2]]></text>
            </staticText>
            <subreport isUsingCache="false">
                <reportElement positionType="Float" x="0" y="40" width="540" height="100" isRemoveLineWhenBlank="true"/>
                <dataSourceExpression><![CDATA[$P{REPORT_DATA_SOURCE}]]></dataSourceExpression>
                <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "SubSubReport1.jasper"]]></subreportExpression>
            </subreport>
        </band>
    </groupHeader>
</group>

它打印“Sub Report 2”标签,但打印“SubSubReport1.jasper”没有成功

我在做什么错任何建议或任何可以提供帮助的方向。

4

1 回答 1

1

报表数据源绝不能用于提供子报表。REPORT_DATA_SOURCE 是一个可消耗对象的数据源。

这意味着它仅可用于馈送报告一次。因此,当主报表的每条记录都有自己的子报表(除非主报表中只有一条记录)时,参数技术不适合。我认为这可能是您只看到一个的原因。

于 2011-12-13T12:34:53.397 回答