0

JasperReports/iReport 有一个非常烦人的错误。我最近从 3.6.1 版本升级到 4.5.1 版本,它仍然存在。

DataSource我有一份报告,它通过执行存储过程的 jdbc 从 MS SQL 服务器数据库中提取一些信息。问题是我得到的随机数据行只有一个值,如下所示:

ID    Name        Marketing_Preferences
1     John        Y
2     James       N
3     Daniel      Y
                  Y
4     Tim         N

我一遍又一遍地查看原始数据,执行此操作的行没有什么不同或特别之处。

相关的 iReport xml 定义为:

<field name="Marketing_Preferences" class="java.lang.String"/>

<staticText>
    <reportElement isPrintRepeatedValues="false" x="504" y="41" width="101" height="15" isPrintWhenDetailOverflows="true">
        <printWhenExpression><![CDATA[new Boolean( $V{PAGE_NUMBER}.intValue() == 1 )]]></printWhenExpression>
    </reportElement>
    <textElement>
        <font size="9"/>
    </textElement>
    <text><![CDATA[Marketing_Preferences]]></text>
</staticText>

<textField isBlankWhenNull="true">
    <reportElement x="504" y="3" width="101" height="15" isPrintWhenDetailOverflows="true"/>
    <textElement>
        <font size="8"/>
    </textElement>
    <textFieldExpression><![CDATA[$F{Marketing_Preferences}]]></textFieldExpression>
</textField>

通过反复试验并使用条件打印表达式,我发现双倍向上绑定到一个输出行,所以如果我告诉Marketing_Preferences不打印,ID = 3那么两个值都不会打印。

首先,有谁知道这会如何发生或为什么会发生?正如我所说,我已经多次检查原始数据,找不到任何原因,运行存储过程根本不会产生上述情况。

其次,有谁知道我可以解决它的方法吗?如果 iReport 认为它是一个列表,或者限制为每个结果仅一行,则可以通过某种方式告诉 iReport 不要打印下一个值。我不能使用“打印重复值”,因为这不会打印有效的重复值。

任何帮助表示赞赏!

4

1 回答 1

1

我认为这是因为你有你的Marketing_Preferences文本字段isPrintWhenDetailOverflows="true"

这是来自的 javadocJRElement

isPrintWhenDetailOverflows() 如果设置为 true,则如果带不适合当前页面,则元素将在下一页重新打印。

于 2012-06-01T01:05:49.390 回答