0

让我描述一个情况:我有一个报表 A 和子报表 B 和 C。A 使用 B,B 使用 C。ASUBREPORT_DIR中的默认值是$P{CUSTOM_SUBREPORT_DIR}。在 A.jrxml 我看到:

<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
    <defaultValueExpression><![CDATA[$P{CUSTOM_SUBREPORT_DIR}]]></defaultValueExpression>
</parameter>
<parameter name="CUSTOM_SUBREPORT_DIR" class="java.lang.String">
    <defaultValueExpression><![CDATA[]]></defaultValueExpression>
</parameter>

我还需要一个适当的SUBREPORT_DIRin B 值,所以我使用 iReport (Subreport properties/Parameters) 传递了它,所以A.jrxml我有:

<subreportParameter name="SUBREPORT_DIR">
    <subreportParameterExpression><![CDATA[$P{SUBREPORT_DIR}]]></subreportParameterExpression>
</subreportParameter>

当我尝试生成报告时,AI 得到net.sf.jasperreports.engine.JRException: Incompatible java.lang.Integer value assigned to parameter SUBREPORT_DIR in the B dataset.

我确定这$P{SUBREPORT_DIR}不是整数,SUBREPORT_DIRB 子报表中的参数类型是字符串。我使用 iReport 4.0.2 制作的所有报告。

4

1 回答 1

0

您可以尝试以下方法(我这样做并且有效):

在报告 A 中定义参数:

<parameter name="SUBREPORT_B_DIR" class="java.lang.String" isForPrompting="false" />
<parameter name="SUBREPORT_C_DIR" class="java.lang.String" isForPrompting="false" />

在报表 A 中定义子报表 B。这里我从参数中为报表 B 使用 DataSource。此外,我使用子报表 C 目录向子报表 B 发送一个参数,并将另一个参数与报表 C 的 DataSource 一起发送。

<subreport>
    <reportElement x="0" y="16" width="583" height="10" />
    <subreportParameter name="SUBREPORT_C_DIR">
         <subreportParameterExpression><![CDATA[$P{SUBREPORT_C_DIR}]]></subreportParameterExpression>
    </subreportParameter>
    <subreportParameter name="SubReportCDataSource">
         <subreportParameterExpression><![CDATA[$P{SubReportCDataSource}]]></subreportParameterExpression>
    </subreportParameter>
    <dataSourceExpression><![CDATA[$P{SubReportBDataSource}]]></dataSourceExpression>
    <subreportExpression><![CDATA[$P{SUBREPORT_B_DIR} + "B.jasper"]]></subreportExpression>
</subreport>

最后,在子报表 B 中,定义子报表 C:

<subreport>
        <reportElement x="0" y="16" width="583" height="10" />
        <dataSourceExpression><![CDATA[$P{SubReportCDataSource}]]></dataSourceExpression>
        <subreportExpression><![CDATA[$P{SUBREPORT_C_DIR} + "C.jasper"]]></subreportExpression>
    </subreport>
于 2012-06-06T15:48:18.270 回答