手机
当前位置:查字典教程网 >编程开发 >asp.net教程 >ASP.Net 分页控件源码
ASP.Net 分页控件源码
摘要:特性:、支持datagrid,datalist等分种数据显示控件,理论上只要有datasource的控件都可以、支持url方式分页,url分...

特性:

、支持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>

【ASP.Net 分页控件源码】相关文章:

ASP.NET2.0服务器控件之Render方法

收藏的asp.net文件上传类源码

ASP.NET技巧:做个DataList可分页的数据源

ASP.Net中数据展示控件的嵌套使用示例

asp.net动态加载自定义控件的方法

ASP.NET MVC 学习5、登陆页面改为SSO验证

ASP.NET实用代码片段

ASP.NET技巧:access下的分页方案

asp.net微软图表控件使用示例代码分享

asp.net Google样式分页控件

精品推荐
分类导航