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