如何为不同的数据组着色行

时间:2016-05-30 08:33:03

标签: jasper-reports

我传递给 JasperReports 报告有序(ASC)对象列表。

每条记录都有一个可以重复的代码。

例如:

1 row 123 (123 is the code)
2 row 123
3 row 567
4 row 567
5 row 567
6 row 908
7 row 908

我需要具有相同代码的行具有相同的颜色。当代码改变时(例如,从2行到3),颜色也会改变。再次,从5到6行......等。只有两种颜色的交替是好的。

如何使用 JasperReports

进行此操作?

1 个答案:

答案 0 :(得分:2)

您可以使用 群组 条件样式 来解决您的任务。这两个功能在 JasperReports 中广泛使用。

它是如何工作的?

我们需要条件样式来根据代码(在您的情况下代码= {123,567,908} )更改行中文本的样式。正如我们从这个功能的名称中看到的 - 我们需要condtion!如果您的任务,我们可以利用 JasperReports 中的分组功能。 Group的表达式的理想候选者是来自任务的代码。通过代码创建组后,我们可以使用“组号”变量为我们的样式制作条件。

如果有 codeGroup 组,我们可以像这样创建变量:

<variable name="groupNo" class="java.lang.Integer" incrementType="Group" incrementGroup="codeGroup" calculation="Count">
    <variableExpression><![CDATA[1]]></variableExpression>
    <initialValueExpression><![CDATA[0]]></initialValueExpression>
</variable>

- 我们正在为我们的集团增加简单的计数器。代码 123 的所有记录的值将为 1 567 - 2 等等。

工作样本

数据源

csv 数据源对我们的示例非常有用。我会用这个:

num,code
1,123
2,123
3,567
4,567
5,567
6,908
7,908

我将在数据源适配器设置中跳过包含列名的第一行。

报告的模板

<?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="styles_conditional_for_groups" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="5edd462e-9135-43d5-a3d2-552c8663900a">
    <style name="commonStyle">
        <conditionalStyle>
            <conditionExpression><![CDATA[$V{groupNo} % 2 == 0]]></conditionExpression>
            <style mode="Opaque" backcolor="#FFAFAF"/>
        </conditionalStyle>
    </style>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <field name="num" class="java.lang.String"/>
    <field name="code" class="java.lang.String"/>
    <variable name="groupNo" class="java.lang.Integer" incrementType="Group" incrementGroup="codeGroup" calculation="Count">
        <variableExpression><![CDATA[1]]></variableExpression>
        <initialValueExpression><![CDATA[0]]></initialValueExpression>
    </variable>
    <group name="codeGroup">
        <groupExpression><![CDATA[$F{code}]]></groupExpression>
    </group>
    <columnHeader>
        <band height="20" splitType="Stretch">
            <staticText>
                <reportElement x="0" y="0" width="277" height="20" uuid="a40aec12-cff7-4a0e-a608-90ccc02b42df"/>
                <box>
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement textAlignment="Center">
                    <font isItalic="true"/>
                </textElement>
                <text><![CDATA[Number]]></text>
            </staticText>
            <staticText>
                <reportElement x="277" y="0" width="277" height="20" uuid="199f1eac-9ebd-47ff-a83f-a0c873531235"/>
                <box>
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement textAlignment="Center">
                    <font isItalic="true"/>
                </textElement>
                <text><![CDATA[Code]]></text>
            </staticText>
        </band>
    </columnHeader>
    <detail>
        <band height="20" splitType="Stretch">
            <textField>
                <reportElement style="commonStyle" x="0" y="0" width="277" height="20" uuid="b21d1d5f-6a26-461d-97e4-95e01ff8ae34"/>
                <box leftPadding="20">
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textFieldExpression><![CDATA[$F{num}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement style="commonStyle" x="277" y="0" width="277" height="20" uuid="4ffbd686-63bf-4d75-84d5-02379da445fe"/>
                <box leftPadding="20">
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textFieldExpression><![CDATA[$F{code}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>

我在这个模板中使用了几个简单的功能,如边框和对齐,以获得漂亮的视图。

结果

我喜欢 iReport 设计师,我借助预览模式制作了截图。

The preview in iReport

备注

如您所见,每一步都非常简单。不要忘记对数据进行排序以获取有效组的数据。

更多信息: