时间:2016-02-16 03:12 来源: 我爱IT技术网 作者:佚名
欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【ASP.Net 分页控件源码】,下面是详细的讲解!
ASP.Net 分页控件源码
using System;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Web;
using System.Web.UI;
using System.Text.RegularExpressions;
namespace MyCompany.Controls
{
/// <summary>
/// 分页控件
/// </summary>
public class Pager : Label, INamingContainer
{
#region 成员变量和构造函数
HttpContext context=HttpContext.Current;
Label countLabel;
HyperLink previousButton;
HyperLink nextButton;
HyperLink firstButton;
HyperLink lastButton;
HyperLink[] pagingLinkButtons;
public override ControlCollection Controls
{
get
{
EnsureChildControls();
return base.Controls;
}
}
protected override void CreateChildControls()
{
Controls.Clear();
AddCountLabel();
AddPageButtons();
AddPreviousNextHyperLinks();
AddFirstLastHyperLinks();
}
#endregion
#region 呈现方法
protected override void Render(HtmlTextWriter writer)
{
// 修改总页数小于等于1的时候不呈现任何控件
// int totalPages=CalculateTotalPages();
//
// if (totalPages <=1)
// return;
AddAttributesToRender(writer);
writer.AddAttribute(HtmlTextWriterAttribute.Class, this.CssClass, false);
RenderCountLabel(writer);
RenderFirst(writer);
RenderPrevious(writer);
RenderPagingButtons(writer);
RenderNext(writer);
RenderLast(writer);
}
void RenderCountLabel(HtmlTextWriter writer)
{
countLabel.RenderControl(writer);
LiteralControl l=new LiteralControl(" ");
l.RenderControl(writer);
}
void RenderFirst (HtmlTextWriter writer)
{
firstButton.RenderControl(writer);
LiteralControl l=new LiteralControl(" ");
l.RenderControl(writer);
}
void RenderLast (HtmlTextWriter writer)
{
lastButton.RenderControl(writer);
LiteralControl l=new LiteralControl(" ");
l.RenderControl(writer);
}
void RenderPrevious (HtmlTextWriter writer)
{
previousButton.RenderControl(writer);
LiteralControl l=new LiteralControl(" ");
l.RenderControl(writer);
}
void RenderNext(HtmlTextWriter writer)
{
nextButton.RenderControl(writer);
LiteralControl l=new LiteralControl(" ");
l.RenderControl(writer);
}
private void RenderButtonRange(int start, int end, HtmlTextWriter writer)
{
for (int i=start; i < end; i++)
{
if (PageIndex==i)
{
Literal l=new Literal();
l.Text="<font color=red>" + (i + 1).ToString() + "</font>";
l.RenderControl(writer);
}
else
{
pagingLinkButtons.RenderControl(writer);
}
if (i < (end - 1))
writer.Write(" ");
}
LiteralControl l1=new LiteralControl(" ");
l1.RenderControl(writer);
}
private void RenderPagingButtons(HtmlTextWriter writer)
{
int totalPages;
totalPages=CalculateTotalPages();
if (totalPages <=10)
{
RenderButtonRange(0, totalPages, writer);
}
else
{
int lowerBound=(PageIndex - 4);
int upperBount=(PageIndex + 6);
if (lowerBound <=0)
lowerBound=0;
if (PageIndex <=4)
RenderButtonRange(0, 10, writer);
else if (PageIndex < (totalPages - 5))
RenderButtonRange(lowerBound, (PageIndex + 6), writer);
else if (PageIndex >=(totalPages - 5))
RenderButtonRange((totalPages - 10), totalPages, writer);
}
}
#endregion
#region 控件树方法
/// <summary>
/// 信息标签
/// </summary>
void AddCountLabel()
{
countLabel=new Label();
countLabel.ID="countLabel";
countLabel.Text=string.Format(text, CalculateTotalPages().ToString("n0"));
Controls.Add(countLabel);
}
private void AddPageButtons()
{
pagingLinkButtons=new HyperLink[CalculateTotalPages()];
for (int i=0; i < pagingLinkButtons.Length; i++)
{
pagingLinkButtons=new HyperLink();
pagingLinkButtons.EnableViewState=false;
pagingLinkButtons.Text=(i + 1).ToString();
pagingLinkButtons.ID=i.ToString();
pagingLinkButtons.CssClass=linkCss;
pagingLinkButtons.NavigateUrl=GetHrefString(i);
Controls.Add(pagingLinkButtons);
}
}
/// <summary>
/// 首页末页
/// </summary>
void AddFirstLastHyperLinks()
{
firstButton=new HyperLink();
firstButton.ID="First";
firstButton.Text="首页";
if(PageIndex !=0 && CalculateTotalPages() > 0)
{
firstButton.NavigateUrl=GetHrefString(0);
}
else
{
firstButton.Enabled=false;
}
Controls.Add(firstButton);
lastButton=new HyperLink();
lastButton.ID="Last";
lastButton.Text="末页";
if(PageIndex !=CalculateTotalPages() - 1)
{
lastButton.NavigateUrl=GetHrefString(CalculateTotalPages() - 1);
}
else
{
lastButton.Enabled=false;
}
Controls.Add(lastButton);
}
/// <summary>
/// 上一页下一页
/// </summary>
void AddPreviousNextHyperLinks()
{
previousButton=new HyperLink();
previousButton.ID="Prev";
previousButton.Text="上一页";
if (HasPrevious)
{
previousButton.NavigateUrl=GetHrefString(PageIndex - 1);
}
else
{
previousButton.Enabled=false;
}
Controls.Add(previousButton);
nextButton=new HyperLink();
nextButton.ID="Next";
nextButton.Text="下一页";
if(HasNext)
{
nextButton.NavigateUrl=GetHrefString(PageIndex + 1);
}
else
{
nextButton.Enabled=false;
}
Controls.Add(nextButton);
}
#endregion
#region 私有属性
private bool HasPrevious
{
get
{
if (PageIndex > 0)
return true;
return false;
}
}
private bool HasNext
{
get
{
if (PageIndex + 1 < CalculateTotalPages() )
return true;
return false;
}
}
#endregion
#region 帮助方法和公共属性
/// <summary>
/// 获取分页导航按钮的超链接字符串
/// </summary>
/// <param name="pageIndex">该分页按钮相对应的页索引</param>
/// <returns>分页导航按钮的超链接字符串</returns>
private string GetHrefString(int pageIndex)
{
string url=Page.Request.RawUrl;
if (Regex.IsMatch(url, @"(\d+).shtml", RegexOptions.IgnoreCase))
{
url=Regex.Replace(url, @"(\d+).shtml", pageIndex + ".shtml");
}
if (Regex.IsMatch(url, @"PageIndex=(\d+)", RegexOptions.IgnoreCase))
{
url=Regex.Replace(url, @"PageIndex=(\d+)", "PageIndex=" + pageIndex.ToString());
}
return Page.Server.UrlPathEncode(url);
}
public int CalculateTotalPages()
{
int totalPagesAvailable;
if (TotalRecords==0)
return 0;
totalPagesAvailable=TotalRecords / PageSize;
if ((TotalRecords % PageSize) > 0)
totalPagesAvailable++;
return totalPagesAvailable;
}
/// <summary>
/// 当前页
/// </summary>
public int PageIndex
{
get
{
int _pageIndex=0;
if ((!Page.IsPostBack) && (context.PageIndex > 0))
_pageIndex=context.PageIndex;
else
_pageIndex=Convert.ToInt32(ViewState["PageIndex"]);
if (_pageIndex < 0)
return 0;
else
{
if (_pageIndex > CalculateTotalPages()-1)
return CalculateTotalPages()-1;
else
return _pageIndex;
}
}
set
{
ViewState["PageIndex"]=value;
}
}
/// <summary>
/// 每页记录数
/// </summary>
public int PageSize
{
get
{
int pageSize=Convert.ToInt32(ViewState["PageSize"]);
if (pageSize==0)
{
return 10;
}
return pageSize;
}
set
{
ViewState["PageSize"]=value;
}
}
/// <summary>
/// 总记录数
/// </summary>
public int TotalRecords
{
get
{
return Convert.ToInt32(ViewState["TotalRecords"]);
}
set
{
ViewState["TotalRecords"]=value;
}
}
private string text="共{0}页";
private string linkCss="";
/// <summary>
/// 链接样式
/// </summary>
public string LinkCss
{
get { return linkCss; }
set { linkCss=value;}
}
private string textCss="";
/// <summary>
/// 文字样式
/// </summary>
public string TextCss
{
get { return textCss; }
set { textCss=value;}
}
public string TextFormat
{
get
{
return text;
}
set
{
text=value;
}
}
#endregion
}
}
关于ASP.Net 分页控件源码的用户互动如下:
相关问题:
答: >>详细
相关问题:
答: >>详细
相关问题:
答: >>详细
- 【asp】asp.net url重写浅谈-net-url重写
- 【DataSet】DataSet、DataTable、DataRow区别详解
- 【asp】asp.net 动态添加多个用户控件-net-动态添
- 【ASP】ASP.NET中内嵌页面代码的一个问题-NET-内
- 【As】Asp.net中的页面乱码的问题-sp--pn-ne-et
- 【增加记录】asp.net中获取新增加记录的ID Access
- 【创建】ASP.NET Web API教程 创建域模型的方法详
- 【Asp】Asp.net 页面调用javascript变量的值-net-
- 【ASP】ASP.NET 5升级后如何删除旧版本的DNX-NET5
- 【404页面】ASP.NET设置404页面返回302HTTP状态码
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
