IReport IF Else Expression

У меня есть это выражение в iReport.:

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

Класс выражения — Double, я хочу, чтобы он возвращался как «-», если значение $F{Q3_February} равно 0.

Я получаю «-», только если я меняю его на класс выражения String, но проблема в том, что если значение ложно, оно не возвращает значение #,##0.00 %


person toink    schedule 05.10.2011    source источник


Ответы (2)


Ваша проблема в том, что шаблон textField не применяется, если класс выражения не является числовым. Вы пытаетесь условно изменить не только значение, но и класс. Это невозможно с одним текстовым полем.

Я думаю, что вам лучше всего разделить это на два текстовых поля, одно строковое и одно двойное. Поместите их друг на друга, а затем используйте printWhenExpressions, чтобы скрыть тот, который не нужен. Конечный результат будет похож на наличие одного поля с условным выражением, но даст вам больше гибкости в отношении других свойств элемента (например, класса и шаблона).

Пример:

<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>
person GenericJon    schedule 05.10.2011
comment
привет genericjon ... спасибо за ответ это на самом деле то, что я сделал в качестве обходного пути ... еще раз спасибо - person toink; 27.10.2011

Есть несколько альтернативных способов [к предложению GenericJon решить эту проблему]:

  1. В версии 4.1.1 в текстовых полях есть поле под названием «Выражение шаблона», это параметр форматирования поля на основе поля.
  2. Вы можете отформатировать поле до того, как оно войдет в набор данных [не рекомендуется, но работает]
  3. Наконец, вы можете вызвать скриптлет и передать значения полей в текстовом разделе текстового поля.
[Define Scriptlet name="bob"]
<textFieldExpression class="java.lang.String">
<!CDATA[$P{[bob]_SCRIPTLET}.formatValues(fields1:n..)]]></textFieldExpression>
person monksy    schedule 05.10.2011