????? 项目一期有个问题一直没有解决,今天有空终于把这个问题解决了。
????? 问题描述,点击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; }
?
好了,通过这样简单的配置就可以了,排序的结果决定于数据库中字段的数据类型了。