Jonas
Jonas

Reputation: 129075

How can I use a conditional TextField in JasperReports?

I would like to have a pair of TextFields depending on a value. And the "y"-value should be adjusted depending on the empty space.

When the value is "0" I would like to hide the TextField.

I.e. I would like to hide the staticText and the textField if the parameter red is equal to "0" and have the blue values moved up, in the jrxml-code below:

  <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>

Example of output:

//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    

These TextFields will be placed at the end of my report. How can I do this?

Upvotes: 11

Views: 39986

Answers (3)

techGaurdian
techGaurdian

Reputation: 750

you can use like this

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

while printing

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

and enable Blank when null option of the field using

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

Upvotes: 0

Bozho
Bozho

Reputation: 597372

<reportElement ...>
    <printWhenExpression><![CDATA[$P{red} == 0]]></printWhenExpression>
</reportElement>

You can use iReport to modify this with a pleasant UI.

Upvotes: 15

mohdajami
mohdajami

Reputation: 9690

In this way, no, I'm not sure it's possible.

There is an option called Remove Link When Blank, but it only works if you want to remove the whole line. Here you want to remove one line in specific column.

In this case I would recommend using crosstab or CrossTables feature.

Give the Column Group the value of X. (supposing X is the column number) And give the Row Group the value of the color field, from here you can change the label dynamically, something like this:

$F{color}==null?"": ($F{color}.equals("RED")?"Red Items":"Blue Items")

Upvotes: 2

Related Questions