2016-12-16 3 views
3

Ich habe einen Rahmen, ich benutze diesen Rahmen, um das Geschlecht anzuzeigen. Ich habe zwei textfields in diesem Rahmen hinzugefügt, einen, um Geschlecht Label anzuzeigen und andere, um Geschlecht Feldwert anzuzeigen. Wenn geschlechtsspezifische Felder leer sind, gibt Jasper eine leere Zeile zurück. Ich möchte diese leere Zeile entfernen.Wie Frame mit leeren TextFields entfernen?

<frame> 
      <reportElement key="govi" positionType="Float" stretchType="RelativeToTallestObject" x="124" y="154" width="403" height="17" isRemoveLineWhenBlank="true" isPrintWhenDetailOverflows="true" uuid="ff3e33f8-cc51-45c3-a3ed-513832d6e180"/> 
      <staticText> 
       <reportElement x="0" y="0" width="141" height="15" uuid="9700c67a-9385-4dd5-8626-23a8261bc2b5"/> 
       <text><![CDATA[Person with Disability ]]></text> 
      </staticText> 
      <textField isStretchWithOverflow="true"> 
       <reportElement positionType="Float" stretchType="RelativeToTallestObject" x="140" y="0" width="245" height="15" isPrintWhenDetailOverflows="true" uuid="69f221ef-ae6b-40c6-98fd-dec7b91a6269"/> 
       <textElement textAlignment="Justified"> 
        <font size="12" isBold="false"/> 
       </textElement> 
       <textFieldExpression><![CDATA[($F{is_pd} ? "Yes" : "No")]]></textFieldExpression> 
      </textField> 
     </frame> 
     <frame> 
      <reportElement key="genderField" positionType="Float" stretchType="RelativeToTallestObject" x="124" y="114" width="393" height="15" isPrintWhenDetailOverflows="true" uuid="464b5c89-e158-4783-8f21-7b05f567e55e"/> 
      <textField isStretchWithOverflow="true" isBlankWhenNull="true"> 
       <reportElement positionType="Float" stretchType="RelativeToTallestObject" x="0" y="0" width="104" height="15" isRemoveLineWhenBlank="true" uuid="0a77a60f-19ef-4634-84df-7a7f7f94ed14"/> 
       <textElement> 
        <font size="10" isBold="false"/> 
       </textElement> 
       <textFieldExpression><![CDATA[($F{country_id} != 1 ? "Gender" : null)]]></textFieldExpression> 
      </textField> 
      <textField isStretchWithOverflow="true" isBlankWhenNull="true"> 
       <reportElement positionType="Float" stretchType="RelativeToTallestObject" x="140" y="0" width="231" height="15" isRemoveLineWhenBlank="true" uuid="884fe0ef-654c-46e0-8399-d9fed8722a76"/> 
       <textElement> 
        <font size="12" isBold="false"/> 
       </textElement> 
       <textFieldExpression><![CDATA[($F{country_id} != 1 ? $F{gender} : null)]]></textFieldExpression> 
      </textField> 
     </frame> 
     <frame> 
      <reportElement key="govi" positionType="Float" stretchType="RelativeToTallestObject" x="124" y="134" width="402" height="17" isRemoveLineWhenBlank="true" isPrintWhenDetailOverflows="true" uuid="a4cbd87c-ea2d-4952-8bc4-0a7e6e655e28"/> 
      <staticText> 
       <reportElement x="0" y="0" width="69" height="15" uuid="e289c5be-91c4-4a74-b3d6-57c800401d0a"/> 
       <text><![CDATA[Category]]></text> 
      </staticText> 
      <textField isStretchWithOverflow="true"> 
       <reportElement positionType="Float" stretchType="RelativeToTallestObject" x="140" y="0" width="231" height="15" isRemoveLineWhenBlank="true" uuid="c01465ce-fb3d-47ba-9c29-bdfd7be7424f"/> 
       <textElement> 
        <font size="12" isBold="false"/> 
       </textElement> 
       <textFieldExpression><![CDATA[($F{category_id} == 1 ? "GEN" : ($F{category_id} == 2 ? "OBC" : ($F{category_id}==3 ? "SC" : "ST")))]]></textFieldExpression> 
      </textField> 
     </frame> 

I isRemoveLineWhenBlank="true" auf Rahmen aufgebracht haben, sowie zwei Textfeld wird isBlankWhenNull="true" auf beide noch ohne Erfolg die Textfelder angewendet. Fehle ich etwas?

Antwort

2

Es ist einfach Ihr Problem zu beheben - Sie isRemoveLineWhenBlank="true" zum ersten Textfield (mit ($F{country_id} != 1 ? "Gender" : null epxression) setzen sollen. In diesem Fall wird alles gut.

<textField isStretchWithOverflow="true" isBlankWhenNull="true"> 
    <reportElement positionType="Float" stretchType="RelativeToTallestObject" x="0" y="0" width="104" height="15" isRemoveLineWhenBlank="true"/> 
    <textElement> 
     <font size="10" isBold="false"/> 
    </textElement> 
    <textFieldExpression><![CDATA[($f{country_id} != 1 ? "Gender" : null)]]></textFieldExpression> 
</textField> 

ich modifizierte Vorlage für die Prüfung als

<?xml version="1.0" encoding="UTF-8"?> 
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Hide frame" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20"> 
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/> 
    <parameter name="country_id" class="java.lang.Integer"/> 
    <parameter name="gender" class="java.lang.String"/> 
    <title> 
     <band height="742"> 
      <textField> 
       <reportElement positionType="Float" x="0" y="30" width="430" height="15" /> 
       <textFieldExpression><![CDATA["First line"]]></textFieldExpression> 
      </textField> 
      <textField> 
       <reportElement positionType="Float" x="0" y="60" width="430" height="15" /> 
       <textFieldExpression><![CDATA["Third line"]]></textFieldExpression> 
      </textField> 
      <frame> 
       <reportElement key="genderField" positionType="Float" stretchType="RelativeToTallestObject" x="0" y="45" width="393" height="15" isRemoveLineWhenBlank="true" isPrintWhenDetailOverflows="true" /> 
       <textField isStretchWithOverflow="true" isBlankWhenNull="true"> 
        <reportElement positionType="Float" stretchType="RelativeToTallestObject" x="0" y="0" width="104" height="15" isRemoveLineWhenBlank="true" /> 
        <textElement> 
         <font size="10" isBold="false"/> 
        </textElement> 
        <textFieldExpression><![CDATA[($P{country_id} != 1 ? "Gender" : null)]]></textFieldExpression> 
       </textField> 
       <textField isStretchWithOverflow="true" isBlankWhenNull="true"> 
        <reportElement positionType="Float" stretchType="RelativeToTallestObject" x="140" y="0" width="231" height="15" isRemoveLineWhenBlank="true" /> 
        <textElement> 
         <font size="12" isBold="false"/> 
        </textElement> 
        <textFieldExpression><![CDATA[($P{country_id} != 1 ? $P{gender} : null)]]></textFieldExpression> 
       </textField> 
      </frame> 
     </band> 
    </title> 
</jasperReport> 

und es wirkt wie ein Zauber:

The result in preview mode in JSS

Sie erhalten das Ergebnis über beispielsweise Kombinationen von Parametern wie:

  • country_id = 1
  • gender = "M"

Falls dieser Werte verwendet:

  • country_id = 3
  • gender = "F"

wird die reslut sein:

Case of 3 rows

Sie können auch dieses Fragment, wie in diesem Beispiel vereinfachen:

<?xml version="1.0" encoding="UTF-8"?> 
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Hide frame" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20"> 
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/> 
    <parameter name="country_id" class="java.lang.Integer"/> 
    <parameter name="gender" class="java.lang.String"/> 
    <title> 
     <band height="742"> 
      <textField> 
       <reportElement positionType="Float" x="0" y="30" width="430" height="15" /> 
       <textFieldExpression><![CDATA["First line"]]></textFieldExpression> 
      </textField> 
      <textField> 
       <reportElement positionType="Float" x="0" y="60" width="430" height="15" /> 
       <textFieldExpression><![CDATA["Third line"]]></textFieldExpression> 
      </textField> 
      <frame> 
       <reportElement positionType="Float" x="0" y="45" width="430" height="15" isRemoveLineWhenBlank="true" > 
        <printWhenExpression><![CDATA[$P{country_id} != 1 && $P{gender} != null]]></printWhenExpression> 
       </reportElement> 
       <textField isBlankWhenNull="true"> 
        <reportElement x="0" y="0" width="100" height="15" /> 
        <textFieldExpression><![CDATA[$P{country_id} != 1 ? "Gender" : null]]></textFieldExpression> 
       </textField> 
       <textField isBlankWhenNull="true"> 
        <reportElement x="100" y="0" width="100" height="15" /> 
        <textFieldExpression><![CDATA[$P{country_id} != 1 ? $P{gender} : null]]></textFieldExpression> 
       </textField> 
      </frame> 
     </band> 
    </title> 
</jasperReport> 

die In diesem Beispiel verwendet isRemoveLineWhenBlank und printWhenExpression nur für Rahmenelement .

Es ist funktioniert genauso wie dieses Beispiel:

<?xml version="1.0" encoding="UTF-8"?> 
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Hide frame" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20"> 
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/> 
    <parameter name="country_id" class="java.lang.Integer"/> 
    <parameter name="gender" class="java.lang.String"/> 
    <title> 
     <band height="742"> 
      <textField> 
       <reportElement positionType="Float" x="0" y="30" width="430" height="15"/> 
       <textFieldExpression><![CDATA["First line"]]></textFieldExpression> 
      </textField> 
      <textField> 
       <reportElement positionType="Float" x="0" y="60" width="430" height="15"/> 
       <textFieldExpression><![CDATA["Third line"]]></textFieldExpression> 
      </textField> 
      <frame> 
       <reportElement positionType="Float" x="0" y="45" width="430" height="15" isRemoveLineWhenBlank="true"/> 
       <textField isBlankWhenNull="true"> 
        <reportElement x="0" y="0" width="100" height="15" isRemoveLineWhenBlank="true"/> 
        <textFieldExpression><![CDATA[$P{country_id} != 1 ? "Gender" : null]]></textFieldExpression> 
       </textField> 
       <textField isBlankWhenNull="true"> 
        <reportElement x="100" y="0" width="100" height="15" isRemoveLineWhenBlank="true"/> 
        <textFieldExpression><![CDATA[$P{country_id} != 1 ? $P{gender} : null]]></textFieldExpression> 
       </textField> 
      </frame> 
     </band> 
    </title> 
</jasperReport> 

Das Ergebnis wird das gleiche sein, zum Beispiel im Fall country_id == 1:

The result in preview mode in JSS

UPDATE

Sie haben vergessen,zu setzenfür Rahmen mit Geschlecht in Ihrem neuen Ausschnitt. Nachdem Sie dieses Problem behoben haben, funktioniert Ihr neues Beispiel auch in iReport 5.6.0. Ich ersetzte Felder mit Parametern für Testzwecke und ändere die Reihenfolge der Frames, um den Frame mit Geschlecht auszublenden.

Die jrxml Datei:

<?xml version="1.0" encoding="UTF-8"?> 
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Hide frame" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20"> 
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/> 
    <parameter name="country_id" class="java.lang.Integer"/> 
    <parameter name="gender" class="java.lang.String"/> 
    <parameter name="is_pd" class="java.lang.Boolean"> 
     <defaultValueExpression><![CDATA[true]]></defaultValueExpression> 
    </parameter> 
    <parameter name="category_id" class="java.lang.Integer"> 
     <defaultValueExpression><![CDATA[1]]></defaultValueExpression> 
    </parameter> 
    <title> 
     <band height="742"> 
      <frame> 
       <reportElement key="govi" positionType="Float" stretchType="RelativeToTallestObject" x="124" y="129" width="403" height="17" isRemoveLineWhenBlank="true" isPrintWhenDetailOverflows="true"/> 
       <staticText> 
        <reportElement x="0" y="0" width="141" height="15"/> 
        <text><![CDATA[Person with Disability ]]></text> 
       </staticText> 
       <textField isStretchWithOverflow="true"> 
        <reportElement positionType="Float" stretchType="RelativeToTallestObject" x="140" y="0" width="245" height="15" isPrintWhenDetailOverflows="true"/> 
        <textElement textAlignment="Justified"> 
         <font size="12" isBold="false"/> 
        </textElement> 
        <textFieldExpression><![CDATA[$P{is_pd} ? "Yes" : "No"]]></textFieldExpression> 
       </textField> 
      </frame> 
      <frame> 
       <reportElement key="genderField" positionType="Float" stretchType="RelativeToTallestObject" x="124" y="114" width="393" height="15" isRemoveLineWhenBlank="true" isPrintWhenDetailOverflows="true"/> 
       <textField isStretchWithOverflow="true" isBlankWhenNull="true"> 
        <reportElement positionType="Float" stretchType="RelativeToTallestObject" x="0" y="0" width="104" height="15" isRemoveLineWhenBlank="true"/> 
        <textElement> 
         <font size="10" isBold="false"/> 
        </textElement> 
        <textFieldExpression><![CDATA[($P{country_id} != 1 ? "Gender" : null)]]></textFieldExpression> 
       </textField> 
       <textField isStretchWithOverflow="true" isBlankWhenNull="true"> 
        <reportElement positionType="Float" stretchType="RelativeToTallestObject" x="140" y="0" width="231" height="15" isRemoveLineWhenBlank="true"/> 
        <textElement> 
         <font size="12" isBold="false"/> 
        </textElement> 
        <textFieldExpression><![CDATA[($P{country_id} != 1 ? $P{gender} : null)]]></textFieldExpression> 
       </textField> 
      </frame> 
      <frame> 
       <reportElement key="govi" positionType="Float" stretchType="RelativeToTallestObject" x="124" y="97" width="402" height="17" isRemoveLineWhenBlank="true" isPrintWhenDetailOverflows="true"/> 
       <staticText> 
        <reportElement x="0" y="0" width="69" height="15"/> 
        <text><![CDATA[Category]]></text> 
       </staticText> 
       <textField isStretchWithOverflow="true"> 
        <reportElement positionType="Float" stretchType="RelativeToTallestObject" x="140" y="0" width="231" height="15" isRemoveLineWhenBlank="true"/> 
        <textElement> 
         <font size="12" isBold="false"/> 
        </textElement> 
        <textFieldExpression><![CDATA[($P{category_id} == 1 ? "GEN" : ($P{category_id} == 2 ? "OBC" : ($P{category_id}==3 ? "SC" : "ST")))]]></textFieldExpression> 
       </textField> 
      </frame> 
     </band> 
    </title> 
</jasperReport> 

Das Design in iReport wie folgt aussieht:

Design in iReport

I Parameter wie folgt festgelegt:

  • country_id = 1
  • Geschlecht - leer
  • is_pd - Standardwert (= true)
  • category_id - Standardwert (= 1)

Der erzeugte Bericht für diese Parameter sieht wie aus:

Preview in iReport

Bei Verwendung dieses

gesetzt
  • country_id = 2
  • Geschlecht = "M"
  • is_pd - Standardwert (= true)
  • category_id - default Wert (= 1)

wird das Ergebnis sein:

Preview in iReport

+0

Thanx Kumpel, es morgen prüfen und wird Sie wissen lassen. – piechuckerr

+0

Funktioniert nicht, zeigt immer noch eine Leerzeile. Ich habe das betreffende Code-Snippet aktualisiert (Element hinzugefügt, das unser Element umschließt). PS: Ich benutze iReport 5.6.0 – piechuckerr

+0

'Nicht funktioniert' - Was meinst du? Hast du mein Beispiel in deiner Version überprüft? Funktioniert es? –

Verwandte Themen