2010-05-12 5 views
7

Je voudrais avoir une paire de TextFields en fonction d'une valeur. Et la valeur "y" doit être ajustée en fonction de l'espace vide.Comment utiliser un TextField conditionnel dans JasperReports?

Lorsque la valeur est "0", j'aimerais masquer TextField.

I.e. Je voudrais cacher la staticText et textField si le paramètre red est égal à "0" et ont les valeurs bleues déplacées vers le haut, dans le jrxml code ci-dessous:

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

Exemple de sortie:

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

Ces TextFields seront placés à la fin de mon rapport. Comment puis-je faire ceci?

Répondre

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

Vous pouvez utiliser iReport pour modifier cela avec une interface utilisateur agréable.

+1

Il ne fonctionne pas pour moi, je reçois cette erreur: ')' = valeur attendue (java.lang.Boolean) ($ {red == 0}); // $ JR_EXPR_ID = 12 $ – Jonas

+0

J'ai étendu ma question maintenant. Je ne sais pas si c'est possible dans JasperReports. – Jonas

+0

bien, ajoutez simplement le '' à d'autres champs, avec la condition appropriée – Bozho

1

De cette façon, non, je ne suis pas sûr que ce soit possible.

Il existe une option appelée Remove Link When Blank, mais elle ne fonctionne que si vous souhaitez supprimer toute la ligne. Ici, vous voulez supprimer une ligne dans une colonne spécifique.

Dans ce cas, je recommanderais d'utiliser la fonctionnalité crosstab ou CrossTables.

Donnez au groupe de la colonne la valeur de X. (en supposant que X est le numéro de colonne) et donner le groupe Row la valeur du champ de couleur, d'ici vous pouvez changer l'étiquette dynamique, quelque chose comme ceci:

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

vous pouvez utiliser comme cette

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

lors de l'impression

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

et activez l'option Blank lorsque nulle du champ à l'aide

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