ASP.Net 分页控件源码
发布时间:2020-12-15 20:45:55 所属栏目:asp.Net 来源:网络整理
导读:特性: 、支持datagrid,datalist等分种数据显示控件,理论上只要有datasource的控件都可以 、支持url方式分页,url分页的每一页都可以被搜索引擎搜到,并且支持url重写 、控件样式可自定义 、封装完全,使用过程序只需写一行代码 复制代码 代码如下: /*******
特性: 复制代码 代码如下: /****************************************************************** ** 文件名:Pager.cs ** 创建人:杨响武 ** 日 期:2005年7月27日 ** 修改人: ** 日 期: ** 描 述: ** **---------------------------------------------------------------- ******************************************************************/ 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),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,pageIndex + ".shtml"); } if (Regex.IsMatch(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 } } 在页面上只需要向下面这样写: 复制代码 代码如下: <%@ Control Language="c#" %> <%@ Register TagPrefix="Anchor" Namespace="MyCompany.Controls" Assembly="MyCompany.Controls" %> <ANCHOR:PAGER id="Pager1" runat="server"></ANCHOR:PAGER> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – mvc 4 beginform with route name
- asp.net – 在Visual Studio 2012中调试很慢
- 使用Linq表达式在扩展方法中有趣(?)
- 数组 – 如何在vbscript中实现具有可变大小的数组
- asp.net-mvc – 如何在Asp.Net MVC中做部分帖子?
- asp.net – GridView中的工具提示
- asp.net-mvc – ASP.NET MVC如何使用ASP.NET成员资格提供程
- 如何从中等信任的ASP.NET中的bin文件夹加载文件
- 是否可以在.NET中将WinForm转换为WebForm?
- asp.net – 程序或函数期望未提供的参数
推荐文章
站长推荐
热点阅读