java iReport:如何在没有数据行的文本字段中隐藏包含不同类型数据的行

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/10117478/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-30 23:41:50  来源:igfitidea点击:

iReport: How to hide line with text fields without data line contains different kind of data

javajasper-reportsireport

提问by Sweety

I have null textfields (it contains string or bigdecimal value) put on single line pulled for my report which display a blank line.

我将空文本字段(它包含字符串或 bigdecimal 值)放在为我的报告拉出的单行上,其中显示一个空行。

In order to remove the blank line that has null rows I used the property isRemoveLineWhenBlankfor the report elements in that line. But that does not work.

为了删除具有空行的空行,我使用了isRemoveLineWhenBlank该行中报表元素的属性。但这不起作用。

Can someone help me with this please?

有人可以帮我吗?

snap: enter image description here

折断: 在此处输入图片说明

output snap: enter image description here

输出快照: 在此处输入图片说明

jrxml :

jrxml :

<?xml version="1.0" encoding="UTF-8"  ?>
<!-- Created with iReport - A designer for JasperReports -->
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport
         name="WEB_PREVIEW"
         columnCount="1"
         printOrder="Horizontal"
         orientation="Portrait"
         pageWidth="595"
         pageHeight="900"
         columnWidth="535"
         columnSpacing="0"
         leftMargin="30"
         rightMargin="30"
         topMargin="20"
         bottomMargin="20"
         whenNoDataType="NoPages"
         isTitleNewPage="false"
         isSummaryNewPage="false">
    <property name="ireport.scriptlethandling" value="0" />
    <property name="ireport.encoding" value="UTF-8" />
    <import value="java.util.*" />
    <import value="net.sf.jasperreports.engine.*" />
    <import value="net.sf.jasperreports.engine.data.*" />

    <parameter name="GROSS_RENTAL_INCOME_SQPA_LABEL" isForPrompting="false" class="java.lang.String"/>
    <parameter name="GROSS_RENTAL_INCOME_SQPA" isForPrompting="false" class="java.math.BigDecimal"/>
    <defaultValueExpression ><![CDATA["C:\Development_New\Cyprus\Cyprus\WebRoot\report\"]]></defaultValueExpression>
    </parameter>
    <background>
            <band height="0"  isSplitAllowed="true" >
            </band>
        </background>
        <title>
            <band height="0"  isSplitAllowed="true" >
            </band>
        </title>
        <pageHeader>
            <band height="32"  isSplitAllowed="true" >
                <textField isStretchWithOverflow="true" isBlankWhenNull="true" evaluationTime="Now" hyperlinkType="None"  hyperlinkTarget="Self" >
                    <reportElement
                        x="367"
                        y="105"
                        width="96"
                        height="12"
                        key="textField"
                        positionType="Float"
                        isRemoveLineWhenBlank="true">
                            <printWhenExpression><![CDATA[new Boolean($P{GROSS_RENTAL_INCOME_SQPA}!=null)]]></printWhenExpression>
                        </reportElement>
                    <box></box>
                    <textElement>
                        <font pdfFontName="Helvetica-Bold" size="8" isBold="true"/>
                    </textElement>
                <textFieldExpression   class="java.lang.String"><![CDATA[$P{GROSS_RENTAL_INCOME_SQPA_LABEL}]]></textFieldExpression>
                </textField>
                <textField isStretchWithOverflow="true" pattern="###,##0.00" isBlankWhenNull="true" evaluationTime="Now" hyperlinkType="None"  hyperlinkTarget="Self" >
                    <reportElement
                        x="472"
                        y="105"
                        width="48"
                        height="12"
                        key="textField"
                        positionType="Float"
                        isRemoveLineWhenBlank="true">
                            <printWhenExpression><![CDATA[new Boolean($P{GROSS_RENTAL_INCOME_SQPA}!=null)]]></printWhenExpression>
                        </reportElement>
                    <box></box>
                    <textElement>
                        <font size="8"/>
                    </textElement>
                <textFieldExpression   class="java.math.BigDecimal"><![CDATA[$P{GROSS_RENTAL_INCOME_SQPA}]]></textFieldExpression>
                </textField>
                </band>
        </detail>
        <columnFooter>
            <band height="0"  isSplitAllowed="true" >
            </band>
        </columnFooter>
        <pageFooter>
            <band height="0"  isSplitAllowed="true" >
            </band>
        </pageFooter>
        <summary>
            <band height="0"  isSplitAllowed="true" >
            </band>
        </summary>
</jasperReport>

采纳答案by Alex K

You can play the sample below to achieve the result you want.

您可以播放下面的示例以达到您想要的效果。

It's demonstrates how to hide the row with two textFieldelements (two columns) with help of frameelements (of course in cooperation with using isRemoveLineWhenBlankproperty as said in the question).

它演示了如何在框架元素的帮助下使用两个textField元素(两列)隐藏行(当然与问题中所述的使用isRemoveLineWhenBlank属性合作)。

The jrxmlfile code:

JRXML文件的代码:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport ... pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="0" bottomMargin="0">
    <parameter name="par1" class="java.lang.String">
        <defaultValueExpression><![CDATA[null]]></defaultValueExpression>
    </parameter>
    <parameter name="par2" class="java.lang.String">
        <defaultValueExpression><![CDATA[null]]></defaultValueExpression>
    </parameter>
    <parameter name="par3" class="java.lang.String">
        <defaultValueExpression><![CDATA[null]]></defaultValueExpression>
    </parameter>
    <parameter name="par4" class="java.lang.String">
        <defaultValueExpression><![CDATA[null]]></defaultValueExpression>
    </parameter>
    <title>
        <band height="139" splitType="Stretch">
            <line>
                <reportElement x="10" y="61" width="520" height="1"/>
            </line>
            <line>
                <reportElement x="10" y="127" width="520" height="1"/>
            </line>
            <textField isBlankWhenNull="true">
                <reportElement x="10" y="85" width="52" height="20" isRemoveLineWhenBlank="true"/>
                <box leftPadding="10">
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement/>
                <textFieldExpression><![CDATA[$P{par3} == null ? null : "P3: " + $P{par3}]]></textFieldExpression>
            </textField>
            <textField isBlankWhenNull="true">
                <reportElement x="10" y="65" width="52" height="20" isRemoveLineWhenBlank="true"/>
                <box leftPadding="10">
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement/>
                <textFieldExpression><![CDATA[$P{par1} == null ? null : "P1: " + $P{par1}]]></textFieldExpression>
            </textField>
            <textField isBlankWhenNull="true">
                <reportElement x="62" y="65" width="52" height="20" isRemoveLineWhenBlank="true"/>
                <box leftPadding="10">
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement/>
                <textFieldExpression><![CDATA[$P{par2} == null ? null : "P2: " + $P{par2}]]></textFieldExpression>
            </textField>
            <textField isBlankWhenNull="true">
                <reportElement x="62" y="85" width="52" height="20" isRemoveLineWhenBlank="true"/>
                <box leftPadding="10">
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement/>
                <textFieldExpression><![CDATA[$P{par4} == null ? null : "P4: " + $P{par4}]]></textFieldExpression>
            </textField>
            <frame>
                <reportElement x="331" y="65" width="52" height="54"/>
                <textField isBlankWhenNull="true">
                    <reportElement x="0" y="20" width="52" height="20" isRemoveLineWhenBlank="true"/>
                    <box leftPadding="10">
                        <topPen lineWidth="1.0"/>
                        <leftPen lineWidth="1.0"/>
                        <bottomPen lineWidth="1.0"/>
                        <rightPen lineWidth="1.0"/>
                    </box>
                    <textElement/>
                    <textFieldExpression><![CDATA[$P{par3} == null ? null : "P3: " + $P{par3}]]></textFieldExpression>
                </textField>
                <textField isBlankWhenNull="true">
                    <reportElement x="0" y="0" width="52" height="20" isRemoveLineWhenBlank="true"/>
                    <box leftPadding="10">
                        <topPen lineWidth="1.0"/>
                        <leftPen lineWidth="1.0"/>
                        <bottomPen lineWidth="1.0"/>
                        <rightPen lineWidth="1.0"/>
                    </box>
                    <textElement/>
                    <textFieldExpression><![CDATA[$P{par1} == null ? null : "P1: " + $P{par1}]]></textFieldExpression>
                </textField>
            </frame>
            <frame>
                <reportElement x="383" y="65" width="52" height="54"/>
                <textField isBlankWhenNull="true">
                    <reportElement x="0" y="0" width="52" height="20" isRemoveLineWhenBlank="true"/>
                    <box leftPadding="10">
                        <topPen lineWidth="1.0"/>
                        <leftPen lineWidth="1.0"/>
                        <bottomPen lineWidth="1.0"/>
                        <rightPen lineWidth="1.0"/>
                    </box>
                    <textElement/>
                    <textFieldExpression><![CDATA[$P{par2} == null ? null : "P2: " + $P{par2}]]></textFieldExpression>
                </textField>
                <textField isBlankWhenNull="true">
                    <reportElement x="0" y="20" width="52" height="20" isRemoveLineWhenBlank="true"/>
                    <box leftPadding="10">
                        <topPen lineWidth="1.0"/>
                        <leftPen lineWidth="1.0"/>
                        <bottomPen lineWidth="1.0"/>
                        <rightPen lineWidth="1.0"/>
                    </box>
                    <textElement/>
                    <textFieldExpression><![CDATA[$P{par4} == null ? null : "P4: " + $P{par4}]]></textFieldExpression>
                </textField>
            </frame>
            <textField isStretchWithOverflow="true">
                <reportElement x="16" y="0" width="115" height="51"/>
                <box topPadding="10" leftPadding="10" bottomPadding="10" rightPadding="10"/>
                <textElement>
                    <font isBold="true" isItalic="true"/>
                </textElement>
                <textFieldExpression><![CDATA["P1: " + $P{par1} + "\nP2: " +  $P{par2} + "\nP3: " +  $P{par3} + "\nP4: " +  $P{par4}]]></textFieldExpression>
            </textField>
        </band>
    </title>
</jasperReport>

The report's design in iReport: The design in iReport

iReport 中的报告设计: iReport 中的设计

The result for hiding the whole line: P1=null, P2=null, P3=3, P4=4

隐藏整行的结果: P1=空,P2=空,P3=3,P4=4

The result for hiding the only one field in first column, first row: P1=null, P2=2, P3=3, P4=4

隐藏第一列第一行中唯一一个字段的结果: P1=空,P2=2,P3=3,P4=4

回答by Alexander Apel

the solution are not frames.

解决方案不是框架。

Add a printWhenExpression to the textfield:

将 printWhenExpression 添加到文本字段:

<printWhenExpression><![CDATA[$P{par1}!=null]]></printWhenExpression></reportElement>

sample:

样本:

<textField isBlankWhenNull="true">
<reportElement x="719" y="0" width="52" height="11">
    <printWhenExpression><![CDATA[$P{par1}!=null]]></printWhenExpression>
</reportElement>
<box>
    <topPen lineWidth="1.0"/>
    <leftPen lineWidth="1.0"/>
    <bottomPen lineWidth="1.0"/>
    <rightPen lineWidth="1.0"/>
</box>
<textElement />
<textFieldExpression><![CDATA[$P{par1}]]></textFieldExpression>