今天查询相关资料时,看到这个类写的很好,就转过来了啊,感谢原创者!
下面直接是类的代码,一看就明白!
public class Pageing
{
#region 成员
/**//// <summary>
/// 数据源 Table
/// </summary>
public DataTable dtblTableww = new DataTable();
/**//// <summary>
/// 每页记录数
/// </summary>
public int intPageSizeww = 20;
/**//// <summary>
/// 需要获取第几页的数据,从 1 开始
/// </summary>
public int intPageNowww = 1;
/**//// <summary>
/// 首页 显示样式
/// </summary>
public string strFirstww = "";
/**//// <summary>
/// 上一页 显示样式
/// </summary>
public string strPrevww = "";
/**//// <summary>
/// 下一页 显示样式
/// </summary>
public string strNextww = "";
/**//// <summary>
/// 尾页 显示样式
/// </summary>
public string strLastww = "";
/**//// <summary>
/// 跳转 的url链接
/// </summary>
public string strTurnUrlww = "";
/**//// <summary>
/// 跳转的url链接的参数前面不要加?或&
/// </summary>
public string strOptionww = "";
private string strCountww = ""; //共N条信息
private string strPageww = ""; //第N页/共N页
private string strTurnww; //跳转控件
#endregion
#region 属性
private int intRsCounww = 0; //记录总数
/**//// <summary>
/// 总记录数
/// </summary>
public int GetRsCount
{
get
{
return this.intRsCounww;
}
}
private int intPageCountww = 0; //总页数
/**//// <summary>
/// 总页数
/// </summary>
public int GetPageCount
{
get
{
return this.intPageCountww;
}
}
private string strPageShowww = ""; //显示页码的字符串
/**//// <summary>
/// 显示页码的字符串
/// </summary>
public string GetPageShow
{
get
{
return this.strPageShowww;
}
}
#endregion
#region 初始构造
/**//// <summary>
/// 初始构造
/// </summary>
public Pageing()
{
//首页
strFirstww = "";
//上一页
strPrevww = "";
//下一页
strNextww = "";
//尾页
strLastww = "";
//跳转控件
strTurnww = "";
//显示页码的字符串
strPageShowww = "";
//当前页
intPageNowww = GetNumeric(GetRequest("Page"));
if (intPageNowww == 0)
{
intPageNowww = 1;
}
}
#endregion
#region 处理分页及显示页码
/**//// <summary>
/// 分页,返回分页后的数据 Table
/// </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="IsEnglish">是否 用中文显示</param>
/// <returns>返回分页后的数据 Table</returns>
public DataTable BeginPage(bool bolCount, bool bolPage, bool bolFirst, bool bolLast, bool bolTurn, bool IsChinese)
{
//记录总数
intRsCounww = dtblTableww.Rows.Count;
//总页数
intPageCountww = (intRsCounww + intPageSizeww - 1) / intPageSizeww;
//超出最大页码
if (intPageNowww > intPageCountww)
{
intPageNowww = intPageCountww;
}
//中文分页
if (IsChinese)
{
//跳转
strTurnww = "<input value='" + intPageNowww.ToString() + "' id='txtPageGo' name='txtPageGo' type='text' style='width:25px;'><input name='btnGo' type='button' id='btnGo' value='跳转' onclick=\"javascript:window.location.href='" + strTurnUrlww + "?page=' + document.getElementById('txtPageGo').value + '" + "&" + strOptionww + "'\">";
//共N条信息
strCountww = "共" + intRsCounww.ToString() + "条信息";
//第N页/共N页
strPageww = "第" + intPageNowww.ToString() + "页/共" + intPageCountww.ToString() + "页";
if (strFirstww == "")
{
strFirstww = "首页";
strPrevww = "上一页";
strNextww = "下一页";
strLastww = "尾页";
}
}
else//英文文分页
{
//跳转
strTurnww = "<input value='" + intPageNowww.ToString() + "' id='txtPageGo' name='txtPageGo' height='20px' type='text' style='width:25px;'><input name='btnGo' type='button' height='20px' id='btnGo' value='Goto' onclick=\"javascript:window.location.href='" + strTurnUrlww + "?page=' + document.getElementById('txtPageGo').value + '" + "&" + strOptionww + "'\">";
//共N条信息
strCountww = "Total " + intRsCounww.ToString() + " Infos";
//第N页/共N页
strPageww = " " + intPageNowww.ToString() + "/" + intPageCountww.ToString() + " ";
if (strFirstww == "")
{
strFirstww = " First ";
strPrevww = " Previous ";
strNextww = " Next ";
strLastww = " Last ";
}
}
DataTable MyTable;
int intGetFirstRs = 0;//获取本页数据的开始下标
int intGetLastRs = 0;//获取本页数据的结束下标
string strFirstww2;
string strPrevww2;
string strNextww2;
string strLastww2;
//没有记录
if (intRsCounww <= 0)
{
strPageShowww = strCountww;
MyTable = dtblTableww;
}
//有记录
else
{
//只有一页
if (intPageCountww <= 1)
{
strPageShowww = strCountww + " " + strPageww;
MyTable = dtblTableww;
}
//不止一页
else
{
//第一页
if (intPageNowww == 1)
{
strFirstww2 = strFirstww;
strPrevww2 = strPrevww;
}
else
{
strFirstww2 = "<a href=\"" + strTurnUrlww + "?page=1" + "&" + strOptionww + "\">" + strFirstww + "</a>";
strPrevww2 = "<a href=\"" + strTurnUrlww + "?page=" + Convert.ToString(intPageNowww - 1) + "&" + strOptionww + "\">" + strPrevww + "</a>";
}
//最后一页
if (intPageNowww == intPageCountww)
{
strNextww2 = strNextww;
strLastww2 = strLastww;
}
else
{
strNextww2 = "<a href=\"" + strTurnUrlww + "?page=" + Convert.ToString(intPageNowww + 1) + "&" + strOptionww + "\">" + strNextww + "</a>";
strLastww2 = "<a href=\"" + strTurnUrlww + "?page=" + intPageCountww + "&" + strOptionww + "\">" + strLastww + "</a>";
}
//----处理显示页码-----------
if (bolCount == true)//共N条信息
{
strPageShowww = strPageShowww + " " + strCountww;
}
if (bolPage == true)//第N页/共N页
{
strPageShowww = strPageShowww + " " + strPageww;
}
if (bolFirst == true) //首页
{
strPageShowww = strPageShowww + " " + strFirstww2;
}
strPageShowww = strPageShowww + " " + strPrevww2;//上一页
strPageShowww = strPageShowww + " " + strNextww2;//下一页
if (bolLast == true)//尾页
{
strPageShowww = strPageShowww + " " + strLastww2;
}
if (bolTurn == true)//跳转控件
{
strPageShowww = strPageShowww + " " + strTurnww;
}
//----处理返回数据-----------
intGetFirstRs = (intPageNowww - 1) * intPageSizeww;
intGetLastRs = intPageNowww * intPageSizeww - 1;
//获取结束数据下标大于总记录数时
if (intGetLastRs >= intRsCounww)
{
intGetLastRs = intRsCounww - 1;
}
//循环获取数据
MyTable = dtblTableww.Clone();
for (int I = intGetFirstRs; I <= intGetLastRs; I++)
{
DataRow MyRow = dtblTableww.Rows[I];
MyTable.ImportRow(MyRow);
}
}
}
return MyTable;
}
#endregion
#region 将字符串转换成整数
/**//// <summary>
/// 将字符串转换成整数
/// </summary>
/// <param name="strValue">将字符传转换成整数</param>
/// <returns>int</returns>
private int GetNumeric(string strValue)
{
int IReturn;
if (strValue == null)
{
IReturn = 0;
return IReturn;
}
try
{
IReturn = Convert.ToInt32(strValue);
}
catch
{
IReturn = 0;
}
return IReturn;
}
#endregion
#region 获取Request值
/**//// <summary>
/// 获取Request值
/// </summary>
/// <param name="strRequestName">Request名称</param>
/// <returns>null则为空</returns>
private string GetRequest(string strRequestName)
{
if (HttpContext.Current.Request["" + strRequestName + ""] != null)
{
return HttpContext.Current.Request["" + strRequestName + ""];
}
else
{
return "";
}
}
#endregion
// #region --------------------------------调用实例--------------------------
/**////// <summary>
///// 调用实例
///// </summary>
//protected void BindData()
//{
// Student MyStudent = new Student();
// DataTable MyDataTable = MyStudent.GetList("LIST", null);
// Pageing MyPageing = new Pageing();
// MyPageing.dtblTableww = MyDataTable;//数据源
// MyPageing.intPageSizeww = 4;//每页显示多少条
// MyPageing.strTurnUrlww = "MyRepeater.ASPx";//跳转页面
// MyPageing.strOptionww = "DoWhat=List";//跳转页面带的所有参数
// //获取当前页数据
// this.DataList1.DataSource = MyPageing.BeginPage(true, true, true, true, true, false);
// //获取当前页分页显示
// this.Label1.Text = MyPageing.GetPageShow;
// this.DataList1.DataBind();
//}
//#endregion
#region 简要说明
//.Net通用分页(可以选择页码的显示样式,且有中英选择),自己写的,还不完善,请朋友们多多指点.
//大概思路是:根据传进来的DataTable,每页显示多少条记录,当前要显示第几页(从Request中获得),
//来获取当前页要显示的数据(比如DataTable共有123条记录,每页显示10条,第2页,则取DataTable的Rows10~19),
//再根据其它传进来的参数设置分页及显示的样式等.
//当然,可能这种方法的效率等某些方面可能不好,只是个例子,可以根据自己的应用修改.
//效果图:http://images.cnblogs.com/cnblogs_com/84ww/128905/r_page.GIF
#endregion
}
}