广

ASP.NET

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    ASP.Net 分页控件源码

    2018-05-03 14:17:09 次阅读 稿源:互联网
    广告

    特性:
    、支持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), 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
    }
    }

    在页面上只需要向下面这样写:
    代码如下:

    <%@ Control Language="c#" %>
    <%@ Register TagPrefix="Anchor" Namespace="MyCompany.Controls" Assembly="MyCompany.Controls" %>
    <ANCHOR:PAGER id="Pager1" runat="server"></ANCHOR:PAGER>

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告