在列出大量的信息时,需要对列出的信息进行分页,就要显示直观的分页信息上一页、下一页,当前显示第几页,共几页,页数下拉列表,直接定位到选择的页数。
下页的方法是显示分页内容的通用方法:
/// <summary>
/// 分页显示函数,返回分页内容
/// </summary>
/// <param name="_strUrl">链接的地址</param>
/// <param name="_intTotal">总记录数</param>
/// <param name="_intOdd">每页的记录数</param>
/// <param name="Currpage">当前页</param>
/// <returns>string 分页内容</returns>
protected string GetPagesLnk(string _strUrl, int _intTotal, int _intOdd, string Currpage)
{
string _strPageCodeHTML = "";
string _strCurrpage = Currpage;
int _intTotalPage, _intCurrPage;
if (_strUrl.IndexOf("?") == _strUrl.Length)
{
_strUrl = _strUrl + "1=1";
}
if (_strUrl.IndexOf("?") == -1)
{
_strUrl = _strUrl + "?1=1"; //如果没有带参数,则加一个“?”以便后面加参数
}
_intTotalPage = _intTotal / _intOdd;
if (_intTotal % _intOdd > 0)
{
_intTotalPage = _intTotalPage + 1;
}
_intCurrPage = int.Parse(_strCurrpage);
if (_intCurrPage < 1)
{
_intCurrPage = 1;
}
if (_intCurrPage > _intTotalPage)
{
_intCurrPage = _intTotalPage;
}
if (_intTotalPage != 1)
{//总页数大于1时,才显示翻页
int totalPage = _intTotal % _intOdd > 0 ? _intTotal / _intOdd + 1 : _intTotal / _intOdd;
_strPageCodeHTML = Currpage + " / " + totalPage + "页 ";
if (_intCurrPage != 1)
{
_strPageCodeHTML = _strPageCodeHTML + "<a href=/"" + _strUrl + "&currpage=" + (_intCurrPage - 1) + "/">上一页</a> ";
}
//计算第N页的前后N页显示
int showlength, Before, After, Variance;
showlength = 10; //设置每页显示showlength个翻页标签
Variance = 0; //差额默认为0(没有差额)
Before = _intCurrPage - (showlength - 1) / 2; //为当前页显示平衡(左右两边显示一样多的链接),偶数转为奇数
if (Before < 1)
{//如果超出最小页,则算出“差额”(用来补给最后页),“前页”置为“第一页”
Variance = 1 - Before;
Before = 1;
}
After = _intCurrPage + (showlength - 1) / 2 + Variance; //计算最“后页”(需要加上差额)
if (After > _intTotalPage)
{//如果超出最大页码,则“后页”置为“最大页”
if (Before > 1)
{//如果“前页”还有向前移动的空间
Variance = Before - 1; //计算“前页”可以移动的差额
if (Variance < (After - _intTotalPage))
{//如果差额比“后页”与“最大页”小,则直接置为“第一页”
Before = 1;
}
else
{//否则,“前页”再向前移动“差额”页即可
Before = Before - (After - _intTotalPage);
}
}
After = _intTotalPage;
}
_strPageCodeHTML = _strPageCodeHTML + " <select id='SelectPage' οnchange=/"javascript:location.href='" + _strUrl + "&currpage='+this.options[this.selectedIndex].value+''/">";
for (int i = Before; i <= After; i++)
{//循环列出下拉框数值
if (i == _intCurrPage)
{
_strPageCodeHTML = _strPageCodeHTML + "<option value='" + i + "' selected='selected'>" + i + "</option>";
}
else
{
_strPageCodeHTML = _strPageCodeHTML + " <option value='" + i + "'>" + i + "</option>";
}
}
_strPageCodeHTML = _strPageCodeHTML + "</select>";
if (_intCurrPage != _intTotalPage)
{
_strPageCodeHTML = _strPageCodeHTML + " <a href=/"" + _strUrl + "&currpage=" + (_intCurrPage + 1) + "/">下一页</a> ";
}
}
return _strPageCodeHTML;
}