62,046
社区成员
发帖
与我相关
我的任务
分享
public partial class Pager : UserControl
{
int _PageSize = 30;
int _PageButtonSize = 20;
int _RecordCount = 0;
int _PageCount = 1;
int _PageGroupCount = 1;
int _CurPage = 1;
int _CurGroup = 1;
PagedDataSource _Data = new PagedDataSource();
public int PageSize
{
set
{
_PageSize = value;
computePage();
}
get
{
return _PageSize;
}
}
public int PageButtonSize
{
set
{
_PageButtonSize = value;
computePage();
}
get
{
return _PageButtonSize;
}
}
public DataView DataSource
{
set
{
_Data.DataSource = value;
computePage();
}
}
public PagedDataSource PageDataSource
{
get { return _Data; }
}
protected void Page_PreRender(object sender, System.EventArgs e)
{
string pageUrl = Regex.Replace(Request.Url.PathAndQuery, "[?|&]page=\\d+", "");
pageUrl += pageUrl.IndexOf("?") == -1 ? "?page=" : "&page=";
Panel panelContext = new Panel();
LiteralControl textTotal = new LiteralControl();
textTotal.ID = "textTotal";
textTotal.Text = string.Format("总页数:{0} 页面: {1}/{2} " , _RecordCount, _CurPage, _PageCount);
panelContext.Controls.Add(textTotal);
if ( 1 < _CurPage)
{
HtmlAnchor link = new HtmlAnchor();
link.InnerText ="上一页";
link.HRef = string.Format("{0}{1}", pageUrl ,_CurPage-1);
panelContext.Controls.Add(link);
panelContext.Controls.Add(new LiteralControl(" "));
}
if (_CurGroup > 1)
{
HtmlAnchor link = new HtmlAnchor();
link.InnerText = "...";
int prePage = (_CurGroup-1) * PageButtonSize;
link.HRef = pageUrl + prePage.ToString();
panelContext.Controls.Add(link);
}
panelContext.Controls.Add(new LiteralControl(" "));
int actPage = _CurGroup * PageButtonSize;
if (actPage > _PageCount) actPage = _PageCount;
for (int i = (_CurGroup - 1) * PageButtonSize + 1; i <= actPage; i++)
{
HtmlAnchor link = new HtmlAnchor();
link.InnerText = i.ToString();
link.HRef = pageUrl + i.ToString();
if (i == _CurPage)
{
link.Disabled = true;
}
panelContext.Controls.Add(link);
panelContext.Controls.Add(new LiteralControl(" "));
}
if (_CurGroup < _PageGroupCount)
{
HtmlAnchor link = new HtmlAnchor();
link.InnerText = "...";
int lastPage = _CurGroup * PageButtonSize + 1;
link.HRef = pageUrl + lastPage.ToString();
panelContext.Controls.Add(link);
panelContext.Controls.Add(new LiteralControl(" "));
}
if (_PageCount > _CurPage)
{
HtmlAnchor link = new HtmlAnchor();
link.InnerText = " 下一页 ";
link.HRef = string.Format("{0}{1}", pageUrl, _CurPage +1);
panelContext.Controls.Add(link);
panelContext.Controls.Add(new LiteralControl(" "));
}
this.Controls.Add(panelContext);
}
private void computePage()
{
_RecordCount = _Data.DataSourceCount;
_CurPage = FormUtil.GetQueryInt("page");
if (_CurPage == int.MinValue)
{
_CurPage = 1;
}
_PageCount = _RecordCount / _PageSize;
if (_RecordCount % PageSize != 0 || _RecordCount == 0)
{
_PageCount += 1;
}
_PageGroupCount = _PageCount / _PageButtonSize;
if (_PageGroupCount % _PageButtonSize != 0 || _PageGroupCount == 0)
{
_PageGroupCount += 1;
}
_CurGroup = _CurPage / _PageButtonSize;
if (_CurPage % _PageButtonSize != 0 || _CurGroup == 0)
{
_CurGroup += 1;
}
_Data.AllowPaging = true;
_Data.PageSize = _PageSize;
_Data.AllowPaging = true;
_Data.CurrentPageIndex = _CurPage - 1;
}
}