一个通用的分页类

2016-02-19 17:58 19 1 收藏

每个人都希望每天都是开心的,不要因为一些琐事扰乱了心情还,闲暇的时间怎么打发,关注图老师可以让你学习更多的好东西,下面为大家推荐一个通用的分页类,赶紧看过来吧!

【 tulaoshi.com - Web开发 】

  结合一个存储过程,将分页做成最简单,请看以下源码

  此分页类所操作的存储过程#region 此分页类所操作的存储过程
  /**//*********************************************************
   *
   * 功能强大,配合以下这个存储过程
   *
   * *******************************************************/
  /**//*
  -- Pager 1,10,0,0, 'EmployeeID2 and EmployeeID5 ' , 'Employees','*','LastName',0
  CREATE PROCEDURE Pager
      @PageIndex             int,--索引页 1
      @PageSize              int,--每页数量2
      @RecordCount        int out,--总行数3
      @PageCount             int out,--总页数4
      @WhereCondition         Nvarchar(1000),--查询条件5
      @TableName          nvarchar(500),--查询表名6
      @SelectStr          nvarchar(500) = '*',--查询的列7
      @Order              nvarchar(500),--排序的列8
      @OrderType            bit = 0,        -- 设置排序类型, 非 0 值则降序 9
      @Groupby            NVarChar(100) = ''
  AS

  declare  @strSQL   nvarchar(2000)     -- 主语句
  declare @strTmp   nvarchar(1000)     -- 临时变量
  declare @strOrder nvarchar(1000)       -- 排序类型

  if @OrderType != 0
  begin
      set @strTmp = '(select min'
      set @strOrder = ' order by ' + @Order +' desc'
  end
  else
  begin
      set @strTmp = '(select max'
      set @strOrder = ' order by ' + @Order +' asc'
  end

  set @strSQL = 'select top ' + str(@PageSize) + ' ' + @SelectStr + ' from '
      + @TableName + ' where ' + @Order + '' + @strTmp + '(['
      + @Order + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
      + @Order + '] from ' + @TableName + '' + @strOrder + ') as tblTmp)'
      + @Groupby + @strOrder

  if @WhereCondition != ''
      set @strSQL = 'select top ' + str(@PageSize) + ' ' + @SelectStr + ' from '
          + @TableName + ' where ' + @Order + '' + @strTmp + '(['
          + @Order + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
          + @Order + '] from ' + @TableName + ' where (' + @WhereCondition + ') '
          + @strOrder + ') as tblTmp) and (' + @WhereCondition + ') ' + @Groupby + @strOrder

  if @PageIndex = 1
  begin
      set @strTmp = ''
      if @WhereCondition != ''
          set @strTmp = ' where (' + @WhereCondition + ')'

      set @strSQL = 'select top ' + str(@PageSize) + ' ' + @SelectStr + ' from '
          + @TableName + '' + @strTmp + ' ' + @Groupby + @strOrder
  end
  exec (@strSQL)
  --print @strSQL

      IF @WhereCondition ''
          Begin
              SET @strTmp = 'SELECT -1 FROM ' + @TableName + ' Where ' + (@WhereCondition)
          End
      ELSE
          Begin
              SET @strTmp = 'SELECT -1 FROM ' + @TableName
          End   
      EXEC SP_EXECUTESQL @strTmp
      SET @RecordCount    = @@RowCount
      --    获取总页数
      --    "CEILING"函数:取得不小于某数的最小整数
      SET @PageCount = CEILING(@RecordCount * 1.0 / @PageSize)
  GO
  *****************************************************************************/
  /**//****************************************************************************
   *
   *    用法
   *
   * ***************************************************************************/
   /**//*
          Dim ts As String = Request.Form.Item("txtDate")

          If (ts = "" Or ts Is Nothing) Then
              ts = Request.QueryString("txtDate")
          End If

  
          Dim ts2 As String = Request.Form.Item("txtDate2")

          If (ts2 = "" Or ts2 Is Nothing) Then
              ts2 = Request.QueryString("txtDate2")
          End If

          Dim ps As String = Request.Form.Item("pageIndex")

          If (ps = "" Or ps Is Nothing) Then
              ps = Request.QueryString("pageIndex")
          End If

          Dim t As Integer = 2
          Dim p As Integer = 1
          If ts Is Nothing Then
              ts = ""
          End If
          If ps Is Nothing Then
              ps = ""
          End If

          If Not (ps = "") Then
              p = Integer.Parse(ps)
          End If

          Dim pager As Pager = New Pager
          pager.PageIndex = p
          pager.PageSize = 20
          pager.PageMode = PageMode.Str
          pager.WhereCondition = "TheDate between convert(datetime,'" + ts + "') and convert(datetime,'" + ts2 + "')"
          'pager.WhereCondition = " convert(char(10),TheDate,120)=  '" + ts + "'"
          pager.TableName = "LoadCountlog"
          pager.SelectStr = "*"
          pager.Order = "ID"
          pager.OrderType = False
          Dim dt As System.Data.DataTable = pager.GetDatas(p)
          myDataGrid.DataSource = dt
          myDataGrid.DataBind()
          Dim goUrl As String = "WebForm1.aspx?txtDate=" + ts + "&txtDate2=" + ts2
          Me.Label3.Text = "共:" + pager.PageCount.ToString + "页," + pager.RecordCount.ToString() + "条 strong" + pager.OutPager(pager, goUrl, False) + "/strong"
  */
  #endregion
  using System;
  using System.Data;
  using System.Data.SqlClient;
  using System.Configuration;
  using System.Collections;
  using System.Text;
  namespace solucky
  {
      /**//// summary
      /// 分页模式
      /// /summary
      public enum PageMode
      {
          /**//// summary
          /// 数字分页
          /// /summary
          Num    =0,
          /**//// summary
          /// 字符分页
          /// /summary
          Str    =1
      }
      /**//// summary
      /// 分页类,能过存储过程进行分页,功能相当强大。
      /// /summary
     
      public class Pager
      {
          private int pageIndex            = 0;
          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 PageMode pageMode        =PageMode.Num;   
          private string sqlConnectionString                    = ConfigurationSettings.AppSettings["database"];
          private string databaseOwner                        = "dbo";

          数据连接#region 数据连接
          /**//// summary
          /// 数据连接字符串
          /// /summary
          private string SqlConnectionString
          {
              get
              {
                  return this.sqlConnectionString;
              }
              set
              {
                  this.sqlConnectionString=value;
              }
          }

          /**//// summary
          ///获取连接实例
          /// /summary
          /// returns/returns
          private SqlConnection GetSqlConnectionString()
          {
              try
              {
                  return new SqlConnection(SqlConnectionString);
              }
              catch
              {
                  throw new Exception("SQL Connection String is invalid.");
              }
          }

  
          /**//// summary
          /// 数据对象所有者
          /// /summary
          private string DatabaseOwner
          {
              get
              {
                  return this.databaseOwner;
              }
              set{
                  this.databaseOwner=value;
              }
          }

          #endregion

          public Pager()
          {
              //
              // TODO: 在此处添加构造函数逻辑
              //
              //Enum.Parse(tyo
          }
          public Pager(string connstr )
          {
              if (connstr!=null)
                  this.SqlConnectionString=connstr;
          }
          #region
          /**//// 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;
              }
          }

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

          /**//// 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 PageMode PageMode
          {
              get
              {
                  return this.pageMode;
              }
              set
              {
                  this.pageMode                    = value;
              }
          }

  
          /**//// summary
          /// 得到当前返回的数量
          /// /summary
          public int RowCount
          {
              get
              {
                  return this.rowCount;
              }
          }

          private string groupby;
          public string Groupby
          {
              get
              {
                  return this.groupby;
              }
              set
              {
                  this.groupby                = value;
              }
          }

          #endregion
          /**//// summary
          /// 分页查寻结果
          /// /summary
          public DataTable GetDatas(int pageIndex)
          {
              this.pageIndex  = pageIndex;
              Pager pager        = this;
              //pager.pageIndex    = pageIndex;
              DataTable returnTb  = Pagination(ref pager).Tables[0];
              this.rowCount    = returnTb.Rows.Count;
              return returnTb;
          }

          /**//// summary
          /// 分页操作存储过程函数
          /// /summary
          /// param name="pager"/param
          /// returns/returns
          private  DataSet Pagination(ref Pager pager)
          {
              using ( SqlConnection myConnection                = GetSqlConnectionString() )
              {
                  SqlDataAdapter myCommand                    = new SqlDataAdapter(pager.databaseOwner + "."+pager.Procedure, myConnection);
                  myCommand.SelectCommand.CommandType            = CommandType.StoredProcedure;

                  SqlParameter parameterPageIndex                = new SqlParameter("@PageIndex", SqlDbType.Int);
                  parameterPageIndex.Value                    = pager.PageIndex;
                  myCommand.SelectCommand.Parameters.Add(parameterPageIndex);

                  SqlParameter parameterPageSize                = new SqlParameter("@PageSize", SqlDbType.Int);
                  parameterPageSize.Value                        = pager.PageSize;
                  myCommand.SelectCommand.Parameters.Add(parameterPageSize);

                  SqlParameter parameterRecordCount            = new SqlParameter("@RecordCount", SqlDbType.Int);
                  parameterRecordCount.Value                    = 0;
                  parameterRecordCount.Direction                = ParameterDirection.InputOutput;
                  myCommand.SelectCommand.Parameters.Add(parameterRecordCount);

  
                  SqlParameter parameterPageCount                = new SqlParameter("@PageCount", SqlDbType.Int);
                  parameterPageCount.Value                    = 0;
                  parameterPageCount.Direction                = ParameterDirection.InputOutput;
                  myCommand.SelectCommand.Parameters.Add(parameterPageCount);

                  SqlParameter parameterWhereCondition        = new SqlParameter("@WhereCondition", SqlDbType.NVarChar,500);
                  parameterWhereCondition.Value                = pager.WhereCondition;
                  myCommand.SelectCommand.Parameters.Add(parameterWhereCondition);

                  SqlParameter parameterTableName                = new SqlParameter("@TableName", SqlDbType.NVarChar,500);
                  parameterTableName.Value                    = pager.TableName;
                  myCommand.SelectCommand.Parameters.Add(parameterTableName);

                  SqlParameter parameterOrder                    = new SqlParameter("@Order", SqlDbType.NVarChar,500);
                  parameterOrder.Value                        = pager.Order;
                  myCommand.SelectCommand.Parameters.Add(parameterOrder);

                  SqlParameter parameterSelectStr                = new SqlParameter("@SelectStr", SqlDbType.NVarChar,500);
                  parameterSelectStr.Value                    = pager.SelectStr;
                  myCommand.SelectCommand.Parameters.Add(parameterSelectStr);

                  SqlParameter parameterGroupby                = new SqlParameter("@Groupby", SqlDbType.NVarChar, 100);
                  parameterGroupby.Value                        = pager.Groupby;
                  myCommand.SelectCommand.Parameters.Add(parameterGroupby);

                  SqlParameter parameterOrderType                = new SqlParameter("@OrderType", SqlDbType.Bit);
                  parameterOrderType.Value                    = pager.OrderType==false?0:1;
                  myCommand.SelectCommand.Parameters.Add(parameterOrderType);   
     

                  DataSet returnDS                            = new DataSet();

                  //SqlDataAdapter sqlDA                        = myCommand.crnew SqlDataAdapter(myCommand);
                  myCommand.Fill(returnDS);

                  pager.PageCount                                = (int)parameterPageCount.Value;
                  pager.RecordCount                            = (int)parameterRecordCount.Value;

                  return returnDS;
              }

          }
     
          生成分页#region 生成分页
          /**//// summary
          /// 生成分页格式
          /// /summary
          /// param name="pager"/param
          /// param name="url"/param
          /// param name="isBr"/param
          /// returns/returns
          public string OutPager(Pager pager,string url,bool isBr)
          {
              StringBuilder returnOurWml;
              if(isBr)
              {
                  returnOurWml= new StringBuilder("["+ pager.PageCount.ToString() + "页," + pager.RecordCount.ToString() +"条]br/");
              }
              else
              {
                  returnOurWml = new StringBuilder();
              }
              if (pager.PageMode == PageMode.Num)
              {
                  //分页每行显示的数量
                  int pagersCount = 10;
                  int pagers        = 0;
                  int startInt    = 1;
                  int endInt        = pager.PageCount;
                  int i            = 1;

                  string endStr   = "";

  
                  if (pager.PageCountpagersCount)
                  {

                      //double        k = ;
                      pagers          = pager.PageIndex / pagersCount;
             
                      if (pagers == 0)
                      {
                          pagers = 1;
                      }
                      else if((pager.PageIndex % pagersCount)!=0)
                      {
                          pagers +=1;
                      }

                      endInt          = pagers * pagersCount;
                      if (pager.PageIndex = endInt)
                      {
                          startInt = endInt +1 - pagersCount;
                          if (startInt 1)
                          {
                              startInt = 1;
                          }
                      }

                     
                      //显示数量不足时pagersCount
                      if (endInt=pager.PageCount)
                      {
                          endInt = pager.PageCount;
                      }
                      else
                      {
                          //if (pager.PageIndex)
                          endStr        = " a href="";
                          endStr        += url + "&pageIndex=" + (endInt + 1).ToString()  + "" title='第"+ (endInt + 1).ToString()+"页'";
                          endStr        += ">>";
                          endStr        += "/a  ";
                      }

                      if (pagers 1)
                      {
                          returnOurWml.Append(" a href="");
                          returnOurWml.Append(url + "&pageIndex=" + (startInt - 1).ToString() + "" title='第"+ (startInt - 1).ToString()+"页'");
                          returnOurWml.Append("<<");
                          returnOurWml.Append("/a  ");
                      }
                  }
                 
                  for (i = startInt; i=endInt;i++)
                  {
                     
                      if (i!=pager.PageIndex)
                      {
                          returnOurWml.Append(" a href="");
                          returnOurWml.Append(url + "&pageIndex=" + i.ToString() + "" title='第"+ i.ToString()+"页'");
                          returnOurWml.Append("["+i.ToString() + "]");
                          returnOurWml.Append("/a  ");
                      }
                      else
                      {
                          returnOurWml.Append("u"+ i.ToString() + "/u");
                      }
                  }

  
                  returnOurWml.Append(endStr);

  
                  return returnOurWml.Append("br/").ToString();
              }
              else
              {
                  if ( pager.PageIndex 1)
                  {
                      returnOurWml.Append(" a href="");
                      returnOurWml.Append(url + "&pageIndex=" + (pager.PageIndex -1).ToString() + """);
                      returnOurWml.Append("上一页");
                      returnOurWml.Append("/a  ");
                  }
                  if (pager.PageIndex pager.PageCount)
                  {
                      returnOurWml.Append(pager.PageIndex.ToString());
                      returnOurWml.Append(" a href="");
                      returnOurWml.Append(url + "&pageIndex=" + (pager.PageIndex +1).ToString() + """);
                      returnOurWml.Append("下一页");
                      returnOurWml.Append("/a  ");
                  }
                  return returnOurWml.Append("br/").ToString();
              }
          }

          #endregion
      }
  }

  
  http://www.cnblogs.com/solucky/archive/2006/09/20/509741.html

来源:http://www.tulaoshi.com/n/20160219/1616496.html

延伸阅读
标签: Web开发
无标题文档 支付宝与六大代理签订协议刷卡积分可网上购物支付宝为网店保驾护航支付宝红包送来红地毯紧急天气预报"红色风暴"空降支付宝小红包背后大名堂Q88.net全面无缝接合支付宝电子支付规范走出第一步 使用专业版受鼓励从支付宝看电子商务的发展谁能与支付宝PK?国内第一家引入支付宝的网络图库正式开通新浪网:中关村在...
标签: Web开发
代码如下: 本人原创的代码,高手看来,也许流程笨拙点,但是很实用.看者要顶啊     /*---------------------------------------------------------------//   * 函数说明:分页函数 page($sql,$pagesize="30")   * $sql 查询语句(除limit外,可带排序或者条件限制)  &nbs...
标签: Java JAVA基础
************************************** */ package vod; import java.sql.*; import java.util.*; public class PageCt { private long l_start; //开始纪录 private long l_end; //结束纪录 private long l_curpage; //当前页数 private long l_totalnum;//总记录数 private int int_num=5; //每页10条 private long l_totalpage; //总的...
标签: ASP
<%''本程序文件名为:Pages.asp% <%''包含ADO常量表文件adovbs.inc,可从"\Program Files\Common Files\System\ADO"目录下拷贝% <!--#Include File="adovbs.inc"-- <%''*建立数据库连接,这里是Oracle8.05数据库 Set conn=Server.CreateObject("ADODB.Connection") conn.Open "Provider=msdaora.1;Data Source=YourSrcName;User ...
标签: ASP
  /*****听以前的同事说asp页面上的分页太慢了(如果数据多了), 就想了这么个笨办法。有些地方还要考虑----比如select top 22 * from cat_list where T_id not in (select T_id from #change)是否有效率问题;数据不能重复等等 不过灵活性挺好。希望各位高手再给帮忙改正;多谢chair3的帮助---这个存储过程还可以在加入几个变量,随便...

经验教程

584

收藏

46
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部