2016-12-16 3 views
3

У меня есть фрейм, я использую этот фрейм для отображения поля gender. Я добавил два textfields в этом фрейме, один для отображения гендерной метки и другой, чтобы отобразить значение поля пола. Когда пол поля пуст, Jasper возвращает пустую строку, я хочу удалить эту пустую строку.Как удалить рамку с пустыми текстовыми полями?

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

Я применил isRemoveLineWhenBlank="true" на раме, а также два текстовое поле, isBlankWhenNull="true" применяется на обоих текстовых полях все еще не увенчались успехом. Я что-то упускаю?

ответ

2

Это просто, чтобы решить проблему - вы должны установить isRemoveLineWhenBlank="true" для первого TextField($F{country_id} != 1 ? "Gender" : null epxression). В этом случае все будет хорошо.

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

Я изменил свой шаблон для проверки, как

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

и он работает как шарм:

The result in preview mode in JSS

Вы получаете результат выше, например, с использованием комбинации параметров, таких как:

  • COUNTRY_ID = 1
  • пол = "М"

В случае использования этого значения:

  • COUNTRY_ID = 3
  • пол = "F"

reslut будет:

Case of 3 rows

Кроме того, можно упростить этот фрагмент, как в этом примере:

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

В этом образце isRemoveLineWhenBlank и printWhenExpression используется только для рамного элемента ,

Это работает так же, как в этом примере:

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

Результат будет тот же, например, в случае country_id == 1:

The result in preview mode in JSS

UPDATE

Вы забыли установить isRemoveLineWhenBlank="true" для рамки с пол в вашем новом фрагменте. После этого исправить ваш новый образец также хорошо работает в iReport 5.6.0. Я заменил поля параметрами для целей тестирования и изменил порядок кадров, чтобы скрыть фрейм с полом.

jrxml файл:

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

Дизайн в иРепорт выглядит как:

Design in iReport

Я установить параметры, как это:

  • COUNTRY_ID = 1
  • пол - пустой
  • is_pd - значение по умолчанию (= истина)
  • category_id - значение по умолчанию (= 1)

Сгенерированный отчет для этого параметры выглядят так:

Preview in iReport

В случае с помощью этого набора

  • COUNTRY_ID = 2
  • пол = "M"
  • is_pd - значение по умолчанию (= TRUE)
  • category_id - по умолчанию (= 1)

результат будет:

Preview in iReport

+0

Thanx дружище, проверит его на завтра и дам вам знать. – piechuckerr

+0

Не работает, все еще показывает пустую строку. Я обновил фрагмент кода (добавленный элемент, который обертывает наш элемент). PS: Я использую iReport 5.6.0 – piechuckerr

+0

'Не работает' - Что значит? Вы проверили мой образец в своей версии? Это работает? –

Смежные вопросы