2011-10-05 273 views
1

我有這樣的表達:的iReport的iReport的if else表達

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

表達類是Double,我想這收益以 「 - 」 如果$F{Q3_February}0

我得到「 - 」只有當我將其更改爲表達類String但問題是,如果該值爲false它不返回是不適用您的問題文本框模式的#,##0.00 %

回答

2

值如果表達式類不是數字。你試圖有條件地改變價值,而且還要改變班級。對於單個文本字段這是不可能的。

我認爲你最好的選擇是把它分成兩個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> 
+0

喜genericjon ...感謝這其實是我所做的解決方法的反應..再次感謝 – toink

0

有一些替代方法[到GenericJon的建議來解決這個]:

  1. 4.1.1有一個名爲「模式表達式」在文本框中場它是一個基於字段的域 字段格式化選項
  2. 您可以在字段進入數據集之前對其進行格式化[不推薦,但有效]
  3. 最後,您可以調用一個scriptlet並傳入文本框文本部分的字段值。
[Define Scriptlet name="bob"] 
<textFieldExpression class="java.lang.String"> 
<!CDATA[$P{[bob]_SCRIPTLET}.formatValues(fields1:n..)]]></textFieldExpression>