我传递给 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
进行此操作?答案 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 设计师,我借助预览模式制作了截图。
如您所见,每一步都非常简单。不要忘记对数据进行排序以获取有效组的数据。
更多信息: