easyui的datagrid的分页问题

       首先尝试了一下官方的分页方法:即采用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、等等


猜你喜欢

转载自blog.csdn.net/cyyingsun/article/details/51086348