1、JqGrid即可以在客户端排序,也可以请求服务器排序
需要设置两个属性:
注意的问题:
可以在action中,用request获得排序字段,升降序,请求每页记录数以及请求的页码
String rows=request.getParameter("rows");//获得请求的每页记录数
String page=request.getParameter("page");//获得请求的页码
String sidx=request.getParameter("sidx");//获得排序的字段
String sord=request.getParameter("sord");//获得排序顺序(升序 or 降序)
然后将上述的值传入dao处理自己的查询语句
注意:在表格中,列的index属性就是我们的排序字段,在写index时,所取的字段必须在数据库中存在,才能按此字段排序。
2、JqGrid客户端排序
- ladoonce:true,指的是只加载一次数据,一次性把数据都加载到前台,这个属性设置为true后,表格支持排序,分页
- rowNum:这个属性代表的是显示的行数,现在是一次性把数据都加载到前台,所以这个值要比可能结果的最大值大或相等
3、客户端排序需要注意的问题以及不足
- 设置loadonce为true后,datatype就变成local了,即本地数据,在重新加载表格时,需要将数据类型变为json(如果你使用的是json数据库类型的话)例如:
$("#grid1").jqGrid("setGridParam",{datatype:"json"}).trgger("reloadGrid") - 如果页面上有增加,删除,修改按钮的话,需要做以下设置:
把reloadAfterSubmit这个属性设为false,默认为true; 若reloadAfterSubmit为true,需要做以下设置,把数据类型变为json: afterSubmit:function(){ $("#grid1").jqGrid("setGridParam",{datatype:"json",page:1,rowNum:"10000"}); return [true] ; } 解释:datatype改为json page:1,显示在第一页 rowNum:100000(这是你设置的最大值) ,设置这个属性,主要是因为在点击了分页后,rowNum变成了,当前页面下拉框的值,所以需要重新设置下拉框的值 - Refresh按钮:需要添加beforeRefresh按钮,在下面的地方添加这个方法:
jQuery("#grid1").jqGrid ("navGrid","page",{.....,beforeRefresh:function(){ $("#grid1").jqGrid("setGridParam",{datatype:"json",page:1,rowNum:"10000"}); }}) - 可以根据不同列的数据类型,设置不同的sorttype (详见官网)
http://www.trirand.com/jqgridwiki/doku.php?id=wiki:colmodel_options - 第一次加载的是所有数据,排序不能用,当点击分页下拉列表时,自动分页
不足: 上面的分页和排序都因为loadonce=true属性而导致客户端帮我们做了大部分的事情,但是loadonce存在bug,当数据量很大时,一次性加载有所数据不仅速度太慢,如果传输的json数据超过4MB时会抛出异常(可以在web.config中设置大小)。
要解决这个问题,我们只有通过服务端来操控分页数据,而不是一次性丢给客户端所有的数据,也就是说客户端请求哪一页的数据服务端就提供那一页的几条数据给客户端。
4、请求服务器排序,分页: