如何在特定方案中对 ireport 交叉表中的列进行排序
how to sort columns in ireport crosstab in a specific scheme
下图显示了我在 ireport 中的交叉表:
我想按特定顺序对我的列进行排序,知道在交叉表数据中,我放置了具有以下属性的对象列表 List<ChampEtatAteliers>
:
public class ChampEtatAteliers {
private String numero;
private String denominationFr;
private String etatEntreeSortie;
public ChampEtatAteliers(String numero, String denominationFr, String etatEntreeSortie) {
this.numero = numero;
this.denominationFr = denominationFr;
this.etatEntreeSortie = etatEntreeSortie;
}
}
列显示etatEntreeSortie
,行显示denominationFr
,numero
用于交叉表中的计数
String rapportLien = "/SituationEquipement.jasper";
Map parametres = new HashMap();
JRBeanCollectionDataSource data = new JRBeanCollectionDataSource(atelierses);
in java 我将这些对象放在列表 atelierses
List<ChampEtatAteliers>
中,所以有什么方法可以对列表或交叉表报告中的列进行排序,我的 xml ireport上的代码如下:
<columnGroup name="nbreVehicule" height="66">
<bucket order="Descending" class="java.lang.String">
<bucketExpression><![CDATA[$F{nbreVehicule}]]></bucketExpression>
<orderByExpression><![CDATA[$V{MyOrderByField_measure}]]></orderByExpression>
</bucket>
<crosstabColumnHeader>
<cellContents backcolor="#F0F8FF" mode="Opaque">
<textField>
<reportElement style="Crosstab Data Text" x="0" y="0" width="85" height="66" uuid="2109b261-1b20-493a-b664-ce59731c4a20"/>
<box topPadding="1" leftPadding="1" bottomPadding="1" rightPadding="1"/>
<textElement>
<font isBold="true"/>
</textElement>
<textFieldExpression><![CDATA[$V{nbreVehicule}]]></textFieldExpression>
</textField>
</cellContents>
</crosstabColumnHeader>
<crosstabTotalColumnHeader>
<cellContents/>
</crosstabTotalColumnHeader>
</columnGroup>
<measure name="MyOrderByField_measure" class="java.lang.Integer" calculation="Nothing" >
<measureExpression><![CDATA[$F{myOrderByField}]]></measureExpression>
</measure>
在 jasper 报告中,通过设置 order
属性,交叉表 columnGroup
可以按 升序 或 降序 排序在 bucket
例子
<columnGroup name="GROUP" height="16" headerPosition="Center">
<bucket order="Descending" class="java.lang.String">
<bucketExpression><![CDATA[$F{MyField}]]></bucketExpression>
</bucket>
.....
</columnGroup>
如果您需要用户定义的订单,您应该使用orderByExpression
根据您喜欢的订单定义衡量标准
<measure name="myOrderByField_measure" class="java.lang.Integer" calculation="First">
<measureExpression><![CDATA[$F{myOrderByField}]]></measureExpression>
</measure>
使用orderByExpression
中的度量
<columnGroup name="GROUP" height="16" headerPosition="Center">
<bucket class="java.lang.String">
<bucketExpression><![CDATA[$F{myField}]]></bucketExpression>
<orderByExpression><![CDATA[$V{myOrderByField_measure}]]></orderByExpression>
</bucket>
.....
</columnGroup>
在您的示例中,这可以通过在 ChampEtatAteliers
class 示例 private int myOrderByField;
中引入一个新字段然后根据需要通过代码设置来实现。
另一个解决方案,将return一个自己的对象(class)作为MyField
并实现Comparable,生成所需的订单。
编辑: 解决方法,OP 无法使 orderByExpression
正常工作。
由于 myOrderByField
对于 nbreVehicule
是唯一的(一对一相关),他可以在 bucketExpression
中使用 myOrderByField
<measure name="nbreVehicule_measure" class="java.lang.String">
<measureExpression><![CDATA[$F{nbreVehicule}]]></measureExpression>
</measure>
<columnGroup name="nbreVehicule" height="66">
<bucket class="java.lang.Integer">
<bucketExpression><![CDATA[$F{myOrderByField}]]></bucketExpression>
</bucket>
....
<textFieldExpression><![CDATA[$V{nbreVehicule_measure}]]></textFieldExpression>
.....
</columnGroup>
因此 bucketExpression
不需要与 crosstabColumnHeader
中显示的文本相同
下图显示了我在 ireport 中的交叉表:
我想按特定顺序对我的列进行排序,知道在交叉表数据中,我放置了具有以下属性的对象列表 List<ChampEtatAteliers>
:
public class ChampEtatAteliers {
private String numero;
private String denominationFr;
private String etatEntreeSortie;
public ChampEtatAteliers(String numero, String denominationFr, String etatEntreeSortie) {
this.numero = numero;
this.denominationFr = denominationFr;
this.etatEntreeSortie = etatEntreeSortie;
}
}
列显示etatEntreeSortie
,行显示denominationFr
,numero
用于交叉表中的计数
String rapportLien = "/SituationEquipement.jasper";
Map parametres = new HashMap();
JRBeanCollectionDataSource data = new JRBeanCollectionDataSource(atelierses);
in java 我将这些对象放在列表 atelierses
List<ChampEtatAteliers>
中,所以有什么方法可以对列表或交叉表报告中的列进行排序,我的 xml ireport上的代码如下:
<columnGroup name="nbreVehicule" height="66">
<bucket order="Descending" class="java.lang.String">
<bucketExpression><![CDATA[$F{nbreVehicule}]]></bucketExpression>
<orderByExpression><![CDATA[$V{MyOrderByField_measure}]]></orderByExpression>
</bucket>
<crosstabColumnHeader>
<cellContents backcolor="#F0F8FF" mode="Opaque">
<textField>
<reportElement style="Crosstab Data Text" x="0" y="0" width="85" height="66" uuid="2109b261-1b20-493a-b664-ce59731c4a20"/>
<box topPadding="1" leftPadding="1" bottomPadding="1" rightPadding="1"/>
<textElement>
<font isBold="true"/>
</textElement>
<textFieldExpression><![CDATA[$V{nbreVehicule}]]></textFieldExpression>
</textField>
</cellContents>
</crosstabColumnHeader>
<crosstabTotalColumnHeader>
<cellContents/>
</crosstabTotalColumnHeader>
</columnGroup>
<measure name="MyOrderByField_measure" class="java.lang.Integer" calculation="Nothing" >
<measureExpression><![CDATA[$F{myOrderByField}]]></measureExpression>
</measure>
在 jasper 报告中,通过设置 order
属性,交叉表 columnGroup
可以按 升序 或 降序 排序在 bucket
例子
<columnGroup name="GROUP" height="16" headerPosition="Center">
<bucket order="Descending" class="java.lang.String">
<bucketExpression><![CDATA[$F{MyField}]]></bucketExpression>
</bucket>
.....
</columnGroup>
如果您需要用户定义的订单,您应该使用orderByExpression
根据您喜欢的订单定义衡量标准
<measure name="myOrderByField_measure" class="java.lang.Integer" calculation="First"> <measureExpression><![CDATA[$F{myOrderByField}]]></measureExpression> </measure>
使用
中的度量orderByExpression
<columnGroup name="GROUP" height="16" headerPosition="Center"> <bucket class="java.lang.String"> <bucketExpression><![CDATA[$F{myField}]]></bucketExpression> <orderByExpression><![CDATA[$V{myOrderByField_measure}]]></orderByExpression> </bucket> ..... </columnGroup>
在您的示例中,这可以通过在 ChampEtatAteliers
class 示例 private int myOrderByField;
中引入一个新字段然后根据需要通过代码设置来实现。
另一个解决方案,将return一个自己的对象(class)作为MyField
并实现Comparable,生成所需的订单。
编辑: 解决方法,OP 无法使 orderByExpression
正常工作。
由于 myOrderByField
对于 nbreVehicule
是唯一的(一对一相关),他可以在 bucketExpression
myOrderByField
<measure name="nbreVehicule_measure" class="java.lang.String">
<measureExpression><![CDATA[$F{nbreVehicule}]]></measureExpression>
</measure>
<columnGroup name="nbreVehicule" height="66">
<bucket class="java.lang.Integer">
<bucketExpression><![CDATA[$F{myOrderByField}]]></bucketExpression>
</bucket>
....
<textFieldExpression><![CDATA[$V{nbreVehicule_measure}]]></textFieldExpression>
.....
</columnGroup>
因此 bucketExpression
不需要与 crosstabColumnHeader