【06年博文搬家】一个用于进行分页的类

using System;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI.WebControls;

namespace KoalaStudio.PaterfamiliasSchool.Classes
{
    
/// <summary>
    
/// PagingSelect 用于对于页面上的DataGrid的数据分页
    
/// </summary>
    public class PagingSelect
    {
       
#region

        
//调用方法

        
//例1:将数据集分页后在GridView控件中显示,同时在Label控件中显示分页页面信息
        /*  
            PagingSelect paging = new PagingSelect(new DataSet());        
            GridView1.DataSource = paging.GetFirstPage();
            GridView1.DataBind();
            Label1.Text = "第" + paging.CurrentPage + "页,共" + paging.PageCount + "页;每页" + paging.PageSize + "条,共" + paging.MaxRecord + "条";        
        //
*/

        
//例2:

        
#endregion


       
/* **************************************************
        * 私有变量 
        * *************************************************
*/

        //保存数据
        private DataTable dt = new DataTable();
        
//m_PageCount 为页面的总页数
        private int m_PageCount;
       
//max Record 为数据表的纪录总数
        private int m_MaxRecord;
        //m_PageSize 为每页中包含的纪录数
        private int m_PageSize = 20;
        //m_CurrentPage 为当前的页号
        private int m_CurrentPage;
        //m_RecordNo 为当页的最大纪录号
        private int m_RecordNo;

        /* **************************************************
         * 公共属性 
         * *************************************************
*/
  
        
/// <summary>
        
/// 总页数
        
/// </summary>
        public int PageCount
        {
            
get { return m_PageCount; }
        }

        
/// <summary>
        
/// 每页记录数
        
/// </summary>
        public int PageSize
        {
            
get { return m_PageSize; }
            
set 
            { 
                m_PageSize 
= value; 
    
                //根据每页行数计算出分页后的页数
                m_PageCount = m_MaxRecord / m_PageSize;
                if( (m_MaxRecord % m_PageSize) > 0 )
                {
                    m_PageCount
++;
                }
            }
        }

  
/// <summary>
  
/// 当前页数
  
/// </summary>
  public int CurrentPage
  {
   
get { return m_CurrentPage; }
   
set { m_CurrentPage = value; }
  }

  
/// <summary>
  
/// 纪录总数
  
/// </summary>
  public int MaxRecord
  {
   
get { return m_MaxRecord; }
  }
  

  
/* **************************************************
   * 构造函数
   * *************************************************
*/

  
/// <summary>
  
/// 
  
/// </summary>
  
/// <param name="p_DataSet"></param>
  public PagingSelect(DataSet p_DataSet)
  {
   
//根据传入的数据集得到数据表
   dt = p_DataSet.Tables[0];

   init();
  }

  
/// <summary>
  
/// 初始化PagingSelect类
  
/// </summary>
  
/// <param name="p_DataSet">包含一个数据表的数据集</param>
  public PagingSelect(DataSet p_DataSet, int p_PageSize)
  {
   m_PageSize 
= p_PageSize;
   
//根据传入的数据集得到数据表
   dt = p_DataSet.Tables[0];

   init();
  } 

  
/* **************************************************
   * 公共方法
   * *************************************************
*/

  
private void init()
  {

   
//得到数据表的最大行数
   m_MaxRecord = dt.Rows.Count;

   
//根据每页行数计算出分页后的页数
   m_PageCount = m_MaxRecord / m_PageSize;
   
if( (m_MaxRecord % m_PageSize) > 0 ) 
   { 
    m_PageCount
++;
   }
  }

  
/// <summary>
  
/// 返回依据当前所在页所生成数据表
  
/// </summary>
  
/// <returns></returns>
  private DataTable LoadCurrentPage()
  {
   
int startRecord, endRecord;
   DataTable dtTemp 
= dt.Clone();

   
//得到当前页的最前一条记录
   startRecord = (m_CurrentPage - 1* m_PageSize;
   
//判断当前页的最后一条记录。
   if( m_CurrentPage == m_PageCount )
   {
    
    
//如果是最后一页,则当前页的最后一条记录为整个数据表的最后一条记录
    endRecord = m_MaxRecord;
   }
   
else
   {
    
//如果不是最后一页,则当前页的最后一条记录为当前页数乘以每页记录数
    endRecord = m_PageSize * m_CurrentPage - 1;
   }

   
//将dt表中当前页的数据倒入到dtTemp表中
   if( dt.Rows.Count > 0 )
   {
    
forint i = startRecord; i < endRecord; i++ )
    {
     dtTemp.ImportRow( dt.Rows[i] );
     m_RecordNo
++;
    }
   }
   
else
   {
    dtTemp 
= null;
   }

   
return dtTemp;  
  }

  
/// <summary>
  
/// 返回整个未进行分页的数据表
  
/// </summary>
  
/// <returns></returns>
  public DataTable GetPageData()
  {
   
return dt;
  }

  
/// <summary>
  
/// 返回首页数据表
  
/// </summary>
  
/// <returns></returns>
  public DataTable GetFirstPage()
  {
   m_CurrentPage 
= 1;
   m_RecordNo 
= 0;
   
return LoadCurrentPage();
  }

  
/// <summary>
  
/// 返回上一页数据表
  
/// </summary>
  
/// <returns></returns>
  public DataTable GetPreviousPage()
  {
   m_CurrentPage
--;
   
if( m_CurrentPage == 0 )
   {
    m_CurrentPage 
= 1;
    m_RecordNo 
= 0;
   }
   
else
    m_RecordNo 
= m_PageSize * ( m_CurrentPage - 1 );
   
return LoadCurrentPage();
  }

  
/// <summary>
  
/// 返回下一页的数据表
  
/// </summary>
  
/// <returns></returns>
  public DataTable GetNextPage()
  {
   m_CurrentPage
++;
   
if( m_CurrentPage > m_PageCount )
   {
    m_CurrentPage 
= m_PageCount;
    m_RecordNo 
= m_PageSize * ( m_PageCount - 1 );
   }
   
return LoadCurrentPage();
  }

  
/// <summary>
  
/// 返回尾页的数据表
  
/// </summary>
  
/// <returns></returns>
  public DataTable GetLastPage()
  {
   m_CurrentPage 
= m_PageCount;
   m_RecordNo 
= m_PageSize * ( m_PageCount - 1 );
   
return LoadCurrentPage();
  }

  
/// <summary>
  
/// 返回指定页的数据表
        /// </summary>
/// <param name="pageIndex"></param>
/// <returns></returns>

    public DataTable GetSetPage( int p_PageIndex )
    {
            if( p_PageIndex > 0 && p_PageIndex <= m_PageCount  )
            {
                m_CurrentPage 
= p_PageIndex;
                m_RecordNo 
= m_PageSize * ( m_CurrentPage - 1 );
            }
            else
            {
                m_RecordNo 
= m_PageSize * ( m_CurrentPage - 1 );
            }

           
return LoadCurrentPage();
        }  
    }
}

posted @ 2009-05-23 08:51  行一山人  阅读(230)  评论(0编辑  收藏  举报