我有這樣的表達:的iReport的iReport的if else表達
($F{Q3_February}==0)?"-":$F{Q3_February}
表達類是Double
,我想這收益以 「 - 」 如果$F{Q3_February}
值0
。
我得到「 - 」只有當我將其更改爲表達類String
但問題是,如果該值爲false它不返回是不適用您的問題文本框模式的#,##0.00 %
我有這樣的表達:的iReport的iReport的if else表達
($F{Q3_February}==0)?"-":$F{Q3_February}
表達類是Double
,我想這收益以 「 - 」 如果$F{Q3_February}
值0
。
我得到「 - 」只有當我將其更改爲表達類String
但問題是,如果該值爲false它不返回是不適用您的問題文本框模式的#,##0.00 %
值如果表達式類不是數字。你試圖有條件地改變價值,而且還要改變班級。對於單個文本字段這是不可能的。
我認爲你最好的選擇是把它分成兩個textFields,一個字符串和一個double。將它們放在彼此頂部,然後使用printWhenExpression
s隱藏不需要的。最終結果與使用條件表達式的單個字段類似,但爲其他元素屬性(即類和模式)提供了更大的靈活性。
例子:
<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>
有一些替代方法[到GenericJon的建議來解決這個]:
[Define Scriptlet name="bob"] <textFieldExpression class="java.lang.String"> <!CDATA[$P{[bob]_SCRIPTLET}.formatValues(fields1:n..)]]></textFieldExpression>
喜genericjon ...感謝這其實是我所做的解決方法的反應..再次感謝 – toink