zoukankan      html  css  js  c++  java
  • 基于asp.net + easyui框架,一步步学习easyui-datagrid——实现分页和搜索(二)

          目录:

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

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

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

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


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

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

           

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

     

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


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


    搜索的js代码

            //获取参数     
             function getQueryParams(queryParams) {
                 var StartTime = $("#StartTime").datebox("getValue");
                 var EndTime = $("#EndTime").datebox("getValue");             
                 var AdminName = document.getElementById("AdminName").value;
                 var QuanXian = document.getElementById("quanxian").value;
    
                 //$("#quanxian").combobox("getValue");
    
                 queryParams.StartTime = StartTime;
                 queryParams.EndTime = EndTime;
                 queryParams.AdminName = AdminName;
                 queryParams.QuanXian = QuanXian;
    
                 return queryParams;
             
             }
                //增加查询参数,重新加载表格
                function reloadgrid() {
    
                    //查询参数直接添加在queryParams中    
                    var queryParams = $('#tt').datagrid('options').queryParams;
                    getQueryParams(queryParams);
                    $('#tt').datagrid('options').queryParams = queryParams;
                    $("#tt").datagrid('reload');
    
                }

    一般处理程序SetAdmin.ashx

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Data;
    using System.Text;
    
    namespace GoodCommunitySystem.admin.UserManager
    {
        /// <summary>
        /// SetAdmin 的摘要说明
        /// </summary>
        public class SetAdmin : IHttpHandler
        {
            BLL.adminInfoBLL admininfobll = new BLL.adminInfoBLL();
            Entity.adminInfoEntity enadmininfo = new Entity.adminInfoEntity();
    
            public void ProcessRequest(HttpContext context)
            {
               
                //调用查询方法
                Query(context);
                
            }
    
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
            /// <summary>
            /// 查询记录
            /// </summary>
            /// <param name="context"></param>
            public void Query(HttpContext context)
            {
    
    
                context.Response.ContentType = "text/plain";
                //===============================================================
                //获取查询条件:【用户id,开始时间,结束时间,关键字】
                string AdminName, startTime, endTime, QuanXian;
                AdminName = startTime = endTime = QuanXian = "";
                //获取前台传来的值
                if (null != context.Request.QueryString["AdminName"])
                {//获取前台传来的值
                    AdminName = context.Request.QueryString["AdminName"].ToString().Trim();
                }
                if (null != context.Request.QueryString["StartTime"])
                {
                    startTime = context.Request.QueryString["StartTime"].ToString().Trim();
                }
                if (null != context.Request.QueryString["EndTime"])
                {
                    endTime = context.Request.QueryString["EndTime"].ToString().Trim();
                }
                if (null != context.Request.QueryString["QuanXian"])
                {
                    QuanXian = context.Request.QueryString["QuanXian"].ToString().Trim();
                }
    
                //================================================================
                //获取分页和排序信息:页大小,页码,排序方式,排序字段
                int pageRows, page;
                pageRows = 10;
                page = 1;
                string order, sort, oderby; order = sort = oderby = "";
                if (null != context.Request.QueryString["rows"])
                {
                    pageRows = int.Parse(context.Request.QueryString["rows"].ToString().Trim());
    
                }
                if (null != context.Request.QueryString["page"])
                {
    
                    page = int.Parse(context.Request.QueryString["page"].ToString().Trim());
    
                }
                if (null != context.Request.QueryString["sort"])
                {
    
                    order = context.Request.QueryString["sort"].ToString().Trim();
    
                }
                if (null != context.Request.QueryString["order"])
                {
    
                    sort = context.Request.QueryString["order"].ToString().Trim();
    
                }
    
    
                //===================================================================
                //组合查询语句:条件+排序
                StringBuilder strWhere = new StringBuilder();
                if (AdminName != "")
                {
                    strWhere.AppendFormat(" WorkerRealName like '%{0}%' and ", AdminName);
                }
                if (QuanXian  != "")
                {
                    strWhere.AppendFormat(" AdminRightName like '%{0}%' and ", QuanXian);
                }
                if (startTime != "")
                {
                    strWhere.AppendFormat(" ActiveDate >= '{0}' and ", startTime);
                }
                if (endTime != "")
                {
                    strWhere.AppendFormat(" ActiveDate <= '{0}' and ", endTime);
                }
    
                //删除多余的and
                int startindex = strWhere.ToString().LastIndexOf("and");//获取最后一个and的位置
                if (startindex >= 0)
                {
                    strWhere.Remove(startindex, 3);//删除多余的and关键字
                }
                if (sort != "" && order != "")
                {
                    //strWhere.AppendFormat(" order by {0} {1}", sort, order);//添加排序
                    oderby = order + " " + sort;
                }
                //DataSet ds = Bnotice.GetList(strWhere.ToString());  //调用不分页的getlist
    
                //调用分页的GetList方法
                DataSet ds = admininfobll.GetListByPage(strWhere.ToString(), oderby, (page - 1) * pageRows + 1, page * pageRows);
                int count = admininfobll.GetRecordCount(strWhere.ToString());//获取条数
                string strJson = ToJson.Dataset2Json(ds, count);//DataSet数据转化为Json数据
                context.Response.Write(strJson);//返回给前台页面
                context.Response.End();
    
            }
    }

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

     

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

                    /// <summary>
    		/// 获取记录总数
    		/// </summary>
    		public int GetRecordCount(string strWhere)
    		{
    			StringBuilder strSql=new StringBuilder();
                strSql.Append("select count(1) FROM V_admin_MgPersonFiles ");
    			if(strWhere.Trim()!="")
    			{
    				strSql.Append(" where "+strWhere);
    			}
    			object obj = DbHelperSQL.GetSingle(strSql.ToString());
    			if (obj == null)
    			{
    				return 0;
    			}
    			else
    			{
    				return Convert.ToInt32(obj);
    			}
    		}
    		/// <summary>
    		/// 分页获取数据列表
    		/// </summary>
    		public DataSet GetListByPage(string strWhere, string orderby, int startIndex, int endIndex)
    		{
    			StringBuilder strSql=new StringBuilder();
    			strSql.Append("SELECT * FROM ( ");
    			strSql.Append(" SELECT ROW_NUMBER() OVER (");
    			if (!string.IsNullOrEmpty(orderby.Trim()))
    			{
    				strSql.Append("order by T." + orderby );
    			}
    			else
    			{
    				strSql.Append("order by T.AdminID desc");
    			}
                strSql.Append(")AS Row, T.*  from V_admin_MgPersonFiles T ");
    			if (!string.IsNullOrEmpty(strWhere.Trim()))
    			{
    				strSql.Append(" WHERE " + strWhere);
    			}
    			strSql.Append(" ) TT");
    			strSql.AppendFormat(" WHERE TT.Row between {0} and {1}", startIndex, endIndex);
    			return DbHelperSQL.Query(strSql.ToString());
    		}
    


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

    public class ToJson
        {
    
            #region DataSet转换成Json格式
            /// <summary>
            /// DataSet转换成Json格式  
            /// </summary>  
            /// <param name="ds">DataSet</param> 
            /// <returns></returns>  
            public static string Dataset2Json(DataSet ds, int total = -1)
            {
                StringBuilder json = new StringBuilder();
    
                foreach (DataTable dt in ds.Tables)
                {
                    //{"total":5,"rows":[
                    json.Append("{"total":");
                    if (total == -1)
                    {
                        json.Append(dt.Rows.Count);
                    }
                    else
                    {
                        json.Append(total);
                    }
                    json.Append(","rows":[");
                    json.Append(DataTable2Json(dt));
                    json.Append("]}");
                } return json.ToString();
            }
            #endregion
    
            #region dataTable转换成Json格式
            /// <summary>  
            /// dataTable转换成Json格式  
            /// </summary>  
            /// <param name="dt"></param>  
            /// <returns></returns>  
            public static string DataTable2Json(DataTable dt)
            {
                StringBuilder jsonBuilder = new StringBuilder();
    
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    jsonBuilder.Append("{");
                    for (int j = 0; j < dt.Columns.Count; j++)
                    {
                        jsonBuilder.Append(""");
                        jsonBuilder.Append(dt.Columns[j].ColumnName);
                        jsonBuilder.Append("":"");
                        jsonBuilder.Append(dt.Rows[i][j].ToString());
                        jsonBuilder.Append("",");
                    }
                    if (dt.Columns.Count > 0)
                    {
                        jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
                    }
                    jsonBuilder.Append("},");
                }
                if (dt.Rows.Count > 0)
                {
                    jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
                }
    
                return jsonBuilder.ToString();
            }
            #endregion dataTable转换成Json格式
        }


              这篇博客主要给大家介绍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



  • 相关阅读:
    Ubuntu18.04下cuda和cudnn安装
    NVIDIA显卡驱动安装
    ultraiso(软碟通)制作u盘启动盘
    [转载]如何根据相机的参数知道摄像机的内参数矩阵
    C++ Primer : 第十三章 : 拷贝控制之拷贝、赋值与销毁
    用栈操作实现队列的操作
    C++ Primer : 第十二章 : 文本查询程序
    C++ Primer : 第十二章 : 动态内存之allocator类
    C++ Primer : 第十二章 : 动态内存之动态数组
    C++ Primer : 第十二章 : 动态内存之unique_ptr和weak_ptr
  • 原文地址:https://www.cnblogs.com/ainima/p/6331025.html
Copyright © 2011-2022 走看看