下图显示了我在 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 报表中,交叉表 columnGroup
可以通过设置 bucket
上的 order
属性按升序或降序排序
示例
<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;
中引入一个新字段,然后通过代码根据需要进行设置来实现。
另一个解决方案,是将自己的对象(类)作为 MyField
返回并实现 Comparable ,生成所需的顺序。
编辑:解决方法,OP 无法使 orderByExpression
正常工作。
由于 myOrderByField
与 nbreVehicule
是唯一的(1 对 1 相关),因此他可以在 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
中显示的文本相同
关于java - 如何在特定方案中对 ireport 交叉表中的列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34826005/