Python语言技术文档

微信小程序技术文档

php语言技术文档

jsp语言技术文档

asp语言技术文档

C#/.NET语言技术文档

html5/css技术文档

javascript

点击排行

您现在的位置:首页 > 技术文档 > C#/.NET入门教程

ASP.Net 分页控件源码

来源:中文源码网    浏览:125 次    日期:2024-05-11 09:58:04
【下载文档:  ASP.Net 分页控件源码.txt 】


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 { /// /// 分页控件 /// 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 = "" + (i + 1).ToString() + ""; 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 控件树方法 /// /// 信息标签 /// 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); } } /// /// 首页末页 /// 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); } /// /// 上一页下一页 /// 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 帮助方法和公共属性 /// /// 获取分页导航按钮的超链接字符串 /// /// 该分页按钮相对应的页索引 /// 分页导航按钮的超链接字符串 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; } /// /// 当前页 /// 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; } } /// /// 每页记录数 /// public int PageSize { get { int pageSize = Convert.ToInt32(ViewState["PageSize"]); if (pageSize == 0) { return 10; } return pageSize; } set { ViewState["PageSize"] = value; } } /// /// 总记录数 /// public int TotalRecords { get { return Convert.ToInt32(ViewState["TotalRecords"]); } set { ViewState["TotalRecords"] = value; } } private string text = "共{0}页"; private string linkCss = ""; /// /// 链接样式 /// public string LinkCss { get { return linkCss; } set { linkCss = value;} } private string textCss = ""; /// /// 文字样式 /// 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" %>

相关内容