zoukankan      html  css  js  c++  java
  • jQuery ligerGrid 打造通用的分页排序查询表格(提供下载)

    一,ligerGrid是如何工作的。

     

    在没有开始做之前,需要先了解一下ligerGrid是如何工作的。简单来说,liger grid 就是提交准备好的数据到指定的目标请求数据,拿到数据以后,显示出来。

    所以问题在于发送什么数据,拿到什么数据。先来看看ligerGrid的参数:

       url: null,                          
            pageSize: 10,                        
            sortName : null,
            sortOrder:null,      
            root :'Rows',                       //数据源字段名
            record:'Total',                     //数据源记录数字段名
            pageParmName :'page',               //页索引参数名,(提交给服务器)
            pagesizeParmName:'pagesize',        //页记录数参数名,(提交给服务器)
            sortnameParmName:'sortname',        //页排序列名(提交给服务器)
            sortorderParmName:'sortorder',      //页排序方向(提交给服务器)


    发送什么数据

    page、pagesize、sortname、sortorder 这几个是默认发送到服务器的参数,可用于正确返回分页、排序后的数据。  如果需要查询,可能需要配置一下parms,格式如 parms:[{name:'wherestr',value:'status="active"'}] ,这样后台就可以收到这个参数了

    比如我在页面上这样配置:

    pageSize: 30,url: "service/BillListData.ashx?gridviewname=authors", sortName: 'au_id'

    后台收到的数据,将会是:

    拿到什么数据

    Rows、Total这两个是返回数据的默认字段名,Rows是数据的json格式,Total是记录的总数,需要的数据类似这样的:


     效果如下:

     

    二,存储过程

     

    CREATE PROCEDURE [dbo].[P_GridViewPager] (
        @recordTotal INT OUTPUT,            --输出记录总数
        @viewName VARCHAR(800),        --表名
        @fieldName VARCHAR(800) = '*',        --查询字段
        @keyName VARCHAR(200) = 'Id',            --索引字段
        @pageSize INT = 20,                    --每页记录数
        @pageNo INT =1,                    --当前页
        @orderString VARCHAR(200),        --排序条件
        @whereString VARCHAR(800) = '1=1'        --WHERE条件
    )
    AS
    BEGIN
         DECLARE @beginRow INT
         DECLARE @endRow INT
         DECLARE @tempLimit VARCHAR(200)
         DECLARE @tempCount NVARCHAR(1000)
         DECLARE @tempMain VARCHAR(1000)
    
         SET @beginRow = (@pageNo - 1) * @pageSize    + 1
         SET @endRow = @pageNo * @pageSize
         SET @tempLimit = 'rows BETWEEN ' + CAST(@beginRow AS VARCHAR) +' AND '+CAST(@endRow AS VARCHAR)
         
         --输出参数为总记录数
         SET @tempCount = 'SELECT @recordTotal = COUNT(*) FROM (SELECT '+@keyName+' FROM '+@viewName+' WHERE '+@whereString+') AS my_temp'
         EXECUTE sp_executesql @tempCount,N'@recordTotal INT OUTPUT',@recordTotal OUTPUT
           
         --主查询返回结果集
         SET @tempMain = 'SELECT * FROM (SELECT ROW_NUMBER() OVER ('+@orderString+') AS rows ,'+@fieldName+' FROM '+@viewName+' WHERE '+@whereString+') AS main_temp WHERE '+@tempLimit
         
         --PRINT @tempMain
         EXECUTE (@tempMain)
    END
    GO

    三,准备一个通用的ashx页面

    <%@ WebHandler Language="C#" Class="BillListData" %>
    using System;
    using System.Web; 
    using ligerUI.Utility.Common;
    using ligerUI.Utility.LigerGrid;
    public class BillListData : IHttpHandler {
        
        public void ProcessRequest (HttpContext context) {
            context.Response.ContentType = "text/plain";
            try
            {
                TryGetGridViewData();
            }
            catch (Exception err)
            {
                context.Response.Write("null");
            }
            context.Response.End();
        }
    
        public void TryGetGridViewData()
        {
            System.Web.HttpContext context = System.Web.HttpContext.Current;
            GridViewPager pager = new GridViewPager();
            string datajson = pager.GetDataJSON();
            context.Response.Write(datajson); 
        }
        public bool IsReusable {
            get {
                return false;
            }
        }
    
    }

     

    四,实现处理方法(接收分页排序信息,并返回正确的数据)

     

    public DataTable GetGridView(string gridViewName, string fieldName, string gridKeyName, int pageNo, int pageSize, string orderStr, string whereStr, ref int recordTotal)
            { 
                string sqlCommad = "P_GridViewPager"; 
                SqlParameter[] parms = new SqlParameter[]{
                    new SqlParameter("viewName",SqlDbType.VarChar,50),
                    new SqlParameter("fieldName",SqlDbType.VarChar,50),
                    new SqlParameter("keyName",SqlDbType.VarChar,50),
                    new SqlParameter("pageNo",SqlDbType.Int),
                    new SqlParameter("pageSize",SqlDbType.Int),
                    new SqlParameter("orderString",SqlDbType.VarChar,50),
                    new SqlParameter("whereString",SqlDbType.VarChar,50),
                    new SqlParameter("recordTotal",SqlDbType.VarChar,50)
                };
                parms[0].Value = gridViewName;
                parms[1].Value = fieldName;
                parms[2].Value = gridKeyName;
                parms[3].Value = pageNo;
                parms[4].Value = pageSize;
                parms[5].Value = orderStr;
                parms[6].Value = whereStr;
                parms[7].Direction = ParameterDirection.Output; 
                DataTable dt = SqlHelper.ExecuteDataset(DataBaseHelper.connectionstring, CommandType.StoredProcedure, sqlCommad, parms).Tables[0];
                recordTotal = CommonHelper.ObjToInt(parms[7].Value);
                return dt;
            }

    public string GetDataJSON()
            {
                System.Web.HttpContext ctx = System.Web.HttpContext.Current;
    
                int pageno = CommonHelper.ObjToInt(ctx.Request.Params["page"]);
                int pagesize = CommonHelper.ObjToInt(ctx.Request.Params["pagesize"]);
                string sortname = CommonHelper.ObjToStr(ctx.Request.Params["sortname"]);
                string sortorder = CommonHelper.ObjToStr(ctx.Request.Params["sortorder"]);
                string gridviewname = CommonHelper.ObjToStr(ctx.Request.Params["gridviewname"]);
                string gridsearch = CommonHelper.ObjToStr(ctx.Request.Params["gridsearch"]);
                if (string.IsNullOrEmpty(gridviewname))
                    throw new ArgumentNullException("Grid视图名[gridsearch]不能为空"); 
                if (pageno == 0 || pagesize == 0)
                {
                    if (string.IsNullOrEmpty(sortorder) && string.IsNullOrEmpty(gridsearch))
                    {
                        return GetDataJSON(gridviewname);
                    }
                    if(string.IsNullOrEmpty(sortorder))
                        return GetDataJSON(gridviewname, gridsearch);
                    if (string.IsNullOrEmpty(gridsearch))
                        return GetDataJSONUseSQL(string.Format("select * from {0} order by {1} {2}", gridviewname, sortname, sortorder.ToLower() == "asc" ? "asc" : "desc"));
                    return GetDataJSON(gridviewname, gridsearch, string.Format("order by {0} {1}", sortname, sortorder));
                }
                if (string.IsNullOrEmpty(gridsearch) && string.IsNullOrEmpty(sortname))
                {
                    return GetDataJSON(gridviewname, pageno, pagesize);
                }
                if (string.IsNullOrEmpty(gridsearch) && !string.IsNullOrEmpty(sortname))
                {
                    return GetDataJSON(gridviewname, pageno, pagesize, sortname, sortorder);
                }
                if (!string.IsNullOrEmpty(gridsearch) && string.IsNullOrEmpty(sortname))
                {
                    return GetDataJSON(gridviewname, pageno, pagesize, gridsearch);
                }
                if (!string.IsNullOrEmpty(gridsearch) && !string.IsNullOrEmpty(sortname))
                {
                    return GetDataJSON(gridviewname, pageno, pagesize, sortname, sortorder, gridsearch);
                }
                return @"{""Rows"":[],""Total"":""0""}";
            }



  • 相关阅读:
    正敲着代码,鼠标坏了!
    DB2 OLAP函数的使用(转)
    修剪矩形
    classpath和环境变量设置(转)
    MyEclipse断点调试JavaScript浅析(转)
    Onunload和onbeforeunload方法的异同
    db2中的coalesce函数(转)
    db2:根据TABLEID找table
    [转]DB2行列转换
    DB2删除数据时的小技巧
  • 原文地址:https://www.cnblogs.com/huangjihua/p/4125173.html
Copyright © 2011-2022 走看看