/// <summary>
/// 分页方法
/// </summary>
/// <param name="pageIndex">当前页码</param>
/// <param name="totalCount">总条数</param>
/// <param name="pageSize">一页多少条</param>
/// /// <param name="url">页面地址</param>
/// <param name="pageLength">显示多少页码</param>
/// <returns></returns>
public static string Page(int pageIndex,int totalCount,int pageSize, string url,int pageLength=5)
{
if (totalCount<=0)
{
return "";
}
//保证在编写下一页的代码定向时不会受到中间for循环的干扰使pageIndex的值发生改变
int redirectPageIndex = pageIndex;
//pageSize不可为0
if (pageSize==0)
{
pageSize = totalCount;
}
//获得当前可分页的页数数量
int pageCount = totalCount / pageSize + (totalCount % pageSize == 0 ? 0 : 1);
//创建用来拼接字符串的对象
StringBuilder sb = new StringBuilder();
//处理首页
if (pageIndex!=1)
{
//当前传递进来的页码不是第1页,则显示首页和上一页
sb.Append(string.Format("<a href={0}?pageIndex={1}&pageSize={2}>首页</a><a href={0}?pageIndex={3}&pageSize={2}>上一页</a>", url,1, pageSize,pageIndex-1));
}
//保存显示的页码数量
int length;
//处理中间的页码
if (pageLength >= pageCount || pageLength <= 0)
{
//如果需要分成的页码数量比可分成的大
length = pageCount;
}
else
{
length = pageLength;
}
//方便计算当前应该转折的pageIndex的值
int t = pageIndex /length;
int p = pageIndex % length;
//这里给pageIndex重定向
int l = pageCount - length + 1;
//当前已经到了最后的转折点
if (pageIndex>=l)
{
pageIndex = l;
}
else
{
//还未到
if (p==0&&t==1)
{
//这里说明在第一个转折点
pageIndex = 1;
}
else
{
//不在第一个
if (p==0)
{
//这是在转折点的时候
pageIndex = (t - 1) * length + 1;
}
else
{
pageIndex = t * length + 1;
}
}
}
//如果当前页码为最后一页
if (pageIndex>=pageCount)
{
//则让pageIndex回复到之前
pageIndex = pageIndex - length+1; // + 1;
}
//处理页码
for (int i = 0; i < length; i++)
{
sb.Append(string.Format("<a href={0}?pageIndex={1}&pageSize={2}>{1}</a>",url, pageIndex, pageSize));
pageIndex++;
//temp++;
}
//处理下一页与末页
if (redirectPageIndex < pageCount)
{
//当前传递进来的页码不是最后页,则显示末页和下一页
sb.Append(string.Format("<a href={0}?pageIndex={1}&pageSize={2}>下一页</a><a href={0}?pageIndex={3}&pageSize={2}>末页</a>",url, redirectPageIndex + 1, pageSize,pageCount));
}
sb.Append(string.Format("<span class='info'>第{0}页/共{1}页</span>", redirectPageIndex, pageCount));
return sb.ToString();
}
自己写的,不足不怪
调用方法:
前台传递
pageIndex:前台当前要显示的页码/当前被点击的页码,例如1
pageSize:前台当前要显示的数据数量,例如10
totalCount:所有数据的总条数,例如后台获取到100条
url:参数将要被传递到哪个页面/后台程序内,例如"a.aspx",则会生成<a href="a.aspx?pageIndex=1&pageSize=10">1</a>,也可不传(例如用在ajax异步无刷新分页时,但要自己手动处理分页中a标签的href属性,从中提取出pageIndex=1&pageSize=10)
pageLength:当前页中想要显示的页码数量,默认为5,例如当前数据库中的数据每次在前台展示10条,可以生成一共12个页码,传入pageLength为5后,则每次只会在页面上显示5个页码.