public class Pagination
{
/// <summary>
/// 页码显示
/// </summary>
/// <param name="curp">当前页</param>
/// <param name="pagecount">总页数</param>
/// <param name="maxcount">最大显示页码行数</param>
/// <param name="leftstr">目标URL地址页码标记左边字符串</param>
/// <param name="rightstr">目标URL地址页码标记右边字符串</param>
/// <returns>页码字符串</returns>
public static string Show(int curp, int pagecount, int maxcount, string leftstr, string rightstr)
{
StringBuilder str = new StringBuilder();
int leftMin, RightMax;
if (maxcount % 2 == 0)
{
leftMin = curp - intplus(maxcount);
RightMax = curp + intplus(maxcount) + 1;
}
else
{
leftMin = curp - intplus(maxcount);
RightMax = curp + intplus(maxcount);
}
if (leftMin < 2)
leftMin = 1;
if (RightMax > pagecount)
RightMax = pagecount;
if (curp < intplus(maxcount) && pagecount >= maxcount)
{
leftMin = 1;
RightMax = maxcount;
}
if (leftMin > 2)
str.Append("<a class=\"page\" href=\"" + leftstr + "1" + rightstr + "\" title=\"第1页\">1</a><a class=\"around\" href=\"" + leftstr + (curp - 1).ToString() + rightstr + "\" title=\"上一页\"><<</a>");
if (leftMin == 2)
str.Append("<a class=\"page\" href=\"" + leftstr + "1" + rightstr + "\" title=\"第1页\">1</a>");
for (int i = leftMin; i <= RightMax; i++)
{
if (i == curp)
str.Append("<a class=\"pagenow\">" + i.ToString() + "</a>");
else
str.Append("<a class=\"page\" href=\"" + leftstr + i.ToString() + rightstr + "\" title=\"第" + i.ToString() + "页\">" + i.ToString() + "</a>");
}
if (RightMax < pagecount - 1)
str.Append("<a class=\"around\" href=\"" + leftstr + (curp + 1).ToString() + rightstr + "\" title=\"下一页\">>></a><a class=\"page\" href=\"" + leftstr + pagecount.ToString() + rightstr + "\" title=\"第" + pagecount.ToString() + "页\">" + pagecount.ToString() + "</a>");
if (RightMax == pagecount - 1)
str.Append("<a class=\"page\" href=\"" + leftstr + pagecount.ToString() + rightstr + "\" title=\"第" + pagecount.ToString() + "页\">" + pagecount.ToString() + "</a>");
return str.ToString();
}
/// <summary>
/// show page numbers: for long article.
/// </summary>
/// <param name="curp">当前页</param>
/// <param name="pagecount">总页数</param>
/// <param name="maxcount">最大显示页码行数</param>
/// <param name="leftstr">目标URL地址页码标记左边字符串</param>
/// <param name="rightstr">目标URL地址页码标记右边字符串</param>
/// <returns>页码字符串</returns>
public static string Show2(int curp, int pagecount, int maxcount, string leftstr, string rightstr)
{
StringBuilder str = new StringBuilder();
int leftMin, RightMax;
if (maxcount % 2 == 0)
{
leftMin = curp - intplus(maxcount);
RightMax = curp + intplus(maxcount) + 1;
}
else
{
leftMin = curp - intplus(maxcount);
RightMax = curp + intplus(maxcount);
}
if (leftMin < 2)
leftMin = 1;
if (RightMax > pagecount)
RightMax = pagecount;
if (curp < intplus(maxcount) && pagecount >= maxcount)
{
leftMin = 1;
RightMax = maxcount;
}
//左侧
if (curp == 1)
str.Append("<a class=\"pagenow\">上一页</a>");
else
{
if (curp > 2)
str.Append("<a href=\"" + leftstr + "-" + (curp - 1) + rightstr + "\" class=\"page\">上一页</a>");
else
str.Append("<a href=\"" + leftstr + rightstr + "\" class=\"page\">上一页</a>");
}
if (leftMin > 2)
str.Append("<a class=\"page\" href=\"" + leftstr + rightstr + "\" title=\"第1页\">1</a><a class=\"around\" href=\"" + leftstr + "-" + (curp - 1).ToString() + rightstr + "\" title=\"上一页\">‹‹</a>");
if (leftMin == 2)
str.Append("<a class=\"page\" href=\"" + leftstr + rightstr + "\" title=\"第1页\">1</a>");
//中间
for (int i = leftMin; i <= RightMax; i++)
{
if (i == curp)
str.Append("<a class=\"pagenow\">" + i.ToString() + "</a>");
else
{
if(i > 1)
str.Append("<a class=\"page\" href=\"" + leftstr + "-" + i.ToString() + rightstr + "\" title=\"第" + i.ToString() + "页\">" + i.ToString() + "</a>");
else
str.Append("<a class=\"page\" href=\"" + leftstr + rightstr + "\" title=\"第" + i.ToString() + "页\">" + i.ToString() + "</a>");
}
}
//右侧
if (RightMax < pagecount - 1)
str.Append("<a class=\"around\" href=\"" + leftstr + "-" +(curp + 1).ToString() + rightstr + "\" title=\"下一页\">››</a><a class=\"page\" href=\"" + leftstr + "-" +pagecount.ToString() + rightstr + "\" title=\"第" + pagecount.ToString() + "页\">" + pagecount.ToString() + "</a>");
if (RightMax == pagecount - 1)
str.Append("<a class=\"page\" href=\"" + leftstr +"-" + pagecount.ToString() + rightstr + "\" title=\"第" + pagecount.ToString() + "页\">" + pagecount.ToString() + "</a>");
if (curp == pagecount)
str.Append("<a class=\"pagenow\">下一页</a>");
else
str.Append("<a href=\"" + leftstr + "-" + (curp + 1) + rightstr + "\" class=\"page\">下一页</a>");
return str.ToString();
}
/// <summary>
/// 取得数除以2得数的整数部份
/// </summary>
/// <param name="i">被2除的整数</param>
/// <returns></returns>
public static int intplus(int i)
{
if (i % 2 == 0)
return i / 2;
else
return (i - 1) / 2;
}
}
{
/// <summary>
/// 页码显示
/// </summary>
/// <param name="curp">当前页</param>
/// <param name="pagecount">总页数</param>
/// <param name="maxcount">最大显示页码行数</param>
/// <param name="leftstr">目标URL地址页码标记左边字符串</param>
/// <param name="rightstr">目标URL地址页码标记右边字符串</param>
/// <returns>页码字符串</returns>
public static string Show(int curp, int pagecount, int maxcount, string leftstr, string rightstr)
{
StringBuilder str = new StringBuilder();
int leftMin, RightMax;
if (maxcount % 2 == 0)
{
leftMin = curp - intplus(maxcount);
RightMax = curp + intplus(maxcount) + 1;
}
else
{
leftMin = curp - intplus(maxcount);
RightMax = curp + intplus(maxcount);
}
if (leftMin < 2)
leftMin = 1;
if (RightMax > pagecount)
RightMax = pagecount;
if (curp < intplus(maxcount) && pagecount >= maxcount)
{
leftMin = 1;
RightMax = maxcount;
}
if (leftMin > 2)
str.Append("<a class=\"page\" href=\"" + leftstr + "1" + rightstr + "\" title=\"第1页\">1</a><a class=\"around\" href=\"" + leftstr + (curp - 1).ToString() + rightstr + "\" title=\"上一页\"><<</a>");
if (leftMin == 2)
str.Append("<a class=\"page\" href=\"" + leftstr + "1" + rightstr + "\" title=\"第1页\">1</a>");
for (int i = leftMin; i <= RightMax; i++)
{
if (i == curp)
str.Append("<a class=\"pagenow\">" + i.ToString() + "</a>");
else
str.Append("<a class=\"page\" href=\"" + leftstr + i.ToString() + rightstr + "\" title=\"第" + i.ToString() + "页\">" + i.ToString() + "</a>");
}
if (RightMax < pagecount - 1)
str.Append("<a class=\"around\" href=\"" + leftstr + (curp + 1).ToString() + rightstr + "\" title=\"下一页\">>></a><a class=\"page\" href=\"" + leftstr + pagecount.ToString() + rightstr + "\" title=\"第" + pagecount.ToString() + "页\">" + pagecount.ToString() + "</a>");
if (RightMax == pagecount - 1)
str.Append("<a class=\"page\" href=\"" + leftstr + pagecount.ToString() + rightstr + "\" title=\"第" + pagecount.ToString() + "页\">" + pagecount.ToString() + "</a>");
return str.ToString();
}
/// <summary>
/// show page numbers: for long article.
/// </summary>
/// <param name="curp">当前页</param>
/// <param name="pagecount">总页数</param>
/// <param name="maxcount">最大显示页码行数</param>
/// <param name="leftstr">目标URL地址页码标记左边字符串</param>
/// <param name="rightstr">目标URL地址页码标记右边字符串</param>
/// <returns>页码字符串</returns>
public static string Show2(int curp, int pagecount, int maxcount, string leftstr, string rightstr)
{
StringBuilder str = new StringBuilder();
int leftMin, RightMax;
if (maxcount % 2 == 0)
{
leftMin = curp - intplus(maxcount);
RightMax = curp + intplus(maxcount) + 1;
}
else
{
leftMin = curp - intplus(maxcount);
RightMax = curp + intplus(maxcount);
}
if (leftMin < 2)
leftMin = 1;
if (RightMax > pagecount)
RightMax = pagecount;
if (curp < intplus(maxcount) && pagecount >= maxcount)
{
leftMin = 1;
RightMax = maxcount;
}
//左侧
if (curp == 1)
str.Append("<a class=\"pagenow\">上一页</a>");
else
{
if (curp > 2)
str.Append("<a href=\"" + leftstr + "-" + (curp - 1) + rightstr + "\" class=\"page\">上一页</a>");
else
str.Append("<a href=\"" + leftstr + rightstr + "\" class=\"page\">上一页</a>");
}
if (leftMin > 2)
str.Append("<a class=\"page\" href=\"" + leftstr + rightstr + "\" title=\"第1页\">1</a><a class=\"around\" href=\"" + leftstr + "-" + (curp - 1).ToString() + rightstr + "\" title=\"上一页\">‹‹</a>");
if (leftMin == 2)
str.Append("<a class=\"page\" href=\"" + leftstr + rightstr + "\" title=\"第1页\">1</a>");
//中间
for (int i = leftMin; i <= RightMax; i++)
{
if (i == curp)
str.Append("<a class=\"pagenow\">" + i.ToString() + "</a>");
else
{
if(i > 1)
str.Append("<a class=\"page\" href=\"" + leftstr + "-" + i.ToString() + rightstr + "\" title=\"第" + i.ToString() + "页\">" + i.ToString() + "</a>");
else
str.Append("<a class=\"page\" href=\"" + leftstr + rightstr + "\" title=\"第" + i.ToString() + "页\">" + i.ToString() + "</a>");
}
}
//右侧
if (RightMax < pagecount - 1)
str.Append("<a class=\"around\" href=\"" + leftstr + "-" +(curp + 1).ToString() + rightstr + "\" title=\"下一页\">››</a><a class=\"page\" href=\"" + leftstr + "-" +pagecount.ToString() + rightstr + "\" title=\"第" + pagecount.ToString() + "页\">" + pagecount.ToString() + "</a>");
if (RightMax == pagecount - 1)
str.Append("<a class=\"page\" href=\"" + leftstr +"-" + pagecount.ToString() + rightstr + "\" title=\"第" + pagecount.ToString() + "页\">" + pagecount.ToString() + "</a>");
if (curp == pagecount)
str.Append("<a class=\"pagenow\">下一页</a>");
else
str.Append("<a href=\"" + leftstr + "-" + (curp + 1) + rightstr + "\" class=\"page\">下一页</a>");
return str.ToString();
}
/// <summary>
/// 取得数除以2得数的整数部份
/// </summary>
/// <param name="i">被2除的整数</param>
/// <returns></returns>
public static int intplus(int i)
{
if (i % 2 == 0)
return i / 2;
else
return (i - 1) / 2;
}
}