项目一期有个问题一直没有解决,今天有空终于把这个问题解决了。
问题描述,点击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;
}
好了,通过这样简单的配置就可以了,排序的结果决定于数据库中字段的数据类型了。
分享到:
相关推荐
juqery easyui datagrid的排序,当前页面排序。包含数字排序,中文排序,日期排序。
2. **性能考虑**:虽然插入空行可以解决问题,但如果表格列数非常多,这种方法可能会对性能产生一定影响。因此,在实际项目中应综合考虑数据量和性能需求。 3. **用户体验**:虽然隐藏空行可以避免视觉干扰,但仍然...
排序是DataGrid的一个关键特性,它允许用户根据某一列或几列对数据进行升序或降序排列,从而提高数据的可读性和易用性。 ##### 实现步骤: 1. **设置AllowSorting属性**:首先,在DataGrid控件的定义中设置`...
标题“easyui datagrid表格打印”关注的就是如何解决这个问题,即如何将经过formatter处理后的数据在打印时保持原有的格式。 在描述中提到的“支持formatter格式化数据的打印”,指的是Datagrid中用于数据美化和...
4. **数据排序和过滤**:如果需要在前台进行数据排序或过滤,要确保这些操作不会影响到整个数据集,只对当前页的数据进行操作。 5. **状态保存**:如果应用有多个视图或用户离开后再返回,需要保存用户的分页状态,...
因此,通常会选择每页只加载一部分数据,用户可以通过翻页来查看其他数据。 #### 问题描述 从题目提供的信息来看,“DataGrid绑定数据分页出错”主要表现在DataGrid虽然绑定了数据,但是分页功能未能正常工作。具体...
1. 数据获取:EasyUI-datagrid提供了获取当前显示数据的方法,如`$.fn.datagrid.getRows`,可以获取到表格中所有的行数据。开发者需要遍历这些数据,将其组织成适合Excel格式的结构。 2. 格式转换:为了保持原有的...
// 获取当前页数据 int skip = (currentPage - 1) * pageSize; cmd.CommandText = $"SELECT * FROM TableName ORDER BY SomeColumn OFFSET {skip} ROWS FETCH NEXT {pageSize} ROWS ONLY"; adapter.SelectCommand = ...
5. **显示页码**:为了显示当前页和总页数,你需要计算总页数(`TotalPages = Math.Ceiling((double)totalCount / pageSize)`),并创建相应的导航按钮或者显示控件。 6. **导航功能**:创建“上一页”、“下一页”...
在IT行业中,datagrid是一种常用的组件,它用于展示和管理大量结构化的数据,通常在Web应用中使用。在本例中,我们关注的是一个名为"datagrid-dnd"的特性,这是一项允许用户通过拖放操作来重新排列数据网格行的功能...
服务器端分页是在服务器上进行计算,每次只加载当前页的数据,减少对客户端资源的占用;客户端分页则通过JavaScript在浏览器端处理,提供更流畅的用户体验,但可能增加服务器的负载。 服务器端分页的基本步骤如下:...
在BufferView模式下,datagrid只加载当前可视范围内的数据,减少内存占用和初始加载时间。`datagrid-bufferview.js`提供了处理缓冲数据流和动态加载的逻辑,尤其适合处理大数据集的应用。 3. **GroupView**: ...
ServerMode允许DataGrid在服务器端处理数据分页、排序和过滤,而不是在客户端执行这些操作。这意味着,只有当前页面所需的数据才会被加载到客户端,从而显著减少了网络传输的数据量和客户端内存的占用。具体实施方法...
在这种模式下,服务器端负责处理分页逻辑,仅返回当前页所需的数据,而不是整个数据集。 6. **处理异步请求**: 在实际应用中,可能需要处理异步请求带来的问题,比如防止重复请求、错误处理等。可以通过设置请求...
虚拟化意味着只加载当前可视区域的数据,而不是一次性加载所有数据。 10. **自定义功能** 除了基本功能外,`DataGrid`还可以通过扩展来实现更多自定义功能,例如添加按钮列进行操作,或者添加下拉列表选择。 总的...
你可以设置每页显示的数据量,添加上一页、下一页、跳转到指定页数的按钮,以及显示当前页数和总页数。同时,确保分页功能与后端API良好配合,只加载当前所需的页面数据,降低服务器压力。 4. **交互性增强**:为了...
本文将深入探讨 DataGrid 的使用方法、特点以及常见问题的解决策略。 1. **创建 DataGrid** 创建 DataGrid 控件通常涉及在设计视图中拖放控件或在代码中实例化。例如,可以使用以下代码创建一个空的 DataGrid: `...
1. **创建ViewModel**:ViewModel应包含表示当前页数据的集合,以及用于导航页码的属性,如CurrentPage和TotalPages。同时,需要定义一个Command,例如LoadDataCommand,用于加载新页面的数据。 2. **数据源准备**...
通过调整页码,只加载当前页的数据,提高页面加载速度。 9. **异常处理和错误处理** 在进行数据库操作时,应始终捕获并处理可能出现的异常。例如,使用On Error Resume Next和Err对象来处理错误。 10. **优化性能...
开发者可以通过实现自己的分页逻辑,结合数据虚拟化技术,确保只加载当前视图所需的记录,从而提高应用程序的响应速度。 该资源包含了源码、示例和文档,这对于学习和理解自定义Datagrid的实现至关重要。源码提供了...