Это просто, чтобы решить проблему - вы должны установить 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>
и он работает как шарм:
Вы получаете результат выше, например, с использованием комбинации параметров, таких как:
В случае использования этого значения:
reslut будет:
Кроме того, можно упростить этот фрагмент, как в этом примере:
<?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
:
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>
Дизайн в иРепорт выглядит как:
Я установить параметры, как это:
- COUNTRY_ID = 1
- пол - пустой
- is_pd - значение по умолчанию (= истина)
- category_id - значение по умолчанию (= 1)
Сгенерированный отчет для этого параметры выглядят так:
В случае с помощью этого набора
- COUNTRY_ID = 2
- пол = "M"
- is_pd - значение по умолчанию (= TRUE)
- category_id - по умолчанию (= 1)
результат будет:
Thanx дружище, проверит его на завтра и дам вам знать. – piechuckerr
Не работает, все еще показывает пустую строку. Я обновил фрагмент кода (добавленный элемент, который обертывает наш элемент). PS: Я использую iReport 5.6.0 – piechuckerr
'Не работает' - Что значит? Вы проверили мой образец в своей версии? Это работает? –