2012-05-23 5 views
6

Ich habe eine Tabelle in iReport mit 3 Feldern (A, B, C). Ich würde die Zeile drucken, wenn Feld C nicht null ist. Zum Beispiel, wenn ich 2 Datensätze in meiner Datenquelle:So löschen Sie Zeilen in einer Tabelle, wenn ein Ausdruck in iReport gültig ist

  1. A = erster, B = zweite, C = dritte

  2. A = up, B = AB, C = NULL

Die Tabelle muss nur die erste Zeile enthalten.

habe ich versucht, in jeder Zelle dieser Ausdruck Einfügen (in „Print wenn Ausdruck“ Eigenschaften):

!$F{C}.equals(null) 

aber auf diese Weise das Ergebnis ist, dass die zweite Zeile leer ist (aber sichtbar).

Edit: nach der ersten Antwort (jetzt gelöscht) werden die Spalten in der Tabelle sind so etwas wie:

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

die Datenquelle eine XML-Datei ist. Ich habe es auch mit isBlankWhenNull="true" versucht aber ohne Änderung. Hier ein Bildschirm des Ergebnisses: tab

+0

Können Sie den Screenshot des resultierenden Berichts posten? –

+0

@AlexK Aktualisiert. – Baduel

+0

Ja, das ist ein Problem. Jemand hat bereits einen [gleichen Fall auf jasperforge.org] (http://jasperforge.org/plugins/espforum/view.php?group_id=102&forumid=103&topicid=91738) Forum gepostet. –

Antwort

1

Wenn Sie den Ausdruck bei Ausdruck auf das Feld setzen, wird nur das Feld entfernt. Daher wird der Raum bleiben. Setzen Sie den gleichen Ausdruck auf das Detailband und versuchen Sie es erneut.

Edit:

weiter auf das Problem der Suche, habe ich bemerkt, gibt es keine Option Datensätze wegzulassen (Print Wenn Expression) auf der Detailebene des Tabellenelements. Diese Option existiert nicht, wie Sie in iReport und auch in der schema definition sehen können. Außerdem funktioniert der Grund isBlankWhenNull="true" nicht, weil, obwohl das Textfeld leer ist, die Detailzeile immer noch die zugewiesene Höhe einnimmt. Die PrintWhenExpression, die Sie ändern wollten, gilt auch für die gesamte Tabelle und nicht für die Zeile. Es scheint also nicht möglich zu sein, so zu tun, wie du gehofft hast.

Hier werde ich Ihnen diese Schritte Ihr Problem zu lösen:

  1. Aktualisieren Sie die XPath-Abfrage ihrem Datensatz ausführen Eigenschaft (Rechtsklick> bearbeiten Tabelle Datenquelle aus der Tabelle Designer-Ansicht) so, dass die Datensätze in der C null werden weggelassen.
  2. Wählen Sie Ihr Sub-Dataset und wählen Sie "Datenquellen-Ausdruck verwenden" aus dem Menü "Verbindung/Datenquelle".
  3. Fügen Sie den folgenden Ausdruck:

((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("/root[c!='']")

Good Luck.

+0

Ich kann diesen Ausdruck im Detailband aus zwei Gründen nicht verwenden: 1) das Feld ist auf Detailbandebene nicht sichtbar (es ist in einem Unterdatensatz); 2) Auch wenn der Punkt 1 falsch ist, wenn ich den Ausdruck in das Detailband lege, dann wird die ganze Band (und so alle meine Tabelle) nicht sichtbar sein. – Baduel

+0

Hoppla, sry, ich habe nicht bemerkt, dass du einen Sub-Datensatz benutzt hast. Haben Sie überlegt, die Nullwerte in der Abfrage zu filtern? – user845279

+0

Nein, das XML-Format ist fest und wird von einem externen System erstellt. – Baduel

1

Ich fand eine andere Lösung für dieses Problem: Für die Datenmenge für die Tabelle, ein Filter Ausdruck, z. $ F {dateRemoved} == null.

Auf diese Weise werden die leeren Zeilen entfernt.