Ireport выражение IF Else

#ireport

#ireport

Вопрос:

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

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

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

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

Ответ №1:

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

Я думаю, вам лучше всего разделить это на два текстовых поля, одно строковое и одно двойное. Поместите их друг на друга, а затем используйте 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>
  

Комментарии:

1. привет, дженерикджон… спасибо за ответ, на самом деле это то, что я сделал в качестве обходного пути.. еще раз спасибо

Ответ №2:

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

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