[英]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);
在Java中,我將這些對象放入列表atelierses
List<ChampEtatAteliers>
,因此有什么方法可以對列表或交叉表ireport中的列進行排序,我在ireport上的xml代碼如下:
<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報告中,可以通過在bucket
上設置order
屬性,將交叉表columnGroup
進行升序或降序排序
例
<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
類示例中引入一個新字段來實現private int myOrderByField;
然后通過代碼根據需要進行設置。
另一個解決方案是將自己的Object(類)返回為MyField
並實現Comparable ,從而生成所需的順序。
編輯: orderByExpression
工作,OP不能使orderByExpression
正常工作。
由於myOrderByField
是唯一的(與1:1)到nbreVehicule
他可以使用myOrderByField
在bucketExpression
<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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.