jQuery EasyUI Pagination实现分页的常用方法
EasyUI的datagrid支持服务器端分页,但是官方的资料比较少,以下总结了两种datagrid的服务器端分页机制,可根据情况具体使用。
一、使用datagrid默认机制
后台:
publicJsonResultGetQuestionUnit() { //easyuidatagrid自身会通过post的形式传递rowsandpage intpageSize=Convert.ToInt32(Request["rows"]); intpageNum=Convert.ToInt32(Request["page"]); vardal=newQsQuestionUnitDal(); varquestionUnits=dal.GetList("",pageNum-1,pageSize); //返回到前台的值必须按照如下的格式包括totalandrows vareasyUIPages=newDictionary<string,object>(); easyUIPages.Add("total",questionUnits.FirstOrDefault()==null?0:questionUnits.FirstOrDefault().ReqCount); easyUIPages.Add("rows",questionUnits); returnJson(easyUIPages,JsonRequestBehavior.AllowGet); }
前台:
(function(){(function(){('#dgd').datagrid({ pageNumber:1, //url:"@ViewBag.Domain/Paper/GetQuestionUnit?arg1=xxx", columns:[[ {field:'Id',title:'id',width:100}, {field:'Name',title:'name',width:100}, ]], pagination:true, rownumbers:true, pageList:[3,6] }); varp=('#dgd').datagrid('getPager');('#dgd').datagrid('getPager');(p).pagination({ beforePageText:'第',//页数文本框前显示的汉字 afterPageText:'页共{pages}页', displayMsg:'共{total}条数据', }); });
你需要把('#dgd').datagrid方法放置到
$(function(){ });
如果企图通过其它的JS方法来调用('#dgd').datagrid方法,则不会得到正确的分页结果。
可以看到,上面JS代码中url这一行是被注释掉了。如果我们不需要做别的操作,页面一加载就打算查询出数据,则可以不注释掉该代码。但是,往往,有的时候,url的参数,如arg1的值需要在界面上进行某些操作,然后再通过JS代码去得到的,这个时候,就应该注释掉url,而改由在别的地方赋值,如:
varstep1Ok=function(){ $('#dgd').datagrid({ url:"@ViewBag.Domain/Paper/GetQuestionUnit?arg1=xxx", }); };
在上面的代码中,我们可以假设是点了界面的某个按钮,调用了step1Ok这个方法后,才会去url查询数据,并呈现到UI中去。
二、利用Ajax获取数据并填充Datagrid
如果想追求更大的灵活性,我们可以不使用datagrid的默认机制,即指定url的方式去获取数据,而是通过ajax来获取数据并填充datagrid。使用这种方式,仍旧需要把('#dgd').datagrid方法放置到
$(function(){ });
后台代码不变,只不过,点击某个按钮,调用step1Ok这个方法,变成了:
varstep1Ok=function(){ .messager.progress(title:′Pleasewaiting′,msg:′Loadingdata...′,text:′PROCESSING.......′);varp=.messager.progress(title:′Pleasewaiting′,msg:′Loadingdata...′,text:′PROCESSING.......′);varp=('#dgd').datagrid('getPager'); $(p).pagination({ onSelectPage:function(pageNumber,pageSize){ alert('onSelectPagepageNumber:'+pageNumber+',pageSize:'+pageSize); getData(pageNumber,pageSize); } }); getData(1,3); };
第一次调用的时候,将会获取第一页的3条数据:
getData(1,3);
然后我们可以看到,同时,我们还为pagination的onSelectPage事件创建了一个时间处理器,这样,当改天页面的时候,我们就会去:
getData(pageNumber,pageSize);
另外,由于绕开了datagrid的原有机制进行分页,我们采用了自己的遮盖$.messager.progress,然后在ajax的success中取消遮盖就可以了。
getData方法如下:
vargetData=function(page,rows){ .ajax({type:"POST",url:"@ViewBag.Domain/Paper/GetQuestionUnit",data:"page="+page+"&rows="+rows,error:function(XMLHttpRequest,textStatus,errorThrown){alert(textStatus);.ajax({type:"POST",url:"@ViewBag.Domain/Paper/GetQuestionUnit",data:"page="+page+"&rows="+rows,error:function(XMLHttpRequest,textStatus,errorThrown){alert(textStatus);.messager.progress('close'); }, success:function(data){ //.each(data,function(i,item)//alert(item);//);.each(data,function(i,item)//alert(item);//);.messager.progress('close'); $('#dgd').datagrid('loadData',data); } }); };
原文地址:http://www.cnblogs.com/luminji
以上就是本文的全部内容,希望对大家的学习有所帮助。