集智平台点击表头多字段排序

需求描述:通过点击表头进行该列的数据排序,并且可以点击多个表头进行顺序的多级排序。

 

问题难点:点击表头排序在润乾报表中可以很好的通过宏的方式实现,排序更有现成的函数中有排序字段,可是要做到多级的排序,就没有现成的函数可以使用了。

 

解决方案:原理当然也是要通过宏的形式来传递参数,不过是使用了数据库端的order by 在数据集中将数据排序后,在展现出来实现需求。

 

首先准备一张3层分组的报表:

增加一个宏macro1放在数据集的最后。

在每个表头增加一个html事件onclick=”order(‘表头名称‘)”,目的是通过出发js将该表头的条件拼成param串传给报表,并且保留上次点击的结果,例如点击客户ID后又点击货主城市,最终传给报表宏的就是”order by 客户ID,货主城市 “.

在调用报表的jsp中增加:

首先取到每次点击表头后的字段名称,会通过request传递回来,如果不为空,说明点击过表头,但是多次点击后每个表头名称中间会有逗号相隔,所以需要处理下。

         String orderCols = request.getParameter(“orderCols”);

         if(orderCols==null) orderCols=”";

         while(orderCols.length()>0 && orderCols.charAt(0)==’,') {

                   orderCols = orderCols.substring(1);

         }

然后加入js

<script type=”text/javascript”>

         var orderColsName = ‘<%=orderCols%>’;

</script>

<script language=”JavaScript”>

         var orderCols;

         function order(colName){

                   orderCols = colName;

                   //window.alert(orderCols);

                   document.getElementById(“orderCols”).value = orderColsName+”,”+orderCols;

                   document.all(‘form1′).action=”";

                   document.all(‘form1′).submit();

}

         function reset(){

                   document.getElementById(“orderCols”).value = ”;

                   document.all(‘form1′).action=”";

                   document.all(‘form1′).submit();

         }

</script>

 

js中获得传递过来的参数,将参数拼成多表头名称逗号分隔的形式,传递给jsp中的隐藏域。并且设置了提交方法,为了是将参数再传递回jsp

<form action=”" name=”" id=”form1″ method=”post”>

         <input type=hidden id=”orderCols” name=”orderCols” value=”">

</form>

 

接下来是进行报表宏的拼接方法:

String parasm = orderCols==null || “”.equals(orderCols) ? “” : “macro1=order by “+orderCols;

将多个字段拼接后的结果拼到宏里面形成name=value的形式传递给报表即可。

 

下面是直接浏览的效果

然后点击客户ID,再点击货主城市后的效果:

这样就实现了点击多表头进行排序。