1
我有報告組和小組,並需要按字母順序排序,但我想排序空值或空值爲最後。有沒有選擇或一些工作來做到這一點?謝謝帕維爾賈斯珀報告排序空/空值最後
我有報告組和小組,並需要按字母順序排序,但我想排序空值或空值爲最後。有沒有選擇或一些工作來做到這一點?謝謝帕維爾賈斯珀報告排序空/空值最後
你可以通過排序選項和附加變量來獲得這個結果。
的步驟:
<variable name="isNull" class="java.lang.Integer">
<variableExpression><![CDATA[Strings.isNullOrEmpty($F{fieldName})]]></variableExpression>
</variable>
<sortField name="isNull" order="Ascending" type="Variable"/>
<sortField name="fieldName"/>
完整工作示例。該JRXML文件:
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport ...>
<import value="com.google.common.base.*"/>
<field name="id" class="java.lang.Integer"/>
<field name="city" class="java.lang.String"/>
<sortField name="isNull" order="Ascending" type="Variable"/>
<sortField name="city"/>
<variable name="isNull" class="java.lang.Integer">
<variableExpression><![CDATA[Strings.isNullOrEmpty($F{city})]]></variableExpression>
</variable>
<detail>
<band height="20" splitType="Stretch">
<textField>
<reportElement x="0" y="0" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{id}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="100" y="0" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{city}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
測試Java代碼:
private void testReport() throws JRException {
JasperReport jasperReport = JasperCompileManager.compileReport(reportSource);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, getDataSource());
JasperExportManager.exportReportToPdfFile(jasperPrint, outputFileName);
}
private JRDataSource getDataSource() {
Collection<Address> list = new ArrayList<Address>();
list.add(new Address(1, "Dallas"));
list.add(new Address(2, "Dallas"));
list.add(new Address(3, "Dallas"));
list.add(new Address(5, null));
list.add(new Address(4, ""));
list.add(new Address(6, "Boston"));
list.add(new Address(7, "Chicago"));
list.add(new Address(8, "Dallas"));
list.add(new Address(9, ""));
list.add(new Address(10, null));
list.add(new Address(11, null));
return new JRBeanCollectionDataSource(list);
}
在此示例中地址是一個簡單的POJO:
public class Address {
private Integer m_id;
private String m_city;
public Address(Integer id, String city) {
m_city = city;
m_id = id;
}
public Integer getId() {
return m_id;
}
public String getCity() {
return m_city;
}
}
的結果將(生成PDF文件):
在示例中,我已經使用了的Java bean基於數據源,但這種方法也適用於JDBC數據源。
可以容易反向通過更換排序選項排序(的順序值更改屬性從升序到降序):
<sortField name="isNull" order="Descending" type="Variable"/>
這個表達式將用於對數據進行排序在列表頂部顯示空值和空值。
謝謝,它看起來像我需要的東西。我會測試它 – Perlos
你使用了什麼* DB *(如果你使用的是jdbc數據源)? –
@AlexK我使用java的bean數據源 – Perlos