曾经我写过​​分页的博客​​,分页很简单, 本质区别在于分页时从数据库读取信息的方式:假分页:一次性读取数据;真分页:多次读取数据。datagrid使用的是真分页,将记录从数据库查询出来就行了。


       下面我们看一下要实现的界面:

基于asp.net + easyui框架,一步步学习easyui-datagrid——实现分页和搜索(二)_asp.net


        说实话,加载数据并实现分页和搜索的功能相对而言是很简单,无非就是调用​​一般处理程序​​,只要你会一般处理程序就没有任何问题。


       在上篇博客中,我已将datagrid要调用的一般处理程序的URL写好了,所以我们现在只需要写一般处理程序的代码和后台的代码就好了。在一般处理程序中,我们将分页和查询功能巧妙的整合到了一起。


搜索的js代码




[javascript] ​​view plain​​​​copy​​​​print​​​​?​




  1. //获取参数       
  2.  function getQueryParams(queryParams) {  
  3.      var StartTime = $("#StartTime").datebox("getValue");  
  4.      var EndTime = $("#EndTime").datebox("getValue");               
  5.      var AdminName = document.getElementById("AdminName").value;  
  6.      var QuanXian = document.getElementById("quanxian").value;  

  7.      //$("#quanxian").combobox("getValue");  

  8.      queryParams.StartTime = StartTime;  
  9.      queryParams.EndTime = EndTime;  
  10.      queryParams.AdminName = AdminName;  
  11.      queryParams.QuanXian = QuanXian;  

  12.      return queryParams;  

  13.  }  
  14.     //增加查询参数,重新加载表格  
  15.     function reloadgrid() {  

  16.         //查询参数直接添加在queryParams中      
  17.         var queryParams = $('#tt').datagrid('options').queryParams;  
  18.         getQueryParams(queryParams);  
  19.         $('#tt').datagrid('options').queryParams = queryParams;  
  20.         $("#tt").datagrid('reload');  

  21.     }  




一般处理程序SetAdmin.ashx




[csharp] ​​view plain​​​​copy​​​​print​​​​?​




  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Web;  
  5. using System.Data;  
  6. using System.Text;  

  7. namespace GoodCommunitySystem.admin.UserManager  
  8. {  
  9.     /// <summary>  
  10.     /// SetAdmin 的摘要说明  
  11.     /// </summary>  
  12.     public class SetAdmin : IHttpHandler  
  13.     {  
  14.         BLL.adminInfoBLL admininfobll = new BLL.adminInfoBLL();  
  15.         Entity.adminInfoEntity enadmininfo = new Entity.adminInfoEntity();  

  16.         public void ProcessRequest(HttpContext context)  
  17.         {  

  18.             //调用查询方法  
  19.             Query(context);  

  20.         }  

  21.         public bool IsReusable  
  22.         {  
  23.             get  
  24.             {  
  25.                 return false;  
  26.             }  
  27.         }  
  28.         /// <summary>  
  29.         /// 查询记录  
  30.         /// </summary>  
  31.         /// <param name="context"></param>  
  32.         public void Query(HttpContext context)  
  33.         {  


  34.             context.Response.ContentType = "text/plain";  
  35.             //===============================================================  
  36.             //获取查询条件:【用户id,开始时间,结束时间,关键字】  
  37.             string AdminName, startTime, endTime, QuanXian;  
  38.             AdminName = startTime = endTime = QuanXian = "";  
  39.             //获取前台传来的值  
  40.             if (null != context.Request.QueryString["AdminName"])  
  41.             {//获取前台传来的值  
  42.                 AdminName = context.Request.QueryString["AdminName"].ToString().Trim();  
  43.             }  
  44.             if (null != context.Request.QueryString["StartTime"])  
  45.             {  
  46.                 startTime = context.Request.QueryString["StartTime"].ToString().Trim();  
  47.             }  
  48.             if (null != context.Request.QueryString["EndTime"])  
  49.             {  
  50.                 endTime = context.Request.QueryString["EndTime"].ToString().Trim();  
  51.             }  
  52.             if (null != context.Request.QueryString["QuanXian"])  
  53.             {  
  54.                 QuanXian = context.Request.QueryString["QuanXian"].ToString().Trim();  
  55.             }  

  56.             //================================================================  
  57.             //获取分页和排序信息:页大小,页码,排序方式,排序字段  
  58.             int pageRows, page;  
  59.             pageRows = 10;  
  60.             page = 1;  
  61.             string order, sort, oderby; order = sort = oderby = "";  
  62.             if (null != context.Request.QueryString["rows"])  
  63.             {  
  64.                 pageRows = int.Parse(context.Request.QueryString["rows"].ToString().Trim());  

  65.             }  
  66.             if (null != context.Request.QueryString["page"])  
  67.             {  

  68.                 page = int.Parse(context.Request.QueryString["page"].ToString().Trim());  

  69.             }  
  70.             if (null != context.Request.QueryString["sort"])  
  71.             {  

  72.                 order = context.Request.QueryString["sort"].ToString().Trim();  

  73.             }  
  74.             if (null != context.Request.QueryString["order"])  
  75.             {  

  76.                 sort = context.Request.QueryString["order"].ToString().Trim();  

  77.             }  


  78.             //===================================================================  
  79.             //组合查询语句:条件+排序  
  80.             StringBuilder strWhere = new StringBuilder();  
  81.             if (AdminName != "")  
  82.             {  
  83.                 strWhere.AppendFormat(" WorkerRealName like '%{0}%' and ", AdminName);  
  84.             }  
  85.             if (QuanXian  != "")  
  86.             {  
  87.                 strWhere.AppendFormat(" AdminRightName like '%{0}%' and ", QuanXian);  
  88.             }  
  89.             if (startTime != "")  
  90.             {  
  91.                 strWhere.AppendFormat(" ActiveDate >= '{0}' and ", startTime);  
  92.             }  
  93.             if (endTime != "")  
  94.             {  
  95.                 strWhere.AppendFormat(" ActiveDate <= '{0}' and ", endTime);  
  96.             }  

  97.             //删除多余的and  
  98.             int startindex = strWhere.ToString().LastIndexOf("and");//获取最后一个and的位置  
  99.             if (startindex >= 0)  
  100.             {  
  101.                 strWhere.Remove(startindex, 3);//删除多余的and关键字  
  102.             }  
  103.             if (sort != "" && order != "")  
  104.             {  
  105.                 //strWhere.AppendFormat(" order by {0} {1}", sort, order);//添加排序  
  106.                 oderby = order + " " + sort;  
  107.             }  
  108.             //DataSet ds = Bnotice.GetList(strWhere.ToString());  //调用不分页的getlist  

  109.             //调用分页的GetList方法  
  110.             DataSet ds = admininfobll.GetListByPage(strWhere.ToString(), oderby, (page - 1) * pageRows + 1, page * pageRows);  
  111.             int count = admininfobll.GetRecordCount(strWhere.ToString());//获取条数  
  112.             string strJson = ToJson.Dataset2Json(ds, count);//DataSet数据转化为Json数据  
  113.             context.Response.Write(strJson);//返回给前台页面  
  114.             context.Response.End();  

  115.         }  
  116. }  




调用D层实现分页的两个方法:




[csharp] ​​view plain​​​​copy​​​​print​​​​?​




  1.               /// <summary>  
  2. /// 获取记录总数  
  3. /// </summary>  
  4. public int GetRecordCount(string strWhere)  
  5. {  
  6.     StringBuilder strSql=new StringBuilder();  
  7.           strSql.Append("select count(1) FROM V_admin_MgPersonFiles ");  
  8.     if(strWhere.Trim()!="")  
  9.     {  
  10.         strSql.Append(" where "+strWhere);  
  11.     }  
  12.     object obj = DbHelperSQL.GetSingle(strSql.ToString());  
  13.     if (obj == null)  
  14.     {  
  15.         return 0;  
  16.     }  
  17.     else  
  18.     {  
  19.         return Convert.ToInt32(obj);  
  20.     }  
  21. }  
  22. /// <summary>  
  23. /// 分页获取数据列表  
  24. /// </summary>  
  25. public DataSet GetListByPage(string strWhere, string orderby, int startIndex, int endIndex)  
  26. {  
  27.     StringBuilder strSql=new StringBuilder();  
  28.     strSql.Append("SELECT * FROM ( ");  
  29.     strSql.Append(" SELECT ROW_NUMBER() OVER (");  
  30.     if (!string.IsNullOrEmpty(orderby.Trim()))  
  31.     {  
  32.         strSql.Append("order by T." + orderby );  
  33.     }  
  34.     else  
  35.     {  
  36.         strSql.Append("order by T.AdminID desc");  
  37.     }  
  38.           strSql.Append(")AS Row, T.*  from V_admin_MgPersonFiles T ");  
  39.     if (!string.IsNullOrEmpty(strWhere.Trim()))  
  40.     {  
  41.         strSql.Append(" WHERE " + strWhere);  
  42.     }  
  43.     strSql.Append(" ) TT");  
  44.     strSql.AppendFormat(" WHERE TT.Row between {0} and {1}", startIndex, endIndex);  
  45.     return DbHelperSQL.Query(strSql.ToString());  
  46. }  



      上面还有一个难点是:将dataset的数据集转换成json格式,下面我封装了一个类:ToJson




[csharp] ​​view plain​​​​copy​​​​print​​​​?​




  1. public class ToJson  
  2.     {  

  3.         #region DataSet转换成Json格式  
  4.         /// <summary>  
  5.         /// DataSet转换成Json格式    
  6.         /// </summary>    
  7.         /// <param name="ds">DataSet</param>   
  8.         /// <returns></returns>    
  9.         public static string Dataset2Json(DataSet ds, int total = -1)  
  10.         {  
  11.             StringBuilder json = new StringBuilder();  

  12.             foreach (DataTable dt in ds.Tables)  
  13.             {  
  14.                 //{"total":5,"rows":[  
  15.                 json.Append("{\"total\":");  
  16.                 if (total == -1)  
  17.                 {  
  18.                     json.Append(dt.Rows.Count);  
  19.                 }  
  20.                 else  
  21.                 {  
  22.                     json.Append(total);  
  23.                 }  
  24.                 json.Append(",\"rows\":[");  
  25.                 json.Append(DataTable2Json(dt));  
  26.                 json.Append("]}");  
  27.             } return json.ToString();  
  28.         }  
  29.         #endregion  

  30.         #region dataTable转换成Json格式  
  31.         /// <summary>    
  32.         /// dataTable转换成Json格式    
  33.         /// </summary>    
  34.         /// <param name="dt"></param>    
  35.         /// <returns></returns>    
  36.         public static string DataTable2Json(DataTable dt)  
  37.         {  
  38.             StringBuilder jsonBuilder = new StringBuilder();  

  39.             for (int i = 0; i < dt.Rows.Count; i++)  
  40.             {  
  41.                 jsonBuilder.Append("{");  
  42.                 for (int j = 0; j < dt.Columns.Count; j++)  
  43.                 {  
  44.                     jsonBuilder.Append("\"");  
  45.                     jsonBuilder.Append(dt.Columns[j].ColumnName);  
  46.                     jsonBuilder.Append("\":\"");  
  47.                     jsonBuilder.Append(dt.Rows[i][j].ToString());  
  48.                     jsonBuilder.Append("\",");  
  49.                 }  
  50.                 if (dt.Columns.Count > 0)  
  51.                 {  
  52.                     jsonBuilder.Remove(jsonBuilder.Length - 1, 1);  
  53.                 }  
  54.                 jsonBuilder.Append("},");  
  55.             }  
  56.             if (dt.Rows.Count > 0)  
  57.             {  
  58.                 jsonBuilder.Remove(jsonBuilder.Length - 1, 1);  
  59.             }  

  60.             return jsonBuilder.ToString();  
  61.         }  
  62.         #endregion dataTable转换成Json格式  
  63.     }  




          这篇博客主要给大家介绍datagrid如何实现分页和搜索的功能。真的跟宣传广告一样,It's so easy。。。