zoukankan      html  css  js  c++  java
  • sql2005存储过程分页及ASP.NET分页类的实现

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data;
    using System.Data.SqlClient;
    using System.Configuration;
    using CerEgip.DAL;
    namespace CerEgip.Common
    {
        
    /// <summary>
        
    /// 分页类,通过存储过程进行分页
        
    /// </summary>
        public class Pager
        {
            
    #region 参数
            
    private int pageIndex = 1;
            
    private int recordCount = 0;
            
    private int pageSize = 20;
            
    private int pageCount = 0;
            
    private int rowCount = 0;
            
    private string tableName = "";
            
    private string whereCondition = "1=1";
            
    private string selectStr = "*";
            
    private string order = "";
            
    private string procedure = "pager";
            
    private bool orderType = true;
            
    private string _FirstStr = "";
            
    private string _PrevStr = "";
            
    private string _NextStr = "";
            
    private string _LastStr = "";
            
    private string _TurnUrlStr = "";
            
    private string _Options = "";
            
    private string strCountww = "";  //共N条信息
            private string strPageww = "";    //第N页/共N页    
            private string strTurnww;  //跳转控件
            private string pageindexName = "page";



            
    /// <summary>
            
    /// 所要操作的存储过程名称,已有默认的分页存储过程
            
    /// </summary>
            public string Procedure
            {
                
    get
                {
                    
    return this.procedure;
                }
                
    set
                {
                    
    if (value == null || value.Length <= 0)
                    {
                        
    this.procedure = "pager";
                    }
                    
    else
                    {
                        
    this.procedure = value;
                    }
                }
            }


            
    /// <summary>
            
    /// 当前所要显示的页面数
            
    /// </summary>
            public int PageIndex
            {
                
    get
                {
                    
    return this.pageIndex;
                }
                
    set
                {
                    
    this.pageIndex = value;
                }
            }


            
    /// <summary>
            
    /// 总的页面数
            
    /// </summary>
            public int PageCount
            {
                
    get
                {
                    
    return this.pageCount;
                }
                
    set
                {
                    
    this.pageCount = value;
                }
            }


            
    /// <summary>
            
    /// 总行数
            
    /// </summary>
            public int RecordCount
            {
                
    get
                {
                    
    return this.recordCount;
                }
                
    set
                {
                    
    this.recordCount = value;
                }
            }


            
    /// <summary>
            
    /// 每页条数
            
    /// </summary>
            public int PageSize
            {
                
    get
                {
                    
    return this.pageSize;
                }
                
    set
                {
                    
    this.pageSize = value;
                }
            }


            
    /// <summary>
            
    /// 表名称
            
    /// </summary>
            public string TableName
            {
                
    get
                {
                    
    return tableName;
                }
                
    set
                {
                    
    this.tableName = value;
                }
            }


            
    /// <summary>
            
    /// 条件查询
            
    /// </summary>
            public string WhereCondition
            {
                
    get
                {
                    
    return whereCondition;
                }
                
    set
                {
                    whereCondition 
    = value;
                }
            }


            
    /// <summary>
            
    /// 查询目标(搜索目标),比如:AddTime AS 时间,ID AS 编号
            
    /// </summary>
            public string SelectStr
            {
                
    get
                {
                    
    return selectStr;
                }
                
    set
                {
                    selectStr 
    = value;
                }
            }


            
    /// <summary>
            
    /// 排序表达式
            
    /// </summary>
            public string Order
            {
                
    get
                {
                    
    return order;
                }
                
    set
                {
                    order 
    = value;
                }
            }
            
    /// <summary>
            
    /// 排序类型 true:asc false:desc
            
    /// </summary>
            public bool OrderType
            {
                
    get
                {
                    
    return orderType;
                }
                
    set
                {
                    orderType 
    = value;
                }
            }
            
    /// <summary>
            
    /// 得到当前返回的数量
            
    /// </summary>
            public int RowCount
            {
                
    get
                {
                    
    return this.rowCount;
                }
            }
            
    /// <summary>
            
    /// 首页 显示样式
            
    /// </summary>
            public string FirstStr
            {
                
    get { return _FirstStr; }
                
    set { _FirstStr = value; }
            }

            
    /// <summary>
            
    /// 上一页 显示样式
            
    /// </summary>
            public string PrevStr
            {
                
    get { return _PrevStr; }
                
    set { _PrevStr = value; }
            }

            
    /// <summary>
            
    /// 下一页 显示样式
            
    /// </summary>
            public string NextStr
            {
                
    get { return _NextStr; }
                
    set { _NextStr = value; }
            }
            
    /// <summary>
            
    /// 尾页 显示样式
            
    /// </summary>
            public string LastStr
            {
                
    get { return _LastStr; }
                
    set { _LastStr = value; }
            }
            
    /// <summary>
            
    /// 跳转 的url链接
            
    /// </summary>
            public string TurnUrlStr
            {
                
    get { return _TurnUrlStr; }
                
    set { _TurnUrlStr = value; }
            }
            
    /// <summary>
            
    /// 跳转的url链接的参数前面不要加问号和与号
            
    /// </summary>
            public string Options
            {
                
    get { return _Options; }
                
    set { _Options = value; }
            }
            
    /// <summary>
            
    /// 分页参数名称
            
    /// </summary>
            public string PageIndexName
            {
                
    get { return pageindexName; }
                
    set { pageindexName = value; }
            }
            
    #endregion 参数
            
    /// <summary>
            
    /// 分页查寻结果
            
    /// </summary>
            public DataTable GetDatas(int pageIndex)
            {
                
    this.pageIndex = pageIndex;
                Pager pager 
    = this;
                DataTable returnTb 
    = Pagination(ref pager).Tables[0];
                
    this.rowCount = returnTb.Rows.Count;
                
    return returnTb;
            }

            
    /// <summary>
            
    /// 分页操作存储过程函数
            
    /// </summary>
            
    /// <param name="pager">Pager</param>
            
    /// <returns>返回DataSet</returns>
            private DataSet Pagination(ref Pager pager)
            {
                SqlParameter[] par 
    = new SqlParameter[8];
                par[
    0= new SqlParameter("@TableName",SqlDbType.NVarChar,200);
                par[
    0].Value = pager.TableName;
                par[
    1= new SqlParameter("@orderBy", SqlDbType.NVarChar, 200);
                par[
    1].Value = pager.Order;
                par[
    2= new SqlParameter("@fieldlist",SqlDbType.NVarChar,200);
                par[
    2].Value = pager.SelectStr;
                par[
    3= new SqlParameter("@WhereCondition", SqlDbType.NVarChar, 200);
                par[
    3].Value = pager.WhereCondition;
                par[
    4= new SqlParameter("@PageIndex",SqlDbType.Int);
                par[
    4].Value = pager.pageIndex;
                par[
    5= new SqlParameter("@pageSize",SqlDbType.Int);
                par[
    5].Value = pager.PageSize;
                par[
    6= new SqlParameter("@RecordCount",SqlDbType.Int);
                par[
    6].Direction = ParameterDirection.InputOutput;
                par[
    7= new SqlParameter("@PageCount",SqlDbType.Int);
                par[
    7].Direction = ParameterDirection.InputOutput;
                DataSet ds 
    = SqlHelper.ExecuteDataset(CommandType.StoredProcedure,pager.Procedure,par);
                pager.RecordCount 
    = (int)par[6].Value;
                pager.pageCount 
    = (int)par[7].Value;
                
    return ds;
            }
            
    #region 返回分页后的页码显示
            
    /// <summary>
            
    /// 返回分页后的页码显示
            
    /// </summary>
            
    /// <param name="bolCount">是否显示 共N条信息</param>
            
    /// <param name="bolPage">是否显示 第N页/共N页</param>
            
    /// <param name="bolFirst">是否显示 首页</param>
            
    /// <param name="bolLast">是否显示 尾页</param>
            
    /// <param name="bolTurn">是否显示 跳转控件</param>
            
    /// <param name="IsChinese">是否 用中文显示</param>
            
    /// <param name="intStyle">样式选择 1:字符 2:符号</param>
            
    /// <param name="intShowNum">每页显示多少个数字</param>
            
    /// <param name="isHtml">是否HTML分页</param>
            
    /// <param name="exName">如果为HTML分页,要输入HTML后缀名</param>
            
    /// <returns>返回分页后的页码显示</returns>
            public string GetShowPageStr(bool bolCount, bool bolPage, bool bolFirst, bool bolLast, bool bolTurn, bool IsChinese, int intStyle, int intShowNum,bool isHtml,string exName)
            {
                
    string strPageShowww = "";
                
    string _FirstStr2 = "";
                
    string _PrevStr2 = "";
                
    string _NextStr2 = "";
                
    string _LastStr2 = "";

                 
    #region 公共处理
                
    //总页数
                pageCount = (recordCount + pageSize - 1/ pageSize;

                
    //超出最小页码
                if (pageIndex < 1)
                {
                    pageIndex 
    = 1;
                }

                
    //超出最大页码
                if (pageIndex > pageCount)
                {
                    pageIndex 
    = pageCount;
                }


                
    if (IsChinese)//中文分页
                {
                    
    //跳转
                    strTurnww = "<input value='" + pageIndex.ToString() + "' id='txtPageGo' name='txtPageGo' type='text' style='35px;'><input name='btnGo' type='button' id='btnGo' value='跳转' onclick=\"javascript:window.location.href='" + _TurnUrlStr + "?Page=' + document.getElementById('txtPageGo').value + '" + "&" + Options + "'\">";
                    
    //共N条信息
                    strCountww = "共 " + recordCount.ToString() + " 条信息";
                    
    //第N页/共N页
                    strPageww = "" + pageIndex.ToString() + "页/共" + pageCount.ToString() + "";

                    
    //处理页码显示样式
                    if (intStyle == 1)
                    {
                        
    if (_FirstStr == "")
                        {
                            _FirstStr 
    = "首页";
                        }
                        
    if (_PrevStr == "")
                        {
                            _PrevStr 
    = "上一页";
                        }
                        
    if (_NextStr == "")
                        {
                            _NextStr 
    = "下一页";
                        }
                        
    if (_LastStr == "")
                        {
                            _LastStr 
    = "尾页";
                        }
                    }
                    
    else
                    {
                        
    if (_FirstStr == "")
                        {
                            _FirstStr 
    = " << ";
                        }
                        
    if (_PrevStr == "")
                        {
                            _PrevStr 
    = " < ";
                        }
                        
    if (_NextStr == "")
                        {
                            _NextStr 
    = " > ";
                        }
                        
    if (_LastStr == "")
                        {
                            _LastStr 
    = " >> ";
                        }
                    }
                }
                
    else//英文文分页
                {
                    
    //跳转
                    strTurnww = "<input value='" + pageIndex.ToString() + "' id='txtPageGo' name='txtPageGo' type='text' style='35px;'><input name='btnGo' type='button' id='btnGo' value='Goto' onclick=\"javascript:window.location.href='" + _TurnUrlStr + "?Page=' + document.getElementById('txtPageGo').value + '" + "&" + Options + "'\">";
                    
    //共N条信息
                    strCountww = "Total " + recordCount.ToString() + " Infos";
                    
    //第N页/共N页
                    strPageww = " " + pageIndex.ToString() + "/" + pageCount.ToString() + " ";

                    
    //处理页码显示样式
                    if (intStyle == 1)
                    {
                        
    if (_FirstStr == "")
                        {
                            _FirstStr 
    = " First ";
                        }
                        
    if (_PrevStr == "")
                        {
                            _PrevStr 
    = " Previous ";
                        }
                        
    if (_NextStr == "")
                        {
                            _NextStr 
    = " Next ";
                        }
                        
    if (_LastStr == "")
                        {
                            _LastStr 
    = " Last ";
                        }
                    }
                    
    else
                    {
                        
    if (_FirstStr == "")
                        {
                            _FirstStr 
    = " << ";
                        }
                        
    if (_PrevStr == "")
                        {
                            _PrevStr 
    = " < ";
                        }
                        
    if (_NextStr == "")
                        {
                            _NextStr 
    = " > ";
                        }
                        
    if (_LastStr == "")
                        {
                            _LastStr 
    = " >> ";
                        }
                    }
                }
                
    #endregion
                
                
    //没有记录
                if (recordCount <= 0)
                {
                    strPageShowww 
    = strCountww;
                }
                
    //有记录
                else
                {
                    
    //只有一页
                    if (pageCount <= 1)
                    {
                        strPageShowww 
    = strCountww + "  " + strPageww;
                    }
                    
    //不止一页
                    else
                    {
                        
    //页码链接处理
                        #region 页码链接处理
                        
    //第一页
                        if (pageIndex == 1)
                        {
                            _FirstStr2 
    = _FirstStr;
                            _PrevStr2 
    = _PrevStr;
                        }
                        
    else
                        {
                            
    if (isHtml)
                            {
                                _FirstStr2 
    = "<a href=\"" + _TurnUrlStr + "_1." + exName + "\">" + _FirstStr + "</a>";
                                _PrevStr2 
    = "<a href=\"" + _TurnUrlStr + "_" + Convert.ToString(pageIndex - 1) + "." + exName + "\">" + _PrevStr + "</a>";
                            }
                            
    else
                            {
                                _FirstStr2 
    = "<a href=\"" + _TurnUrlStr + "?" + pageindexName + "=1" + "&" + _Options + "\">" + _FirstStr + "</a>";
                                _PrevStr2 
    = "<a href=\"" + _TurnUrlStr + "?" + pageindexName + "=" + Convert.ToString(pageIndex - 1) + "&" + _Options + "\">" + _PrevStr + "</a>";
                            }
                        }

                        
    //最后一页
                        if (pageIndex == pageCount)
                        {
                            _NextStr2 
    = _NextStr;
                            _LastStr2 
    = _LastStr;
                        }
                        
    else
                        {
                            
    if (isHtml)
                            {
                                _NextStr2 
    = "<a href=\"" + _TurnUrlStr + "_" + Convert.ToString(pageIndex + 1) + "." + exName+ "\">" + _NextStr + "</a>";
                                _LastStr2 
    = "<a href=\"" + _TurnUrlStr + "_" + pageCount + "." + exName + "\">" + _LastStr + "</a>";
                            }
                            
    else
                            {
                                _NextStr2 
    = "<a href=\"" + _TurnUrlStr + "?"+pageindexName+"=" + Convert.ToString(pageIndex + 1) + "&" + _Options + "\">" + _NextStr + "</a>";
                                _LastStr2 
    = "<a href=\"" + _TurnUrlStr + "?" + pageindexName + "=" + pageCount + "&" + _Options + "\">" + _LastStr + "</a>";
                            }
                        }

                        
    //----处理显示页码-----------
                        if (bolCount == true)//共N条信息
                        {
                            strPageShowww 
    = strPageShowww + "  " + strCountww;
                        }
                        
    if (bolPage == true)//第N页/共N页
                        {
                            strPageShowww 
    = strPageShowww + "  " + strPageww;
                        }
                        
    if (bolFirst == true//首页
                        {
                            strPageShowww 
    = strPageShowww + "  " + _FirstStr2;
                        }
                        strPageShowww 
    = strPageShowww + "{0}";//上一页
                        strPageShowww = strPageShowww + "{1}{2}";//下一页

                        
    if (bolLast == true)//尾页
                        {
                            strPageShowww 
    = strPageShowww + "  " + _LastStr2;
                        }
                        
    if (bolTurn == true)//跳转控件
                        {
                            strPageShowww 
    = strPageShowww + "  " + strTurnww;
                        }

                        
    #endregion
                        
    #region 样式一: 共X条信息 第N页/共M页 首页 上一页 下一页 尾页  跳转
                        
    if (intStyle == 1)
                        {
                            strPageShowww 
    = strPageShowww.Replace("{0}""  " + _PrevStr2);//上一页
                            strPageShowww = strPageShowww.Replace("{1}""  " + _NextStr2);//下一页
                            strPageShowww = strPageShowww.Replace("{2}""");//
                        }
                        
    #endregion
                        
    #region 样式二: 共X条信息 第N页/共M页 首页 1 2 3 尾页 跳转

                        
    if (intStyle == 2)
                        {
                            
    int PageTemp = 0;
                            
    string strPageNum = "";
                            
    string strTempNow = "";

                            
    //当页码超过最后一批该显示
                            if (pageIndex > pageCount - intShowNum + 1)
                            {
                                PageTemp 
    = pageCount < intShowNum ? 0 : pageCount - intShowNum;
                                
    for (int i = 1; i <= intShowNum; i++)
                                {
                                    
    if (i > pageCount) break;

                                    strTempNow 
    = Convert.ToString(PageTemp + i);

                                    
    //当前页不显示超链接
                                    if( PageIndex == PageTemp + i)
                                    {
                                        strPageNum 
    = strPageNum + "<b>" + strTempNow + "</b> ";
                                    }
                                    
    else
                                    {
                                        
    if (isHtml)
                                        {
                                            strPageNum 
    = strPageNum + "<a href=\"" + _TurnUrlStr + "_" + strTempNow + "." + exName + "\">" + strTempNow + "</a> ";
                                        }
                                        
    else
                                        {
                                            strPageNum 
    = strPageNum + "<a href=\"" + _TurnUrlStr + "?"+pageindexName+"=" + strTempNow + "&" + _Options + "\">" + strTempNow + "</a> ";
                                        }
                                    }
                                }
                            }
                            
    else
                            {
                                
    for (int i = 0; i < intShowNum; i++)
                                {
                                    strTempNow 
    = Convert.ToString(PageIndex + i);

                                    
    //当前页不显示超链接
                                    if (i == 0)
                                    {
                                        strPageNum 
    = strPageNum + "<b>" + strTempNow + "</b> ";
                                    }
                                    
    else
                                    {
                                        
    if (isHtml)
                                        {
                                            strPageNum 
    = strPageNum + "<a href=\"" + _TurnUrlStr + "_" + strTempNow + "." + exName + "\">" + strTempNow + "</a> ";
                                        }
                                        
    else
                                        {
                                            strPageNum 
    = strPageNum + "<a href=\"" + _TurnUrlStr + "?P"+pageindexName+"=" + strTempNow + "&" + _Options + "\">" + strTempNow + "</a> ";
                                        }
                                    }
                                }
                            }

                            
    //
                            strPageShowww = strPageShowww.Replace("{0}""  " + _PrevStr2);//上一页
                            strPageShowww = strPageShowww.Replace("{1}""  " + strPageNum);//显示数字
                            strPageShowww = strPageShowww.Replace("{2}""  " + _NextStr2);//下一页
                        }
                        
    #endregion
                    }
                }
                
    return strPageShowww;
            }
            
    #endregion

        }
    }
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go


    ALTER PROCEDURE [dbo].[Pager]
      
    @TableName nvarchar(200)            --查询表名1
     ,@orderBy nvarchar(200)              --排序表达式2
     ,@fieldlist nvarchar(200= '*'      --查询的列3
     ,@WhereCondition nvarchar(200= ''  --查询条件4
     ,@PageIndex int = 1                  --索引页5
     ,@pageSize int = NULL                  --每页数量6
     ,@RecordCount        int out          --总行数7
     ,@PageCount             int out      --总页数8
    AS
      
    SET NOCOUNT ON
      
    DECLARE
         
    @STMT nvarchar(max)         -- SQL to execute

      
    IF LTRIM(RTRIM(@WhereCondition)) = '' SET @WhereCondition = '1 = 1'
      
    IF @pageSize IS NULL BEGIN
        
    SET @STMT =  'SELECT   ' + @fieldlist + 
                     
    'FROM     ' + @TableName +
                     
    'WHERE    ' + @WhereCondition + 
                     
    'ORDER BY ' + @orderBy
        
    EXEC (@STMT)                 -- return requested records 
      END ELSE BEGIN
        
    SET @STMT =  'SELECT   @RecordCount = COUNT(*)
                      FROM     
    ' + @TableName + '
                      WHERE    
    ' + @WhereCondition
        
    EXEC sp_executeSQL @STMT@params = N'@RecordCount  INT OUTPUT'@RecordCount  = @RecordCount  OUTPUT
        
    --SELECT @RecordCount  AS RecordCount        -- return the total # of records

        
    DECLARE
          
    @lbound int,
          
    @ubound int

        
    SET @PageIndex = ABS(@PageIndex)
        
    SET @pageSize = ABS(@pageSize)
        
    IF @PageIndex < 1 SET @PageIndex = 1
        
    IF @pageSize < 1 SET @pageSize = 1
        
    SET @lbound = ((@PageIndex - 1* @pageSize)
        
    SET @ubound = @lbound + @pageSize + 1
        
    IF @lbound >= @RecordCount  BEGIN
          
    SET @ubound = @RecordCount  + 1
          
    SET @lbound = @ubound - (@pageSize + 1-- return the last page of records if                                               -- no records would be on the
                                                  -- specified page
        END
        
    SET @STMT =  'SELECT  ' + @fieldlist + '
                      FROM    (
                                SELECT  ROW_NUMBER() OVER(ORDER BY 
    ' + @orderBy + ') AS row, *
                                FROM    
    ' + @TableName + '
                                WHERE   
    ' + @WhereCondition + '
                              ) AS tbl
                      WHERE
                              row > 
    ' + CONVERT(varchar(9), @lbound+ ' AND
                              row < 
    ' + CONVERT(varchar(9), @ubound)
        
    EXEC (@STMT)                 -- return requested records 
      END

        
    --    获取总页数
        --    "CEILING"函数:取得不小于某数的最小整数
        SET @PageCount = CEILING(@RecordCount * 1.0 / @PageSize)


  • 相关阅读:
    算法提高---概率计算
    全排列
    算法提高 最小方差生成树
    【洛谷】P1040 加分二叉树
    SPAF模板
    Bellman-Ford算法(有向图)
    Floyd算法
    Dijkstra算法
    蓝桥杯算法提高 递推求值 【矩阵快速幂】
    【动态规划】数字分组I
  • 原文地址:https://www.cnblogs.com/icejd/p/1934268.html
Copyright © 2011-2022 走看看