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