【问题标题】:Jasper Reports, use a single label for the whole groupJasper Reports,对整个组使用单个标签
【发布时间】:2011-11-22 14:18:39
【问题描述】:

我必须使用 Jasper 报告库和 iReport 创建报告。 在报告中使用了数据分组。它应该以下面的方式显示:

g    a_line_in_the_group
r    a_line_in_the_group
o    a_line_in_the_group
u    a_line_in_the_group
p    a_line_in_the_group
1    a_line_in_the_group

g    a_line_in_the_group
r    a_line_in_the_group
o    a_line_in_the_group
u    a_line_in_the_group
p    a_line_in_the_group
2    a_line_in_the_group

所以一个组只有一个标签。数据是分组的,但是标签只显示在第一行,像这样:

group1    a_line_in_the_group
          a_line_in_the_group
          a_line_in_the_group

我已经为标签指定了属性stretch,但它没有帮助。

【问题讨论】:

  • 你把标签放在哪里了?
  • @Alex K - 在细节带上。

标签: jasper-reports ireport


【解决方案1】:

您可以将详细信息行放在组标签旁边...但您只能使用子报表来做到这一点。

在大多数情况下(我的意思是绝大多数情况下),将组标签显示在组标题中或仅显示在详细信息带中是最简单和最好的。在后一种情况下,它可以仅包含在组中的第一行或每一行中。 Alex K 的示例完美地展示了这些。

但是,如果您确实希望组标签显示在详细信息旁边,那么您将需要一个子报表。这是它在 iReport 中的外观示例:

预览时报告的呈现方式如下:

在我的示例中,我设置了组标签旋转。这在 PDF 中很棒,但在 HTML 中却不是很好。但这只是一个细节;你可以随心所欲地呈现该标签。

【讨论】:

    【解决方案2】:

  • 第一个变种
        <queryString>
            <![CDATA[SELECT
         DOCUMENTID AS POSITIONS_DOCUMENTID,
         POSITIONNO AS POSITIONS_POSITIONNO,
         PRODUCTID AS POSITIONS_PRODUCTID,
         QUANTITY AS POSITIONS_QUANTITY,
         PRICE AS POSITIONS_PRICE
    FROM
         POSITIONS order by PRODUCTID]]>
        </queryString>
        <field name="POSITIONS_DOCUMENTID" class="java.lang.Integer"/>
        <field name="POSITIONS_POSITIONNO" class="java.lang.Integer"/>
        <field name="POSITIONS_PRODUCTID" class="java.lang.Integer"/>
        <field name="POSITIONS_QUANTITY" class="java.lang.Integer"/>
        <field name="POSITIONS_PRICE" class="java.math.BigDecimal"/>
        <group name="productid">
            <groupExpression><![CDATA[$F{POSITIONS_PRODUCTID}]]></groupExpression>
            <groupHeader>
                <band height="21">
                    <textField>
                        <reportElement x="0" y="0" width="100" height="21"/>
                        <textElement/>
                        <textFieldExpression><![CDATA["Grouped by: " + $F{POSITIONS_PRODUCTID}]]></textFieldExpression>
                    </textField>
                </band>
            </groupHeader>
        </group>
        <detail>
            <band height="21" splitType="Stretch">
                <textField>
                    <reportElement x="136" y="0" width="100" height="21"/>
                    <textElement/>
                    <textFieldExpression><![CDATA[$F{POSITIONS_POSITIONNO}]]></textFieldExpression>
                </textField>
                <staticText>
                    <reportElement x="36" y="0" width="100" height="21"/>
                    <textElement/>
                    <text><![CDATA[Static text]]></text>
                </staticText>
            </band>
        </detail>
    

    结果将是:

  • 第二个变种
        <queryString>
            <![CDATA[SELECT
         DOCUMENTID AS POSITIONS_DOCUMENTID,
         POSITIONNO AS POSITIONS_POSITIONNO,
         PRODUCTID AS POSITIONS_PRODUCTID,
         QUANTITY AS POSITIONS_QUANTITY,
         PRICE AS POSITIONS_PRICE
    FROM
         POSITIONS order by PRODUCTID]]>
        </queryString>
        <field name="POSITIONS_DOCUMENTID" class="java.lang.Integer"/>
        <field name="POSITIONS_POSITIONNO" class="java.lang.Integer"/>
        <field name="POSITIONS_PRODUCTID" class="java.lang.Integer"/>
        <field name="POSITIONS_QUANTITY" class="java.lang.Integer"/>
        <field name="POSITIONS_PRICE" class="java.math.BigDecimal"/>
        <group name="productid">
            <groupExpression><![CDATA[$F{POSITIONS_PRODUCTID}]]></groupExpression>
            <groupHeader>
                <band height="21"/>
            </groupHeader>
        </group>
        <detail>
            <band height="21" splitType="Stretch">
                <textField>
                    <reportElement x="136" y="0" width="100" height="21"/>
                    <textElement/>
                    <textFieldExpression><![CDATA[$F{POSITIONS_POSITIONNO}]]></textFieldExpression>
                </textField>
                <textField isBlankWhenNull="true">
                    <reportElement x="36" y="1" width="100" height="20">
                        <printWhenExpression><![CDATA[$V{productid_COUNT}==1]]></printWhenExpression>
                    </reportElement>
                    <textElement/>
                    <textFieldExpression><![CDATA["Grouped by: " + $F{POSITIONS_PRODUCTID}]]></textFieldExpression>
                </textField>
            </band>
        </detail>
    

    结果将是:

  • 【讨论】:

    • 是的,我知道这种方式。但这不是理想的(和预期的)结果。有一个表,其中第一列是组名。所以每组只有一个单元格,而不是标题。
    • 是的,我也试过这个。如果找不到其他解决方案,它将保留为第二种方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多