简体   繁体   中英

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.

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

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

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

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM