首先尝试了一下官方的分页方法:即采用pagerFilter方法。如下所示
functionpagerFilter(data){ if (typeof data.length =='number' && typeof data.splice == 'function'){ // is array data = { total: data.length, rows: data } } var dg = $(this); var opts =dg.datagrid('options'); var pager =dg.datagrid('getPager'); pager.pagination({ onSelectPage:function(pageNum,pageSize){ opts.pageNumber= pageNum; opts.pageSize= pageSize; pager.pagination('refresh',{ pageNumber:pageNum, pageSize:pageSize }); dg.datagrid('loadData',data); } }); if (!data.originalRows){ data.originalRows =(data.rows); } var start = (opts.pageNumber-1)*parseInt(opts.pageSize); var end = start +parseInt(opts.pageSize); data.rows =(data.originalRows.slice(start, end)); return data; }
但是不知道为啥总是报不支持"'refresh'"的属性或方法,没有研究出来。知道的可以留言告诉偶一下嘛。就改用服务器后台的分页方法。
public class EmployeeIOHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; //获取分页和排序信息:页大小,页码,排序方式,排序字段 int pageSize, pageIndex; pageSize = 10; pageIndex = 1; string order, sort, oderby; order = sort = oderby = ""; if (null != context.Request["rows"]) { //获取前台传过来的每页显示数据的条数 pageSize = int.Parse(context.Request["rows"].ToString().Trim()); } if (null != context.Request["page"]) { //获取当前的页码 pageIndex = int.Parse(context.Request["page"].ToString().Trim()); } //context.Response.Write("Hello World"); string strJSON = DataTableToJson(QueryDetailByDeptType("").Tables[0], pageIndex, pageSize); //分页显示 context.Response.Write(strJSON); context.Response.End(); } private DataSet QueryDetailByDeptType(string strLinkName) { ........................ return ds; } /// <summary> /// 根据页数、页码等进行分页显示数据 /// </summary> /// <param name="dt"></param> /// <param name="PageIndex"></param> /// <param name="PageSize"></param> /// <returns></returns> public static string DataTableToJson(DataTable dt, int PageIndex, int PageSize) { StringBuilder jsonBuilder = new StringBuilder(); jsonBuilder.Append("{\"total\":"); jsonBuilder.Append(dt.Rows.Count); jsonBuilder.Append(",\"rows\":["); DataTable cdt = SplitDataTable(dt,PageIndex,PageSize); for (int i = 0; i < cdt.Rows.Count; i++) { jsonBuilder.Append("{"); for (int j = 0; j < cdt.Columns.Count; j++) { jsonBuilder.Append("\""); jsonBuilder.Append(cdt.Columns[j].ColumnName); jsonBuilder.Append("\":\""); jsonBuilder.Append(cdt.Rows[i][j].ToString()); jsonBuilder.Append("\","); } if (cdt.Columns.Count > 0) { jsonBuilder.Remove(jsonBuilder.Length - 1, 1); } jsonBuilder.Append("},"); } if (cdt.Rows.Count > 0) { jsonBuilder.Remove(jsonBuilder.Length - 1, 1); } jsonBuilder.Append("]}"); return jsonBuilder.ToString(); } /// <summary> /// 根据索引和pagesize返回记录 /// </summary> /// <param name="dt">记录集 DataTable</param> /// <param name="PageIndex">当前页</param> /// <param name="pagesize">一页的记录数</param> /// <returns></returns> public static DataTable SplitDataTable(DataTable dt, int PageIndex, int PageSize) { if (PageIndex == 0) return dt; DataTable newdt = dt.Clone(); //newdt.Clear(); int rowbegin = (PageIndex - 1) * PageSize; int rowend = PageIndex * PageSize; if (rowbegin >= dt.Rows.Count) return newdt; if (rowend > dt.Rows.Count) rowend = dt.Rows.Count; for (int i = rowbegin; i <= rowend - 1; i++) { DataRow newdr = newdt.NewRow(); DataRow dr = dt.Rows[i]; foreach (DataColumn column in dt.Columns) { newdr[column.ColumnName] = dr[column.ColumnName]; } newdt.Rows.Add(newdr); } return newdt; } public bool IsReusable { get { return false; } } }
尚存在一个这样的问题:就是页面前端设置成不分页的时候,这里仍显示分页中的第一页。
参考资料:
1、http://www.cnblogs.com/infozero/archive/2009/11/06/1597727.html
2、http://www.cnblogs.com/huozhicheng/archive/2011/09/27/2193605.html
3、http://www.cnblogs.com/szytwo/archive/2012/08/27/2658673.html#1
4、http://www.tuicool.com/articles/jIVvmu
5、等等