ASP.Net 分页控件源码

定兴一份子

定兴一份子

2016-02-19 09:45

下面是个超简单的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), 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

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)
展开更多 50%)
分享

猜你喜欢

ASP.Net 分页控件源码

Web开发
ASP.Net 分页控件源码

ASP.Net 2.0 图形控件简述

Web开发
ASP.Net 2.0 图形控件简述

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

ASP.Net基础学习 HTML控件简单介绍

Web开发
ASP.Net基础学习 HTML控件简单介绍

Asp.Net的控件如何与Server交互

Web开发
Asp.Net的控件如何与Server交互

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Asp.Net控件加载错误的解决方法

ASP
Asp.Net控件加载错误的解决方法

asp.NET特写

电脑网络
asp.NET特写

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

C# WinForm窗口最小化到系统托盘

C# WinForm窗口最小化到系统托盘

Win10正式版如何配置麦克风?

Win10正式版如何配置麦克风?
下拉加载更多内容 ↓