隐藏列时删除空格

时间:2012-08-25 10:48:07

标签: jasper-reports

我正在使用 JasperReports 4.5.0 来生成报告。我正在生成不同格式的报告,如html,csv,pdf,xls,doc。在我的一份报告中,我有6列说 col1,col2,col3,col4,col5,col6 。但根据条件我想隐藏 col4 。为此,我使用 printWhenExpression 。现在它根据条件隐藏了列,但问题是该列占用的空间保持不变。

如何删除 col3 col5 之间的空白区域?

以下代码用于了解我如何使用它。

<staticText>
                <reportElement x="500" y="0" width="0" height="20" isRemoveLineWhenBlank="true" isPrintWhenDetailOverflows="true">
                    <printWhenExpression><![CDATA[$P{routeType}==Boolean.FALSE]]></printWhenExpression>
                </reportElement>
                <box>
                    <topPen lineWidth="0.25"/>
                    <leftPen lineWidth="0.25"/>
                    <bottomPen lineWidth="0.25"/>
                </box>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font size="12" isBold="true"/>
                </textElement>
                <text><![CDATA[Col4]]></text>
            </staticText>

<textField isBlankWhenNull="true">
                <reportElement x="500" y="0" width="0" height="20" isRemoveLineWhenBlank="true" isPrintWhenDetailOverflows="true">
                    <printWhenExpression><![CDATA[$P{routeType}==Boolean.FALSE]]></printWhenExpression>
                </reportElement>
                <box>
                    <leftPen lineWidth="0.25"/>
                    <bottomPen lineWidth="0.25"/>
                </box>
                <textElement textAlignment="Center" verticalAlignment="Middle"/>
                <textFieldExpression><![CDATA[$F{col4}]]></textFieldExpression>
            </textField>

仅当routeType值为false时,才会打印此字段。否则,它也应删除具有空白空间的列。

2 个答案:

答案 0 :(得分:1)

  • 您可以使用 JasperReports API DynamicJasper API

Here is使用 DynamicJasper API

的示例
  • 您可以使用“假”字段( textField )来显示一列的数据,而不是显示两个字段(两列)

您可以在 textFields 下放置另一个 textField (宽度为两个 textFields )。使用 printWhenExpression 属性,您可以显示两列或一列。

以下是工作样本。

这是我的报告设计(在 iReport 中):

enter image description here

我的 jrxml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport ..>
    <parameter name="hideStreetColumn" class="java.lang.Boolean">
        <defaultValueExpression><![CDATA[false]]></defaultValueExpression>
    </parameter>
    <queryString>
        <![CDATA[SELECT id, street, city FROM address]]>
    </queryString>
    <field name="ID" class="java.lang.Integer"/>
    <field name="STREET" class="java.lang.String"/>
    <field name="CITY" class="java.lang.String"/>
    <title>
        <band height="79" splitType="Stretch">
            <staticText>
                <reportElement x="139" y="13" width="279" height="20"/>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font isBold="true" isItalic="true"/>
                </textElement>
                <text><![CDATA[Sample of hiding column]]></text>
            </staticText>
            <textField>
                <reportElement x="189" y="33" width="211" height="20"/>
                <box leftPadding="10"/>
                <textElement/>
                <textFieldExpression><![CDATA["To hide Street column: " + $P{hideStreetColumn}]]></textFieldExpression>
            </textField>
        </band>
    </title>
    <detail>
        <band height="20" splitType="Stretch">
            <textField>
                <reportElement x="100" y="0" width="200" height="20">
                    <printWhenExpression><![CDATA[$P{hideStreetColumn}]]></printWhenExpression>
                </reportElement>
                <box leftPadding="10">
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement/>
                <textFieldExpression><![CDATA[$F{CITY}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="0" y="0" width="100" height="20"/>
                <box leftPadding="10">
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement/>
                <textFieldExpression><![CDATA[$F{ID}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="100" y="0" width="100" height="20">
                    <printWhenExpression><![CDATA[!$P{hideStreetColumn}]]></printWhenExpression>
                </reportElement>
                <box leftPadding="10">
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement/>
                <textFieldExpression><![CDATA[$F{STREET}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="200" y="0" width="100" height="20">
                    <printWhenExpression><![CDATA[!$P{hideStreetColumn}]]></printWhenExpression>
                </reportElement>
                <box leftPadding="10">
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement/>
                <textFieldExpression><![CDATA[$F{CITY}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>

要显示所有三列,我们应将 hideStreetColumn 参数设置为 false 。结果将是:

All columns are visible

要仅显示两列(街道列隐藏),我们应将 hideStreetColumn 参数设置为 true 。结果将是:

The street column is hiding

答案 1 :(得分:0)

你可以用两个细节乐队来欺骗它。一个细节带B1具有6列,第二带B2具有5列。然后在带属性中,当printWhenExpression为false时打印B1,当printWhenExpression为true时打印B2。

相关问题