ligerGrid Ajax分页获取排序 详细介绍

刚开始用ligerGrid作分页排序的时候比较头疼,查找,上下页等处理后台都没法准确的获取前台查找控件里面的值,API里面也没有什么详细的解释

最后网上找了很久感觉都不是很全的资料,现在把这个结合说下 给自己做个笔记

先上个果图

做分页一般需要注意几点的就是,页大小,当前页,排序字段,排序类型(倒叙或顺序),查询条件, 所以这里写了一个公共方法返回所需的排序数据 和查询条件下总数据条数

这个是调用的时候处理的一个方法

/// <summary>
        /// 得到一页日志数据
        /// </summary>
        /// <param name="allCount"></param>
        /// <param name="pageSize"></param>
        /// <param name="pageIndex"></param>
        /// <param name="title"></param>
        /// <param name="type"></param>
        /// <param name="date1"></param>
        /// <param name="date2"></param>
        /// <param name="userName"></param>
        /// <param name="orderBy"></param>
        /// <returns></returns>
        public List<Solution.HPK.CoreArea.Model.Log> GetPagerData(out long allCount, int pageSize = 15, int pageIndex = 1, string title = "", string type = "", string date1 = "", string date2 = "", string userName = "", string orderBy = "")
        {
            StringBuilder where = new StringBuilder();
            List<SqlParameter> parList = new List<SqlParameter>();
            if (!string.IsNullOrEmpty(title))
            {
                where.Append(" AND CHARINDEX(@Title,Title)>0 ");
                parList.Add(new SqlParameter("@Title", SqlDbType.NVarChar) { Value = title });
            }
            if (!string.IsNullOrEmpty(type))
            {
                where.Append(" AND [email protected] ");
                parList.Add(new SqlParameter("@Type", SqlDbType.NVarChar) { Value = type });
            }
            if (date1.IsDateTime())
            {
                where.Append(" AND WriteTime>[email protected] ");
                parList.Add(new SqlParameter("@Date1", SqlDbType.DateTime) { Value = date1.ToDateTime().ToString("yyyy-MM-dd 00:00:00") });
            }
            if (date2.IsDateTime())
            {
                where.Append(" AND WriteTime<[email protected] ");
                parList.Add(new SqlParameter("@Date2", SqlDbType.DateTime) { Value = date2.ToDateTime().AddDays(1).ToString("yyyy-MM-dd 00:00:00") });
            }
            if (!userName.IsNullOrEmpty())
            {
                where.Append(" AND UserName like '%" + userName + "%' ");
            }
            string sql = Solution.HPK.CoreArea.Utility.DataBase.DBHelper.GetPaerSql("Log", "ID,Title,Type,WriteTime,UserID,UserName,IPAddress,URL,Contents,Others,OldXml,NewXml", where.ToString(), orderBy, pageSize, pageIndex, out allCount, parList.ToArray());

            SqlDataReader dataReader = Solution.HPK.CoreArea.Utility.DataBase.DBHelper.ExecSelect(sql, parList.ToArray());
            List<Solution.HPK.CoreArea.Model.Log> List = DataReaderToList(dataReader);
            dataReader.Close();
            return List;
        }

里面有个Solution.HPK.CoreArea.Utility.DataBase.DBHelper.GetPaerSql方法就是所用的公用方法

/// <summary>
        /// 得到分页sql
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public static string GetPaerSql(string table, string fileds, string where, string order, int size, int number, out long count, SqlParameter[] param = null)
        {
            string where1 = string.Empty;
            if (where.IsNullOrEmpty())
            {
                where1 = "";
            }
            else
            {
                where1 = where.Trim();
                if (where1.StartsWith("and", StringComparison.CurrentCultureIgnoreCase))
                {
                    where1 = where1.Substring(3);
                }
            }
            string where2 = where1.IsNullOrEmpty() ? "" : "where " + where1;
            string sql = string.Format("select {0},ROW_NUMBER() OVER(ORDER BY {1}) as PagerAutoRowNumber from {2} {3}", fileds, order, table, where2);

            string count1 = GetFieldValue(string.Format("select count(*) from {0} {1}", table, where2), param);
            long i;
            count = count1.IsLong(out i) ? i : 0;

            StringBuilder sql1 = new StringBuilder();
            sql1.AppendFormat("select {0} from (", fileds.IsNullOrEmpty() ? "*" : fileds);
            sql1.Append(sql);
            sql1.AppendFormat(") as PagerTempTable");
            if (count > size)
            {
                //(第几页-1)*页面大小+1 an 第几页*页面大小
                sql1.AppendFormat(" where PagerAutoRowNumber between {0} and {1}", (number - 1) * size + 1, number * size);
            }

            return sql1.ToString();
        }

这个方法可以直接拿去使用,具体的参数也一看就能懂的

后台获取的数据的核心方法有了 下面就是前台UI的设计

var mainGrid =$("#mainGrid").ligerGrid({
                columns: [
                { display: '序号', name: 'Index', align: 'center', width: 40 },
                { display: '标题', name: 'Title', align: 'left' },
                { display: '分类', name: 'Type', align: 'center', width: 140 },
                { display: 'IP地址', name: 'IPAddress', align: 'center', width: 140 },
                { display: '创建日期', name: 'WriteTime', align: 'center', width: 140 },
                { display: '操作员', name: 'UserName', align: 'center', width: 120 },
                ], usePager: true, height: '99%', checkbox: true, rownumbers: false,
                pageSizeOptions: [16, 32, 48], pageSize: 16, page: 1,
                url: "Handler/GetPage.ashx", sortName: 'WriteTime', sortOrder: 'Desc',
                onToFirst: onToFirst,
                onToPrev: onToPrev,
                onToNext: onToNext,
                onToLast: onToLast
            });

ligerGrid这个方法不懂的可以去参考Api,着重需要注意

url属性 是用来Ajax请求的一个路径

sortName

sortOrder 这2个属性是默认按照哪个字段排序的,如果不写的话得再后台去赋默认值,建议直接在前台写

onToFirst,onToPrev,onToNext,onToLast首页,上页,下页,末页,这些事件 必须在前台手动处理,要不然界面所需要的查询条件就没法传送到后台

具体实现起来也很简单,写一个默认赋值Ajax参数的方法 前面4个都调用那个方法就好了

//设置Ajax参数
        function setParms() {
            mainGrid.setParm("title", $("#txtTitle").val());
            mainGrid.setParm("type", $("#txtType").val() == "==全部==" ? "" : $("#txtType").val());
            mainGrid.setParm("userName", $("#txtUserName").val());
            mainGrid.setParm("startDate", $("#txtStartDate").val());
            mainGrid.setParm("endDate", $("#txtEndDate").val());
        }
//首页
            function onToFirst() {
                setParms();
            }
            //末页
            function onToLast() {
                setParms();
            }
            //上一页
            function onToPrev() {
                setParms();
            }
            //下一页
            function onToNext() {
                setParms();
            }

点击查询按钮的时候需要注意一下

 //查询按钮
            $("#btnSearch").ligerButton({
                click: function () {
                    //重置查询页数,从第一页开始
                    mainGrid.set({ page: 1, newPage: 1 });
                    //设置Ajax参数
                    setParms();
                    //重新请求
                    mainGrid.loadData(mainGrid.url);
                }
            });

//上面这个句  mainGrid.set({ page: 1, newPage: 1 });

是捉摸了很久才弄好的

主要是为了解决一个问题 比如当前页为3页 总页数为8页 如果点击查找不加mainGrid.set({ page: 1, newPage: 1 });这个

他结果会定在第3页,这样就会有问题,一般点击查找都是初始为第一页

前台这么多大致就好了下面就是到后台

ligerGuid的Ajax默认是post提交方式,并且默认把当前页,页大小,排序字段,排序类型闯过去 直接接受就好了

//当前页
            int page = context.Request.Form["page"].ToInt32();
            //页大小
            int pageSize = context.Request.Form["pageSize"].ToInt32();
            //排序字段
            string sortName = context.Request.Form["sortName"];
            //排序顺序
            string sortOrder = context.Request.Form["sortOrder"];

然后获取前台床过来的查询参数 返回一个{Total:xxxx,Rows:[]}这样的json对象就好了  Total  和Rows的格式是必须存在的要不然ligerGuid不认

public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            //当前页
            int page = context.Request.Form["page"].ToInt32();
            //页大小
            int pageSize = context.Request.Form["pageSize"].ToInt32();
            //排序字段
            string sortName = context.Request.Form["sortName"];
            //排序顺序
            string sortOrder = context.Request.Form["sortOrder"];
            //其他自定义的Ajax参数
            string title = context.Request.Form["title"];
            string type = context.Request.Form["type"];
            string userName = context.Request.Form["userName"];
            string startDate = context.Request.Form["startDate"];
            string endDate = context.Request.Form["endDate"];

            LogBll logBll = new LogBll();
            //查询数据的总数
            long allCount;
            //分页查找数据
            var logList = logBll.GetPagerData(out allCount, pageSize, page, title, type, startDate, endDate, userName, sortName + " " + sortOrder);
            //返回的Json数组
            List<string> jsonList = new List<string>();
            for (int i = 0; i < logList.Count; i++)
            {
                var log = logList[i];
                jsonList.Add("{\"ID\":\"" + log.ID + "\",\"Index\":\"" + ((i + 1) + (page - 1) * pageSize) + "\",\"Title\":\"" + log.Title + "\",\"Type\":\"" + log.Type + "\",\"IPAddress\":\"" + log.IPAddress + "\",\"WriteTime\":\"" + log.WriteTime.ToString("yyyy-MM-dd HH:mm:ss") + "\",\"UserName\":\"" + log.UserName + "\"}");
            }
            context.Response.Write("{\"Total\":\"" + allCount + "\",\"Rows\":[" + string.Join(",", jsonList) + "]}");
        }

好了 就这么多了,完全符合分页、查找、字段排序功能,这一条代码都不缺 可以直接使用

时间: 2024-12-26 00:40:46

ligerGrid Ajax分页获取排序 详细介绍的相关文章

ThinkPHP页面跳转、Ajax技巧详细介绍(十八)

原文:ThinkPHP页面跳转.Ajax技巧详细介绍(十八) ThinkPHP页面跳转.Ajax技巧详细介绍 一.页面跳转 $this->success('查询成功',U('User/test')); ├─//跳当前模块方法下: ├─ $this->success('查询成功','test'); └─//跳到 指定跳转模块方法下 this->success('查询成功',U('User/test')); $this->error('查询失败,3秒后跳会之前的页面/上一页'); //

JQuery中的AJAX参数详细介绍

Jquery中AJAX参数详细介绍 参数名 类型 描述 url String    (默认: 当前页地址) 发送请求的地址. type String (默认: "GET") 请求方式 ("POST" 或 "GET"), 默认为 "GET".注意:其它 HTTP 请求方法,如 PUT 和 DELETE 也可以使用,但仅部分浏览器支持. timeout Number 设置请求超时时间(毫秒).此设置将覆盖全局设置. async B

ajax json 表格排序,分页,自定义每页数量

ajax json 表格排序,分页,自定义每页数量 点击表头可以排序,按照升序或者降序,另外支持多列排序 设置每页数量 演示 XML/HTML Code <table id='example3'> <thead> <tr> <th>ID</th> <th>First name</th> <th>Last name</th> <th>Grade</th> <th>G

jquery和ajax的关系详细介绍【转】

jquery和ajax的关系详细介绍 http://www.jb51.net/article/43965.htm

ajax json 表格排序,分页,自己定义每页数量

ajax json 表格排序.分页,自己定义每页数量 ?点击表头能够排序.依照升序或者降序,另外支持多列排序 设置每页数量 演示 ? XML/HTML Code <table?id='example3'>?? ?? <thead>?? <tr>?? ?<th>ID</th>?? ?<th>First?name</th>?? ?<th>Last?name</th>?? ?<th>Grade

使用插件bootstrap-table实现表格记录的查询、分页、排序等处理

在业务系统开发中,对表格记录的查询.分页.排序等处理是非常常见的,在Web开发中,可以采用很多功能强大的插件来满足要求,且能极大的提高开发效率,本随笔介绍这个bootstrap-table是一款非常有名的开源表格插件,在很多项目中广泛的应用.Bootstrap-table插件提供了非常丰富的属性设置,可以实现查询.分页.排序.复选框.设置显示列.Card view视图.主从表显示.合并列.国际化处理等处理功能,而且该插件同时也提供了一些不错的扩展功能,如移动行.移动列位置等一些特殊的功能,插件可

struts详细介绍

Struts2 1. 目录 1.目录 2.MVC 3.STRUTS2解析 4.标签 5.OGNL 6.国际化 7.类型转换 8.校验 9. 拦截器 10.上传与下载 11.STRUTS2与对JSON的支持 2. MVC 把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller).MVC模式最早由Trygve Reenskaug在1978年提出,在20世纪80年代为程序语言Smalltalk发明的一种软件设计模式.MVC模式的目的是实现一种动态的程式设计,使后

基于Metronic的Bootstrap开发框架经验总结(18)-- 在代码生成工具Database2Sharp中集成对Bootstrap-table插件的分页及排序支持

在我们开发系统界面,包括Web和Winform的都一样,主要的界面就是列表展示主界面,编辑查看界面,以及一些辅助性的如导入界面,选择界面等,其中列表展示主界面是综合性的数据展示界面,一般往往需要对记录进行合理的分页,集成各种增删改查的按钮等功能.随着开发项目的需求辩护,对数据记录分页展示.排序等功能都是常态的要求,因此在代码生成工具中调整了主列表界面的列表展示插件为Bootstrap-table插件,本篇随笔主要介绍在代码生成工具Database2Sharp中集成对Bootstrap-table

MongoDB常用命令及例子详细介绍(三)

常用命令,及其高级命令使用介绍 一:增删改查的高级应用详细介绍: 增:***插入的时候c1不在的话将自动创建*** 不管插入那条记录都会自动给带个值id 自增主键唯一 insert 和 save(当id冲突是则修改,否则插入) 一:id主键不冲突的情况没区别 db.c1.insert({name:"leyangjun"}); db.c1.insert({name:"leyangjun"}); insert插入的值id都是唯一的,不会主键id冲突 db.c1.save