当前位置: 代码迷 >> Web前端 >> 解决DataGrid排序只对当前页有效有关问题
  详细解决方案

解决DataGrid排序只对当前页有效有关问题

热度:177   发布时间:2012-11-23 00:03:43.0
解决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;
	}

?

好了,通过这样简单的配置就可以了,排序的结果决定于数据库中字段的数据类型了。

  相关解决方案