如何分组?

时间:2016-03-23 12:46:08

标签: jasper-reports

我有以下情况:

我的数据库中的每一行都有一个GROUP LETTER(可以是用户选择的任何字母),如下所示:

   ROW1 - A 
   ROW2 - A
   ROW3 - F
   ROW4 - F
   ROW5 - K

因此,在上面的例子中,报告应该在COLUMN FOOTER中以COUNT显示DETAIL BAND和GROUPS LETTERS中的行,如下所示:

  IN DETAIL: 
     ROW1
     ROW2
     ROW3
     ROW4
     ROW5

   IN FOOTER BAND:
     A - 2
     F - 2
     K - 1

我该怎么做?

1 个答案:

答案 0 :(得分:2)

footer频段中,您可以包含一个子报告,这就是如何在子报告中完成分组。

<强> 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="subreport" pageWidth="555" pageHeight="842" columnWidth="555" leftMargin="0" rightMargin="0" topMargin="20" bottomMargin="20" uuid="c1d9b4b7-6162-4b17-b871-3cf3b867d1ef">
    <queryString>
        <![CDATA[]]>
    </queryString>
    <field name="row" class="java.lang.String"/>
    <field name="letter" class="java.lang.String"/>
    <variable name="letter_cnt" class="java.lang.Integer" resetType="Group" resetGroup="testGroup" calculation="Count">
        <variableExpression><![CDATA[$F{letter}]]></variableExpression>
        <initialValueExpression><![CDATA[0]]></initialValueExpression>
    </variable>
    <group name="testGroup">
        <groupExpression><![CDATA[$F{letter}]]></groupExpression>
        <groupHeader>
            <band height="20">
                <textField>
                    <reportElement x="0" y="0" width="100" height="20" uuid="f626bfda-d44c-491e-915b-d4b078e6f5cf"/>
                    <textFieldExpression><![CDATA[$F{letter}]]></textFieldExpression>
                </textField>
                <textField evaluationTime="Group" evaluationGroup="testGroup">
                    <reportElement x="100" y="0" width="100" height="20" uuid="6181956b-527f-4dca-8144-1846b4b8ef99"/>
                    <textFieldExpression><![CDATA[$V{letter_cnt}]]></textFieldExpression>
                </textField>
            </band>
        </groupHeader>
    </group>
</jasperReport>

输出给出

result

但是,您不能直接使用主报表数据源,因为它已在主报表detail中迭代,因此它是最后一次记录。

如果您使用连接来提供数据,我建议您直接查询以获得所需的结果(sumgroup by)。

如果您使用JRDataSource作为JRBeanCollectionDataSource,则可以使用以下命令重新初始化数据源:

new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{REPORT_DATA_SOURCE}.getData()) 

因此,这是传递给子报告的数据源