解决DataGrid排序只对当前页有效问题
????? 项目一期有个问题一直没有解决,今天有空终于把这个问题解决了。
????? 问题描述,点击datagrid上的排序,排序只是对当前数据源进行排序,点击下一页的时候,没有把前一页的排序方式带过去。
????? 解决思路:flex的datagrid是基于mvc模式的,排序是对数据源进行排序,从数据源中可以得到Sort,一个Sort里面包含多个SortField 。SortField 里面包含此列的name和排序方式(sort还是desc)
?
????生成排序sql的代码
/** * 生成排序的sql * @param ac要排序的ArrayCollection * @return 返回排序的sql如果没有排序就返回null * */ public static function createOrderBySql(ac:ArrayCollection):String{ var sql:String=null; if(ac==null){ return null; }var sort:Sort=ac.sort;if(sort==null){return null;}var fields:Array=ac.sort.fields;if(fields==null){return null ;}else{sql="";for(var i:int=0;i<fields.length;i++){var sf:SortField=fields[i] as SortField;if(sf!=null){if(i==(fields.length-1)){sql+=" "+sf.name+" "+(sf.descending==true?"desc":"asc");}else{sql+=" "+sf.name+" "+(sf.descending==true?"desc":"asc")+" , ";}}}} return sql; }
??
分页时调用生成的排序sql
param.orderBySql=Common.createOrderBySql(userDb);JdbcService.getInstance(true).callfunc("UserService","query",param,querySuc,queryFal);
?orderBySql是生成的排序sql,java后台处理代码
/** * Query.查询用户信息 * * @param sqlobj the sqlobj * * @return the map * * @throws Exception the exception */@SuppressWarnings("unchecked")public Map query(ASObject sqlobj) throws Exception {StringBuffer sb=new StringBuffer();String sql="select t.*,g.group_name from amc_base_user t " +"left join amc_base_group g on t.group_uuid = g.group_uuid ";sb.append(sql);Map map = null;try {int currentPage=Integer.parseInt(sqlobj.get("currentPage").toString());//得到当前页int numPerPage=Integer.parseInt(sqlobj.get("numPerPage").toString());//得到每页显示条数String orderBySql=(String)sqlobj.get("orderBySql");if(orderBySql!=null){sb.append(" order by ");sb.append(orderBySql);}logger.debug("currentPage:"+currentPage+" numPerPage:"+numPerPage);logger.debug("查询用户信息sql:"+sb.toString());map= jdbcService.pagination(currentPage, numPerPage, sb.toString());//查出带有分页信息的内容AMCLogService.addLog("查询用户信息", "权限控制");} catch (Exception e) {logger.info("查询用户信息时发生错误", e);throw new Exception("查询用户信息时发生错误!");}return map;}
?
好了,通过这样简单的配置就可以了,排序的结果决定于数据库中字段的数据类型了。