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

http://blog.csdn.net/jiuqiyuliang/article/details/19967031

 目录:

      基于asp.net + easyui框架,一步步学习easyui-datagrid——界面(一)

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

      基于asp.net + easyui框架,一步步学习easyui-datagrid——实现添加、编辑、删除(三)

      基于asp.net + easyui框架,一步步学习easyui-datagrid——完成,总结(四)

       上篇博客我只是将界面的部分完成了,继续上篇博客的内容,这篇博客我们需要将数据库中的记录显示到界面上,并实现数据的分页显示。

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

       

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

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

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

搜索的js代码

[javascript] view plaincopyprint?
 
  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.   
  8.      //$("#quanxian").combobox("getValue");  
  9.   
  10.      queryParams.StartTime = StartTime;  
  11.      queryParams.EndTime = EndTime;  
  12.      queryParams.AdminName = AdminName;  
  13.      queryParams.QuanXian = QuanXian;  
  14.   
  15.      return queryParams;  
  16.    
  17.  }  
  18.     //增加查询参数,重新加载表格  
  19.     function reloadgrid() {  
  20.   
  21.         //查询参数直接添加在queryParams中      
  22.         var queryParams = $('#tt').datagrid('options').queryParams;  
  23.         getQueryParams(queryParams);  
  24.         $('#tt').datagrid('options').queryParams = queryParams;  
  25.         $("#tt").datagrid('reload');  
  26.   
  27.     }  

一般处理程序SetAdmin.ashx

[csharp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  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.   
  8. namespace GoodCommunitySystem.admin.UserManager  
  9. {  
  10.     /// <summary>  
  11.     /// SetAdmin 的摘要说明  
  12.     /// </summary>  
  13.     public class SetAdmin : IHttpHandler  
  14.     {  
  15.         BLL.adminInfoBLL admininfobll = new BLL.adminInfoBLL();  
  16.         Entity.adminInfoEntity enadmininfo = new Entity.adminInfoEntity();  
  17.   
  18.         public void ProcessRequest(HttpContext context)  
  19.         {  
  20.              
  21.             //调用查询方法  
  22.             Query(context);  
  23.               
  24.         }  
  25.   
  26.         public bool IsReusable  
  27.         {  
  28.             get  
  29.             {  
  30.                 return false;  
  31.             }  
  32.         }  
  33.         /// <summary>  
  34.         /// 查询记录  
  35.         /// </summary>  
  36.         /// <param name="context"></param>  
  37.         public void Query(HttpContext context)  
  38.         {  
  39.   
  40.   
  41.             context.Response.ContentType = "text/plain";  
  42.             //===============================================================  
  43.             //获取查询条件:【用户id,开始时间,结束时间,关键字】  
  44.             string AdminName, startTime, endTime, QuanXian;  
  45.             AdminName = startTime = endTime = QuanXian = "";  
  46.             //获取前台传来的值  
  47.             if (null != context.Request.QueryString["AdminName"])  
  48.             {//获取前台传来的值  
  49.                 AdminName = context.Request.QueryString["AdminName"].ToString().Trim();  
  50.             }  
  51.             if (null != context.Request.QueryString["StartTime"])  
  52.             {  
  53.                 startTime = context.Request.QueryString["StartTime"].ToString().Trim();  
  54.             }  
  55.             if (null != context.Request.QueryString["EndTime"])  
  56.             {  
  57.                 endTime = context.Request.QueryString["EndTime"].ToString().Trim();  
  58.             }  
  59.             if (null != context.Request.QueryString["QuanXian"])  
  60.             {  
  61.                 QuanXian = context.Request.QueryString["QuanXian"].ToString().Trim();  
  62.             }  
  63.   
  64.             //================================================================  
  65.             //获取分页和排序信息:页大小,页码,排序方式,排序字段  
  66.             int pageRows, page;  
  67.             pageRows = 10;  
  68.             page = 1;  
  69.             string order, sort, oderby; order = sort = oderby = "";  
  70.             if (null != context.Request.QueryString["rows"])  
  71.             {  
  72.                 pageRows = int.Parse(context.Request.QueryString["rows"].ToString().Trim());  
  73.   
  74.             }  
  75.             if (null != context.Request.QueryString["page"])  
  76.             {  
  77.   
  78.                 page = int.Parse(context.Request.QueryString["page"].ToString().Trim());  
  79.   
  80.             }  
  81.             if (null != context.Request.QueryString["sort"])  
  82.             {  
  83.   
  84.                 order = context.Request.QueryString["sort"].ToString().Trim();  
  85.   
  86.             }  
  87.             if (null != context.Request.QueryString["order"])  
  88.             {  
  89.   
  90.                 sort = context.Request.QueryString["order"].ToString().Trim();  
  91.   
  92.             }  
  93.   
  94.   
  95.             //===================================================================  
  96.             //组合查询语句:条件+排序  
  97.             StringBuilder strWhere = new StringBuilder();  
  98.             if (AdminName != "")  
  99.             {  
  100.                 strWhere.AppendFormat(" WorkerRealName like '%{0}%' and ", AdminName);  
  101.             }  
  102.             if (QuanXian  != "")  
  103.             {  
  104.                 strWhere.AppendFormat(" AdminRightName like '%{0}%' and ", QuanXian);  
  105.             }  
  106.             if (startTime != "")  
  107.             {  
  108.                 strWhere.AppendFormat(" ActiveDate >= '{0}' and ", startTime);  
  109.             }  
  110.             if (endTime != "")  
  111.             {  
  112.                 strWhere.AppendFormat(" ActiveDate <= '{0}' and ", endTime);  
  113.             }  
  114.   
  115.             //删除多余的and  
  116.             int startindex = strWhere.ToString().LastIndexOf("and");//获取最后一个and的位置  
  117.             if (startindex >= 0)  
  118.             {  
  119.                 strWhere.Remove(startindex, 3);//删除多余的and关键字  
  120.             }  
  121.             if (sort != "" && order != "")  
  122.             {  
  123.                 //strWhere.AppendFormat(" order by {0} {1}", sort, order);//添加排序  
  124.                 oderby = order + " " + sort;  
  125.             }  
  126.             //DataSet ds = Bnotice.GetList(strWhere.ToString());  //调用不分页的getlist  
  127.   
  128.             //调用分页的GetList方法  
  129.             DataSet ds = admininfobll.GetListByPage(strWhere.ToString(), oderby, (page - 1) * pageRows + 1, page * pageRows);  
  130.             int count = admininfobll.GetRecordCount(strWhere.ToString());//获取条数  
  131.             string strJson = ToJson.Dataset2Json(ds, count);//DataSet数据转化为Json数据  
  132.             context.Response.Write(strJson);//返回给前台页面  
  133.             context.Response.End();  
  134.   
  135.         }  
  136. }  

注:不知道前台页面怎么接收数据,请看第一篇博文:基于asp.net + easyui框架,一步步学习easyui-datagrid——界面(一)

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

[csharp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  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 plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. public class ToJson  
  2.     {  
  3.  
  4.         #region DataSet转换成Json格式  
  5.         /// <summary>  
  6.         /// DataSet转换成Json格式    
  7.         /// </summary>    
  8.         /// <param name="ds">DataSet</param>   
  9.         /// <returns></returns>    
  10.         public static string Dataset2Json(DataSet ds, int total = -1)  
  11.         {  
  12.             StringBuilder json = new StringBuilder();  
  13.   
  14.             foreach (DataTable dt in ds.Tables)  
  15.             {  
  16.                 //{"total":5,"rows":[  
  17.                 json.Append("{"total":");  
  18.                 if (total == -1)  
  19.                 {  
  20.                     json.Append(dt.Rows.Count);  
  21.                 }  
  22.                 else  
  23.                 {  
  24.                     json.Append(total);  
  25.                 }  
  26.                 json.Append(","rows":[");  
  27.                 json.Append(DataTable2Json(dt));  
  28.                 json.Append("]}");  
  29.             } return json.ToString();  
  30.         }  
  31.         #endregion  
  32.  
  33.         #region dataTable转换成Json格式  
  34.         /// <summary>    
  35.         /// dataTable转换成Json格式    
  36.         /// </summary>    
  37.         /// <param name="dt"></param>    
  38.         /// <returns></returns>    
  39.         public static string DataTable2Json(DataTable dt)  
  40.         {  
  41.             StringBuilder jsonBuilder = new StringBuilder();  
  42.   
  43.             for (int i = 0; i < dt.Rows.Count; i++)  
  44.             {  
  45.                 jsonBuilder.Append("{");  
  46.                 for (int j = 0; j < dt.Columns.Count; j++)  
  47.                 {  
  48.                     jsonBuilder.Append(""");  
  49.                     jsonBuilder.Append(dt.Columns[j].ColumnName);  
  50.                     jsonBuilder.Append("":"");  
  51.                     jsonBuilder.Append(dt.Rows[i][j].ToString());  
  52.                     jsonBuilder.Append("",");  
  53.                 }  
  54.                 if (dt.Columns.Count > 0)  
  55.                 {  
  56.                     jsonBuilder.Remove(jsonBuilder.Length - 1, 1);  
  57.                 }  
  58.                 jsonBuilder.Append("},");  
  59.             }  
  60.             if (dt.Rows.Count > 0)  
  61.             {  
  62.                 jsonBuilder.Remove(jsonBuilder.Length - 1, 1);  
  63.             }  
  64.   
  65.             return jsonBuilder.ToString();  
  66.         }  
  67.         #endregion dataTable转换成Json格式  
  68.     }  



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

========================================================================================================================

基于asp.net+easyui框架的系列博文:

使用Jquery+EasyUI框架开发项目+下载+帮助--EasyUI的简介

Asp.net之真假分页大揭秘、使用AspNetPager实现真分页

Asp.net前端页面开发总结

Asp.net 一般处理程序+扩展

Asp.Net构架(Http请求处理流程)、Asp.Net 构架(Http Handler 介绍)、Asp.Net 构架(HttpModule 介绍)

基于asp.net + easyui框架,js实现上传图片之前判断图片格式,同时实现预览,兼容各种浏览器+下载

基于asp.net+ easyui框架,js提交图片,实现先上传图片再提交表单

基于asp.net + easyui框架,一步步学习easyui-datagrid——界面(一)

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

基于asp.net + easyui框架,一步步学习easyui-datagrid——实现添加、编辑、删除(三)

基于asp.net + easyui框架,一步步学习easyui-datagrid——完成,总结(四)

========================================================================================================================= 

对于json:不知道怎么传值?不知道返回什么样值?不知道如何拼接json串的童鞋有福了,给大家推荐一篇文章:

http://blog.csdn.net/gxq741718618/article/details/41130509

原文地址:https://www.cnblogs.com/zkwarrior/p/4847360.html