为什么不显示子报表中的饼图?

时间:2016-07-29 18:44:28

标签: jasper-reports subreport

iReport 5.6.0 工具的帮助下,我创建了一个主报告。然后我将子报告拖放到主报告的报告组带中。我已经定义了SQL查询并通过向导设置了键和值。之后我在子报表中添加了一个饼图。

当我单独运行子报表时,它可以使用提供的SQL查询正常运行。但是,当我使用带有Java代码的DynamicReports运行主报表时,似乎查询不起作用并返回空值。因此,不会显示任何图表。

我的方法中是否有任何缺失的步骤?我是否需要以某种方式将子报表查询结果映射/链接到主报表?

主报告jrxml:

 <?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="templatedesign2" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="575" leftMargin="10" rightMargin="10" topMargin="10" bottomMargin="10" uuid="8c9654e9-6770-46c4-a4d0-4bdf99195b70">
    <parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
        <defaultValueExpression><![CDATA["D:\\DynamicReports\\src\\subreport\\"]]></defaultValueExpression>
    </parameter>
    <field name="item" class="java.lang.String"/>
    <field name="reportTitle" class="java.lang.String"/>
    <field name="customerName" class="java.lang.String"/>
    <group name="Intro">
        <groupHeader>
            <band height="255">
                <subreport isUsingCache="false">
                    <reportElement x="0" y="160" width="575" height="77" uuid="eb90e8b6-2860-4c94-ad10-3eb5031502fc"/>
                    <subreportParameter name="SUBREPORT_DIR">
                        <subreportParameterExpression><![CDATA[$P{SUBREPORT_DIR}]]></subreportParameterExpression>
                    </subreportParameter>
                    <dataSourceExpression><![CDATA[$P{REPORT_DATA_SOURCE}]]></dataSourceExpression>
                    <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "templatereport2_subreport3.jasper"]]></subreportExpression>
                </subreport>
            </band>
        </groupHeader>
    </group>
</jasperReport>

子报告jrxml:

<?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="templatereport2_subreport3" pageWidth="555" pageHeight="802" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" isTitleNewPage="true" uuid="3dc0ebf2-660d-4d0c-af85-ccae1f01bdee">
    <parameter name="runCycleId" class="java.lang.String"/>
    <queryString>
        <![CDATA[SELECT
     count(status) AS count,
     case when status=TRUE then 'Succeeded'else 'Failed'end AS status
FROM
     "dbtable" dbtable
WHERE
     id = 157
GROUP BY
     status]]>
    </queryString>
    <field name="count" class="java.lang.Long"/>
    <field name="status" class="java.lang.String"/>
    <title>
        <band height="351" splitType="Stretch">
            <pie3DChart>
                <chart evaluationTime="Report">
                    <reportElement x="20" y="22" width="415" height="244" uuid="a43afa44-c4e5-4ad5-b06e-8922128bcdaf"/>
                    <chartTitle/>
                    <chartSubtitle/>
                    <chartLegend/>
                </chart>
                <pieDataset>
                    <keyExpression><![CDATA[$F{status}]]></keyExpression>
                    <valueExpression><![CDATA[$F{count}]]></valueExpression>
                </pieDataset>
                <pie3DPlot>
                    <plot/>
                    <itemLabel/>
                </pie3DPlot>
            </pie3DChart>
            <textField>
                <reportElement x="134" y="292" width="100" height="20" uuid="2726affe-1fef-45a1-abc8-8da8c9856e42"/>
                <textFieldExpression><![CDATA[$F{count}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="20" y="292" width="100" height="20" uuid="fa4e41c0-b4f4-443c-ab9e-3cf048a3f520"/>
                <textFieldExpression><![CDATA[$F{status}]]></textFieldExpression>
            </textField>
        </band>
    </title>
</jasperReport>

你能告诉我吗?

1 个答案:

答案 0 :(得分:1)

由于您在子报告中使用查询,因此您应该传递连接,而不是数据源。

<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>

在您的示例中

<subreport isUsingCache="false">
    reportElement x="0" y="160" width="575" height="77" uuid="eb90e8b6-2860-4c94-ad10-3eb5031502fc"/>
    <subreportParameter name="SUBREPORT_DIR">
        <subreportParameterExpression><![CDATA[$P{SUBREPORT_DIR}]]></subreportParameterExpression>
    </subreportParameter>
    <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
    <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "templatereport2_subreport3.jasper"]]></subreportExpression>
</subreport>