如何删除空textFields框架? [英] How to remove frame with empty textFields?

查看:167
本文介绍了如何删除空textFields框架?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个框架,我正在使用该框架来显示性别字段。我在该框架中添加了两个 textfields ,一个用于显示性别标签,另一个用于显示性别字段值。当性别字段为空时,Jasper呈现空行,我想删除此空行。

I have a frame, I am using that frame to display the gender field. I have added two textfields in that frame, one to display gender label and other to display gender field value. When gender fields are empty Jasper is rendering empty line, I want to remove this empty line.

<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应用于两个文本字段仍然没有成功。我错过了什么吗?

I have applied isRemoveLineWhenBlank="true" on frame as well as two textfield,isBlankWhenNull="true" is applied on both the textfields still no success. Am I missing something?

推荐答案

修复问题很简单 - 你应该设置 isRemoveLineWhenBlank =第一个 textField 的真实($ F {country_id}!= 1?性别:null epxression)。在这种情况下一切都会好的。

It is simple to fix your issue - you should set isRemoveLineWhenBlank="true" for the first textField (with ($F{country_id} != 1 ? "Gender" : null epxression). In this case everything will be fine.

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

它就像一个魅力:

您可以使用以下参数组合获得上述结果:

You get the result above for example using combinations of parameters like:


  • country_id = 1

  • gender =M

  • country_id=1
  • gender="M"

如果使用此值:


  • country_id = 3

  • gender =F

  • country_id=3
  • gender="F"

reslut将是:

您也可以在此示例中简化此片段:

You can also simplify this fragment as at this example:

<?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 仅用于框架元素。

In this sample the isRemoveLineWhenBlank and printWhenExpression used only for frame element.

它与此示例的工作原理相同:

It is works the same as this example:

<?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 will be the same, for example in case country_id == 1:

更新

UPDATE

您忘了设置 isRemoveLineWhenBlank =true用于新代码段中包含性别的框架。完成此修复后,您的新示例也适用于 iReport 5.6.0 。我用参数替换字段用于测试目的并更改帧的顺序以隐藏具有性别的帧。

You forgot to set isRemoveLineWhenBlank="true" for frame with gender in your new snippet. After making this fix your new sample also works well in iReport 5.6.0. I replaced fields with parameters for testing purpose and change the order of frames to hide the frame with gender.

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 中的设计如下:

我设置如下参数:


  • country_id = 1

  • 性别 - 空白

  • is_pd - 默认值(= true)

  • category_id - 默认值(= 1)

  • country_id = 1
  • gender - empty
  • is_pd - default value (= true)
  • category_id - default value (=1)

此参数生成的报告如下所示:

The generated report for this parameters looks like:

如果使用此套装


  • country_id = 2

  • 性别 =M

  • is_pd - 默认值(= true)

  • category_id - 默认值(= 1)

  • country_id = 2
  • gender = "M"
  • is_pd - default value (= true)
  • category_id - default value (=1)

结果将是:

这篇关于如何删除空textFields框架?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆