How can I use a conditional TextField in JasperRep

2019-02-09 14:19发布

问题:

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?

回答1:

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

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



回答2:

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


回答3:

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