我有一个框架,我正在使用该框架来显示性别字段。我在该框架中添加了两个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"
应用于两个文本字段仍然没有成功。我错过了什么吗?
答案 0 :(得分:2)
解决问题很简单 - 您应该为第一个 textField (isRemoveLineWhenBlank="true"
epxression)设置($F{country_id} != 1 ? "Gender" : null
。在这种情况下一切都会好的。
<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
:
<强> 更新 强>
您忘了在新代码段中为性别框架设置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>
iReport 中的设计如下所示:
我设置了这样的参数:
此参数的生成报告如下所示:
如果使用此套装
结果将是: