根据iReport中的参数对报表进行排序

时间:2013-04-15 16:39:55

标签: jasper-reports ireport

我有一个包含两个字段的简单报告:ID和NAME。 我想按ID或NAME对细节进行排序,具体取决于用户在运行时选择的参数。

我尝试过这样的事情:

<sortField name="sort" type="Variable"/>

<variable name="sort" class="java.lang.String">
    <variableExpression>
        <![CDATA[$P{ord}.equals("name") ? $F{entity}.getName() : $F{entity}.getId().toString()]]>
    </variableExpression>
</variable>

编辑1:我将数据源作为参数传递,我不会从JasperReports执行sql查询。 我想我可以将数据源alredy传递给JasperReports,但是我想直接从报告中对数据进行排序。

编辑2:我查看了以前的代码,对我来说效果很好。

2 个答案:

答案 0 :(得分:0)

只需创建一个带有默认值“ID”的参数“Sort_order”,并在查询中添加order by子句。

  SELECT...
  FROM..
  ORDER BY $P!{Sort_order} DESC

答案 1 :(得分:0)

您可以在SELECT中使用ORDER BY子句。但是,有时您需要通过jasper对数据进行排序,因为内部化或类似的事情。解决此问题的一种方法是选择特殊列进行排序(POSTGRESQL):

SELECT 
    id, name,
    (CASE WHEN $P!{Sort_order}='id' THEN id ELSE null END) sort_id,
    (CASE WHEN $P!{Sort_order}='name' THEN name ELSE null END) sort_name
FROM
    your_table;

然后按列sort_namesort_id

设置排序