【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 )
{
for( int 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();
}
}
}
作者:行一山人
出处:http://www.cnblogs.com/benbenkoala/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。