Ireport IF Else Expression

时间:2011-10-05 07:01:58

标签: ireport

我在iReport中有这个表达式。:

($F{Q3_February}==0)?"-":$F{Q3_February}

表达式类为Double,如果$F{Q3_February}的值为0,我希望此返回为“ - ”。

只有当我将其更改为Expression class String时才会出现“ - ”但问题是如果值为false,则不会返回值#,##0.00 %

2 个答案:

答案 0 :(得分:2)

您的问题是,如果表达式类不是数字,则不应用textField模式。您试图有条件地改变价值,但也改变班级。单个textField无法实现这一点。

我认为你最好将它分成两个textFields,一个字符串和一个double。将它们放在彼此之上,然后使用printWhenExpression来隐藏不需要的那个。最终结果类似于具有条件表达式的单个字段,但是使用其他元素属性(即类和模式)可以更灵活。

示例:

<textField pattern="#,##0.00 %">
    <reportElement x="200" y="80" width="100" height="20">
        <printWhenExpression>
            <![CDATA[$F{Q3_February}!=0]]>
        </printWhenExpression>
    </reportElement>
    <textFieldExpression class="java.lang.Double">
        <![CDATA[$F{Q3_February}]]>
    </textFieldExpression>
</textField>
<textField>
    <reportElement x="200" y="80" width="100" height="20">
        <printWhenExpression>
            <![CDATA[$F{Q3_February}==0]]>
        </printWhenExpression>
    </reportElement>
    <textFieldExpression class="java.lang.String">
        <![CDATA["-"]]>
    </textFieldExpression>
</textField>

答案 1 :(得分:0)

有一些替代方法[对GenericJon的建议来解决这个问题]:

  1. 在4.1.1中,文本框上有一个名为“Pattern Expression”的字段,它是一个基于字段的字段 字段格式选项
  2. 您可以在字段进入数据集之前对其进行格式化[不推荐但可以正常工作]
  3. 最后,您可以调用scriptlet并传入文本框文本部分中字段的值。
  4. [Define Scriptlet name="bob"]
    <textFieldExpression class="java.lang.String">
    <!CDATA[$P{[bob]_SCRIPTLET}.formatValues(fields1:n..)]]></textFieldExpression>