Comment faire pour effacer des lignes dans une table si une expression est valable dans iReport
J'ai une table dans iReport avec 3 champs (A, B, C). Je voudrais imprimer la ligne iff champ de C n'est pas nul. Par exemple, si j'ai 2 dossiers dans ma source de données:
-
A = premier, B = deuxième, C = troisième
-
A = haut, B = bas, C = NULL
la table doit avoir uniquement la première ligne.
J'ai essayé d'insérer cette expression dans chaque cellule (dans "Impression lors de l'expression" propriété):
!$F{C}.equals(null)
mais de cette façon, le résultat est que la deuxième ligne est vide (mais visible).
Edit: après la première réponse (maintenant effacé) les colonnes de la table sont quelque chose comme:
<jr:column ...>
<jr:columnHeader ...>
<staticText>
<reportElement .../>
<text><![CDATA[ID]]></text>
</staticText>
</jr:columnHeader>
<jr:detailCell ...>
<textField isBlankWhenNull="false">
<reportElement ... isRemoveLineWhenBlank="true">
<printWhenExpression><![CDATA[$F{ID}!=null]]></printWhenExpression>
</reportElement>
<textFieldExpression><![CDATA[$F{ID}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
<jr:column ...>
<jr:columnHeader ...>
<staticText>
<reportElement .../>
<text><![CDATA[CITY]]></text>
</staticText>
</jr:columnHeader>
<jr:detailCell ...>
<textField isBlankWhenNull="false">
<reportElement ... isRemoveLineWhenBlank="true">
<printWhenExpression><![CDATA[$F{ID}!=null]]></printWhenExpression>
</reportElement>
<textFieldExpression><![CDATA[$F{CITY}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
La source de données est un fichier xml. J'ai essayé également avec isBlankWhenNull="true"
mais pas de changement. Voici un screen du résultat:
- Vous pouvez poster la capture d'écran de ce rapport?
- Mis à jour.
- Ouais, c'est un problème. Quelqu'un a déjà posté le même cas jasperforge.org forum.
Vous devez vous connecter pour publier un commentaire.
Lorsque vous mettez l'impression lors de l'expression sur le terrain, le seul domaine sera supprimé. Par conséquent, l'espace restera. Mettre la même expression sur la bande de détail et d'essayer de nouveau.
Edit:
De regarder le problème de plus, j'ai remarqué il n'y a pas d'option pour ignorer des enregistrements (imprimé Lors de l'Expression) qu'au niveau des détails de l'élément de la table. Cette option n'existe pas, comme vous pouvez le voir dans iReport et aussi dans le définition de schéma. En outre, la raison
isBlankWhenNull="true"
n'est pas le travail, c'est parce que, même si le champ est vide, la ligne de détail monte encore la répartition de la hauteur. Aussi, le PrintWhenExpression vous avez essayé de modifier s'applique à l'ensemble de la table et non pas à la ligne. Donc, il ne semble pas comme il est possible de le faire de la façon dont vous espériez.Ici, je vais vous donner ces étapes pour résoudre votre problème:
((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("/root[c!='']")
Bonne Chance.
J'ai trouvé une autre solution à ce problème:
Pour le jeu de données utilisé pour le tableau, l'ajout d'un Filtre d'Expression, par exemple, $F{dateRemoved}==null.
De cette façon, les lignes vides seront supprimés.
Directement répondre au problème:
Aller seulement 1 pouce au-dessus et cochez l'option "Supprimer la Ligne Lors de la Vierge"
100% de travail