2011-10-05 4 views
1

J'ai cette expression dans iReport .:Ireport IF Else Expression

($F{Q3_February}==0)?"-":$F{Q3_February} 

classe d'expression est Double, je veux que ce que les retours "-" si la valeur de $F{Q3_February} est 0.

je reçois « - » que si je le change à la classe d'expression String mais le problème est que si la valeur est fausse, il ne retourne pas une valeur de #,##0.00 %

Répondre

2

Votre problème est que le modèle de textField n'est pas appliquée si la classe d'expression n'est pas numérique. Vous essayez de modifier conditionnellement non seulement la valeur, mais aussi la classe. Ce n'est pas possible avec un seul textField.

Je pense que votre meilleur pari est de séparer cela en deux textFields, une chaîne et un double. Placez-les les uns sur les autres, puis utilisez printWhenExpression s pour masquer celui qui n'est pas voulu. Le résultat final sera similaire à celui d'un seul champ avec une expression conditionnelle, mais vous donnera plus de flexibilité avec les autres propriétés de l'élément (c'est-à-dire la classe et le modèle).

Exemple:

<textField pattern="#,##0.00 %"> 
    <reportElement x="200" y="80" width="100" height="20"> 
     <printWhenExpression> 
      <![CDATA[$F{Q3_February}!=0]]> 
     </printWhenExpression> 
    </reportElement> 
    <textFieldExpression class="java.lang.Double"> 
     <![CDATA[$F{Q3_February}]]> 
    </textFieldExpression> 
</textField> 
<textField> 
    <reportElement x="200" y="80" width="100" height="20"> 
     <printWhenExpression> 
      <![CDATA[$F{Q3_February}==0]]> 
     </printWhenExpression> 
    </reportElement> 
    <textFieldExpression class="java.lang.String"> 
     <![CDATA["-"]]> 
    </textFieldExpression> 
</textField> 
+0

salut genericjon ... merci pour la réponse est en fait ce que je l'ai fait en tant que solution .. merci encore – toink

0

Il y a quelques façons alternatives [à la suggestion de GenericJon pour résoudre ce]:

  1. Avec 4.1.1 il y a un champ sur des zones de texte appelé "Expression Pattern" il s'agit d'une option de formatage de champ
  2. Vous pouvez formater le champ avant qu'il ne soit ajouté à l'ensemble de données [non recommandé mais fonctionne]
  3. Enfin, vous pouvez appeler un scriptlet et transmettre les valeurs des champs dans la section de texte de la zone de texte.
[Define Scriptlet name="bob"] 
<textFieldExpression class="java.lang.String"> 
<!CDATA[$P{[bob]_SCRIPTLET}.formatValues(fields1:n..)]]></textFieldExpression>