JasperReports神秘的收获价值观

时间:2012-06-01 00:30:30

标签: java jasper-reports ireport

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

我有一个报告,通过执行存储过程的jdbc DataSource从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>

通过试验和错误并使用条件打印表达式,我发现double up与一个输出行相关联,因此如果我告诉Marketing_PreferencesID = 3时不打印,那么这两个值都没有将打印。

首先,是否有人知道这可能发生的原因或原因?正如我所说,我已多次检查原始数据,并且找不到任何原因,运行存储过程根本不会产生上述数据。

其次,有没有人知道我可以解决它的方法?某种方式告诉iReport不要打印下一个值,如果它认为它是一个列表,或者限制为每个结果只有一行。我不能使用'打印重复值',因此不会打印有效的重复值。

任何帮助表示赞赏!!!

1 个答案:

答案 0 :(得分:1)

我认为这是因为您有Marketing_Preferences文字字段isPrintWhenDetailOverflows="true"

这是来自JRElement

的javadoc
  

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