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