Как я могу использовать условное TextField в JasperReports? - PullRequest
8 голосов
/ 12 мая 2010

Я хотел бы иметь пару TextFields в зависимости от значения. И значение "y" должно быть скорректировано в зависимости от пустого пространства.

При значении "0" я хотел бы скрыть TextField.

т.е. Я хотел бы скрыть staticText и textField, если параметр red равен "0" и значения синего смещены вверх, в коде jrxml ниже:

  <staticText>
    <reportElement x="100" y="30" width="100" height="30"/>
    <text><![CDATA[Red items:]]></text>
  </staticText>
  <textField>
    <reportElement x="200" y="30" width="40" height="30"/>
    <textFieldExpression>
      <![CDATA[$P{red}]]>
    </textFieldExpression>
  </textField>

  <staticText>
    <reportElement x="100" y="60" width="100" height="30"/>
    <text><![CDATA[Blue items:]]></text>
  </staticText>
  <textField>
    <reportElement x="200" y="60" width="40" height="30"/>
    <textFieldExpression>
      <![CDATA[$P{blue}]]>
    </textFieldExpression>
  </textField>

Пример вывода:

//if blue = 3 and red = 2    if blue = 3 and red = 0    if blue = 0 and red = 2
    Red items: 2               Blue items: 3              Red items: 2
    Blue items: 3    

Эти текстовые поля будут размещены в конце моего отчета. Как я могу это сделать?

Ответы [ 3 ]

11 голосов
/ 12 мая 2010
<reportElement ...>
    <printWhenExpression><![CDATA[$P{red} == 0]]></printWhenExpression>
</reportElement>

Вы можете использовать iReport, чтобы изменить это с помощью приятного интерфейса.

1 голос
/ 13 мая 2010

Таким образом, нет, я не уверен, что это возможно.

Существует опция с именем Remove Link When Blank, но она работает только в том случае, если вы хотите удалить всю строку. Здесь вы хотите удалить одну строку в конкретном столбце.

В этом случае я бы рекомендовал использовать функцию crosstab или CrossTables.

Дайте группе столбцов значение X. (предположим, X - номер столбца) И дайте Row Group значение цветового поля, отсюда вы можете динамически изменять метку, примерно так:

$F{color}==null?"": ($F{color}.equals("RED")?"Red Items":"Blue Items")
0 голосов
/ 29 ноября 2013

вы можете использовать вот так

Declare RED as [class="java.lang.Number"]

при печати

$P{red}.intValue() == 0 ? null : $P{red}.intValue()

и включите пустое значение при нулевой опции поля, используя

textField isBlankWhenNull="true">               
<reportElement x="100" y="30" width="100" height="30" isRemoveLineWhenBlank="true"/>
...