有很多关于如何对报告的行进行斑马纹理的教程。像这样:
+-------+-------+
| Value | Color |
+-------+-------+
| A | white |
| A | black |
| B | white |
| B | black |
| B | white |
| C | black |
| D | white |
| D | black |
+-------+-------+
但我想要做的是分组剥离。像这样:
+-------+-------+
| Value | Color |
+-------+-------+
| A | white |
| A | white |
| B | black |
| B | black |
| B | black |
| C | white |
| D | black |
| D | black |
+-------+-------+
我使用“Value”列作为组的表达式,我的数据按“Value”排序。 “黑色”是组黑色时要打印的黑色矩形。 “白色”是没有黑色矩形。我想要一个变量,我可以放入黑色矩形的“打印表达式”。
到目前为止我一直在尝试:
我预计每次更改组时,$ V {print}的值都会更改为相反的值。我得到的是普通条纹列表(黑色,白色,黑色,白色......)
答案 0 :(得分:3)
您当前解决方案的问题是:
calculationType="Nothing"
Nothing :这是变量执行的默认计算类型。这意味着变量的值会在数据源中的每次迭代时重新计算,并且返回的值是通过简单地评估变量的表达式来获得的。
此类计算会使您的incrementType
无效,因此incrementType
无效,因为我们没有计算。这就是为什么你现在得到黑色,白色,黑色和白色。
这将达到您想要的效果
变量定义(允许每次组更改,总和或计数时,计算示例会增加1)
<variable name="GroupCnt" class="java.lang.Integer" incrementType="Group" incrementGroup="myGroup" calculation="Sum">
<variableExpression><![CDATA[1]]></variableExpression>
</variable>
conditionExpression (我们可以使用模数运算符变量GroupCnt
)
<conditionExpression><![CDATA[$V{GroupCnt}%2==0]]></conditionExpression>
完整jrxml的示例(我在此添加了一个矩形作为OP注释)
<?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="group" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="c1d9b4b7-6162-4b17-b871-3cf3b867d1ef">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<style name="myStyle">
<conditionalStyle>
<conditionExpression><![CDATA[new Boolean($V{GroupCnt}.intValue()%2==0)]]></conditionExpression>
<style mode="Opaque" forecolor="#FFFFFF" backcolor="#000000"/>
</conditionalStyle>
</style>
<field name="Value" class="java.lang.String"/>
<variable name="GroupCnt" class="java.lang.Integer" incrementType="Group" incrementGroup="myGroup" calculation="Sum">
<variableExpression><![CDATA[1]]></variableExpression>
</variable>
<group name="myGroup">
<groupExpression><![CDATA[$F{Value}]]></groupExpression>
</group>
<detail>
<band height="20" splitType="Stretch">
<textField>
<reportElement style="myStyle" x="0" y="0" width="150" height="20" uuid="7ca1ac35-6249-4ba6-ac87-031f8d410d2e"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$F{Value}]]></textFieldExpression>
</textField>
<rectangle>
<reportElement style="myStyle" x="150" y="0" width="150" height="20" uuid="d322e0df-0d39-4370-90e6-58305d449852"/>
</rectangle>
</band>
</detail>
</jasperReport>
new Boolean($V{GroupCnt}.intValue()%2==0)
,new Boolean
和intValue()
仅用于与最新版本中不需要的旧jasper报告版本兼容
<强>结果强>