Java 如何在特定方案中对ireport交叉表中的列进行排序

Java 如何在特定方案中对ireport交叉表中的列进行排序,java,sorting,jasper-reports,crosstab,Java,Sorting,Jasper Reports,Crosstab,下图显示了我在ireport中的交叉表: 我想按照特定的顺序对我的列进行排序,因为我知道在交叉表数据中,我放置了一个具有以下属性的对象列表list: public class ChampEtatAteliers { private String numero; private String denominationFr; private String etatEntreeSortie; public ChampEtatAteliers(String nume

下图显示了我在ireport中的交叉表:

我想按照特定的顺序对我的列进行排序,因为我知道在交叉表数据中,我放置了一个具有以下属性的对象列表
list

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
,行中显示
面额fr
,交叉表中的计数使用
numero

String rapportLien = "/SituationEquipement.jasper";
Map parametres = new HashMap();
JRBeanCollectionDataSource data = new JRBeanCollectionDataSource(atelierses);
在java中,我将这些对象放在list
Ateliers
list
中,因此是否有方法对列表或交叉表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报告中,通过设置
存储桶上的
顺序
属性,可以对交叉表
列组
进行升序或降序排序

示例


.....
如果需要用户定义的订单,则应使用
orderByExpression

  • 为您想要订购的产品定义一个衡量标准

    
    
  • 使用
    orderByExpression

    
    .....
    
  • 在您的示例中,这可以通过在
    champetataliers
    类示例
    private int myOrderByField中引入一个新字段来实现然后根据需要通过代码进行设置

    另一个解决方案是将自己的对象(类)作为
    MyField
    返回并实现,以生成所需的顺序

    编辑:解决方法,OP无法使
    orderByExpression
    正常工作

    由于
    myOrderByField
    对于
    nbreVehicule
    是唯一的(与1相关),因此他可以在
    bucketExpression中使用
    myOrderByField

    
    ....
    .....
    

    因此,
    bucketExpression
    无需与jasper报告中的
    crosstabColumnHeader
    中显示的文本相同。通过在
    bucket
    上设置
    顺序
    属性,可以对交叉表
    列组
    进行排序

    示例

    
    .....
    
    如果需要用户定义的订单,则应使用
    orderByExpression

  • 为您想要订购的产品定义一个衡量标准

    
    
  • 使用
    orderByExpression

    
    .....
    
  • 在您的示例中,这可以通过在
    champetataliers
    类示例
    private int myOrderByField中引入一个新字段来实现然后根据需要通过代码进行设置

    另一个解决方案是将自己的对象(类)作为
    MyField
    返回并实现,以生成所需的顺序

    编辑:解决方法,OP无法使
    orderByExpression
    正常工作

    由于
    myOrderByField
    对于
    nbreVehicule
    是唯一的(与1相关),因此他可以在
    bucketExpression中使用
    myOrderByField

    
    ....
    .....
    
    因此,
    bucketExpression
    不需要与
    crosstabColumnHeader中显示的文本相同