簡體   English   中英

如何在特定方案中對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);

在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

  1. 針對您要訂購的商品定義度量

     <measure name="myOrderByField_measure" class="java.lang.Integer" calculation="First"> <measureExpression><![CDATA[$F{myOrderByField}]]></measureExpression> </measure> 
  2. 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他可以使用myOrderByFieldbucketExpression

<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM