您的位置:首页 > 编程语言 > ASP

ASP.NET分页控件

2013-10-30 07:40 99 查看
效果图



这个在用户控件一用一次

<%@ Register Assembly="Uni2Uni.ERP.Common" Namespace="Uni2Uni.ERP.Common.PageBar"
TagPrefix="cc1" %>
<cc1:PageBar ID="pageBar" runat="server" Mode="Post" />

然后使用那个用户控件

<uc1:PageBarControl ID="PageBarControl1" runat="server" />

PageBarControl1.PageBar.Click += new EventHandler(PagerChange);

private void PagerChange(object sender, EventArgs e)

{

var queryEntity = ViewState["queryEntity"] as DamagedQueryEntity;

GetPageData(queryEntity, false);

}

private void GetPageData(DamagedQueryEntity queryEntity, bool bFirst = true)

{

if (bFirst)

PageBarControl1.PageBar.CurrentIndex = 1;

int totalCount;

var list = bll.GetDamagedOrderPage(PageBarControl1.PageBar.CurrentIndex, PageBarControl1.PageBar.Size, out totalCount, queryEntity);

this.PageBarControl1.PageBar.Total = totalCount;

this.bindData.DataSource = list;

this.bindData.DataBind();

}

源码

using System;

using System.Collections.Specialized;

using System.ComponentModel;

using System.Text;

using System.Text.RegularExpressions;

using System.Web.UI;

using System.Web.UI.HtmlControls;

using System.Web.UI.WebControls;

[assembly: WebResource("Uni2Uni.ERP.Common.PageBar.PageBar.css", "text/css", PerformSubstitution = true)]

namespace Uni2Uni.ERP.Common.PageBar

{

public enum PageBarMode

{

Get,

Post

}

#region - PageBar -

/// <summary>

/// 分页控件

/// </summary>

[ToolboxData("<{0}:PageBar runat=\"server\" />")]

[DefaultEvent("Click")]

[DefaultProperty("Size")]

public sealed class PageBar : WebControl, IPostBackEventHandler

{

#region - Properties -

#region = Total =

/// <summary>

/// 总共有多少记录集合

/// </summary>

/// <value>The total.</value>

[Category("Data"), Description("总共有多少记录集合")]

public int Total

{

get

{

object o = ViewState["Total"];

return o == null ? 0 : (int)o;

}

set { ViewState["Total"] = value; }

}

#endregion

#region = CurrentIndex =

/// <summary>

/// 当前使用的页面

/// </summary>

/// <value>The index of the current.</value>

[Category("Data"), Description("当前使用的页面")]

public int CurrentIndex

{

get

{

object o = ViewState["CurrentIndex"];

int _currentindex = ((o == null) ? 0 : (int)o);

if (_currentindex == 0)

{

_currentindex = 1;

if (string.IsNullOrEmpty(UrlFormatString) == false)

{

string url = Page.Request.Url.ToString();

string urlformat = string.Format(UrlFormatString, @"(\d+)");

urlformat = urlformat.Replace("?", "\\?");

urlformat = Regex.Replace(urlformat, "#.+$", string.Empty);

Match m = Regex.Match(url, urlformat, RegexOptions.IgnoreCase);

if (m.Success)

{

string value = m.Groups[1].Value;

if (string.IsNullOrEmpty(value) == false)

{

_currentindex = int.Parse(value);

}

}

}

else

{

if (Page.Request.QueryString[QueryStringKey] != null)

{

int.TryParse(Page.Request.QueryString[QueryStringKey], out _currentindex);

}

}

}

return _currentindex;

}

set { ViewState["CurrentIndex"] = value; }

}

#endregion

#region = Size =

/// <summary>

/// 每个页面显示多少记录集合

/// </summary>

/// <value>The size.</value>

[Category("Data"), Description("每个页面显示多少记录集合")]

public int Size

{

get

{

object o = ViewState["Size"];

return o == null ? 10 : (int)o;

}

set { ViewState["Size"] = value; }

}

#endregion

#region = Displaysize =

/// <summary>

/// 显示页脚,控件显示多少页面数

/// </summary>

/// <value>The displaysize.</value>

[Category("Data"), Description("控件显示多少页面数")]

public int Displaysize

{

get

{

object o = ViewState["Displaysize"];

return o == null ? 10 : (int)o;

}

set { ViewState["Displaysize"] = value; }

}

#endregion

#region = Unit =

/// <summary>

/// 记录的单位

/// </summary>

/// <value>The unit.</value>

[Category("Appearance"), Description("记录的单位")]

public string Unit

{

get

{

object o = ViewState["Unit"];

return o == null ? string.Empty : (string)o;

}

set { ViewState["Unit"] = value; }

}

#endregion

#region = UrlFormatString =

[

Category("Property"),

Description("获取或设置 URL 显示格式。"),

DefaultValue("")

]

public string UrlFormatString

{

get

{

object o = ViewState["UrlFormatString"];

return o == null ? string.Empty : (string)o;

}

set { ViewState["UrlFormatString"] = value; }

}

#endregion

#region = QueryStringKey =

/// <summary>

/// 传递值是使用的关键字

/// </summary>

/// <value>The query string key.</value>

[Description("传递值是使用的关键字"), DefaultValue("page")]

public string QueryStringKey

{

get

{

object o = ViewState["QueryStringKey"];

return o == null ? "page" : (string)o;

}

set { ViewState["QueryStringKey"] = value; }

}

#endregion

#region = 跳转的页数 =

/// <summary>

/// 跳转的页数

/// </summary>

[Browsable(true)]

[Bindable(true, BindingDirection.TwoWay)]

[DefaultValue("")]

[Localizable(true)]

[PersistenceMode(PersistenceMode.EncodedInnerDefaultProperty)]

[Description("跳转的页数")]

public string Text

{

get

{

return ViewState["Text"] == null ? "" : ViewState["Text"].ToString();

}

set

{

ViewState["Text"] = value;

}

}

#endregion

#region = Format =

/// <summary>

/// 数字格式化

/// </summary>

/// <value>The format.</value>

[Description("数字格式化"), DefaultValue("")]

public string Format

{

get

{

object o = ViewState["Format"];

return o == null ? string.Empty : (string)o;

}

set { ViewState["Format"] = value; }

}

#endregion

#region = NextPageImageUrl =

/// <summary>

/// 下一页图片路径

/// </summary>

/// <value>The next page image URL.</value>

[Description("下一页图片路径"), DefaultValue("")]

public string NextPageImageUrl

{

get

{

object o = ViewState["NextPageImageUrl"];

return o == null ? string.Empty : (string)o;

}

set { ViewState["NextPageImageUrl"] = value; }

}

#endregion

#region = LastPageImageUrl =

private string _lastimage = string.Empty;

/// <summary>

/// 上一页图片路径

/// </summary>

/// <value>The last page image URL.</value>

[Description("上一页图片路径"), DefaultValue("")]

public string LastPageImageUrl

{

get

{

object o = ViewState["LastPageImageUrl"];

return o == null ? string.Empty : (string)o;

}

set { ViewState["LastPageImageUrl"] = value; }

}

#endregion

#region = Mode =

[

Category("Property"),

Description("Pagebar的模式"),

DefaultValue("")

]

public PageBarMode Mode

{

get

{

object o = ViewState["Mode"];

return o == null ? PageBarMode.Get : (PageBarMode)o;

}

set { ViewState["Mode"] = value; }

}

#endregion

#region = ValidationGroup =

[Category("Behavior"), DefaultValue(""), Themeable(false), Description("PostBackControl_ValidationGroup")]

public string ValidationGroup

{

get

{

var text1 = (string)ViewState["ValidationGroup"];

if (text1 != null)

{

return text1;

}

return string.Empty;

}

set { ViewState["ValidationGroup"] = value; }

}

#endregion

#region = CausesValidation =

/// <summary>

/// 获取或设置一个值,该值指示在单击 LinkButton 控件时是否执行验证。

/// </summary>

/// <value><c>true</c> if [causes validation]; otherwise, <c>false</c>.</value>

[Category("Behavior"), Themeable(false), Description("Button_CausesValidation"), DefaultValue(true)]

public bool CausesValidation

{

get

{

object obj1 = ViewState["CausesValidation"];

if (obj1 != null)

{

return (bool)obj1;

}

return true;

}

set { ViewState["CausesValidation"] = value; }

}

#endregion

#region = Target =

/// <summary>

/// Gets or sets the target.

/// </summary>

/// <value>The target.</value>

[

Category("Navigation"),

TypeConverter(typeof(TargetConverter)),

DefaultValue(""),

Description("HyperLink_Target")]

public string Target

{

get

{

var text1 = (string)ViewState["Target"];

if (text1 != null)

{

return text1;

}

return "_self";

}

set { ViewState["Target"] = value; }

}

#endregion

#endregion

#region - Event -

#region = OnClick =

private static readonly object EventClick = new object();

[Description("PageBar_OnClick"), Category("Action")]

public event EventHandler Click

{

add { Events.AddHandler(EventClick, value); }

remove { Events.RemoveHandler(EventClick, value); }

}

#endregion

#endregion

#region = OnPreRender =

/// <summary>

/// Raises the <see cref="E:System.Web.UI.Control.PreRender"></see> event.

/// </summary>

/// <param name="e">An <see cref="T:System.EventArgs"></see> object that contains the event data.</param>

protected override void OnPreRender(EventArgs e)

{

base.OnPreRender(e);

string cssKey = "PageBarCss";

if (Page == null || Page.Header == null)

{

return;

}

if (string.IsNullOrEmpty(CssClass))

{

CssClass = "PageBar";

}

if (Page.Header.FindControl(cssKey) == null && CssClass == "PageBar")

{

string css = Page.ClientScript.GetWebResourceUrl(GetType(), "Uni2Uni.ERP.Common.PageBar.PageBar.css");

var hl = new HtmlLink();

hl.ID = cssKey;

hl.Href = css;

hl.Attributes["type"] = "text/css";

hl.Attributes["rel"] = "stylesheet";

//this.Page.Header.Controls.Add(hl);

CssClass = "PageBar";

}

}

#endregion

#region = RenderContents =

/// <summary>

/// Renders the contents of the control to the specified writer. This method is used primarily by control developers.

/// </summary>

/// <param name="writer">A <see cref="T:System.Web.UI.HtmlTextWriter"></see> that represents the output stream to render HTML content on the client.</param>

protected override void RenderContents(HtmlTextWriter writer)

{

base.RenderContents(writer);

#region - Valid -

if (IsEnabled == false)

{

return;

}

if (Size == 0 || Displaysize == 0)

{

return;

}

#endregion

if (Total > 0 && CurrentIndex > 0)

{

double dPageCount = 1.0 * Total / Size;

int PageCount = Convert.ToInt32(Math.Ceiling(dPageCount)); //共多少页

PostBackOptions options = GetPostBackOptions("{0}");

string srt = Page.ClientScript.GetPostBackEventReference(options, true);

//---【新添加】

//只能输入正整数

string js = "<script type=\"text/javascript\">var postbackstring=\"" + srt + "\";var total=" + PageCount + "; function PositiveInteger(element, keyCode) {if (keyCode == 9 || keyCode == 116 || (keyCode >= 35 && keyCode <= 40)) {return true;}if ($(element).val().length == 0 && (keyCode == 96 || keyCode==48)){return false;}return (keyCode >= 96 && keyCode <= 105 || keyCode == 8 || (keyCode >= 48 && keyCode <= 57));}function validatePage(element){if($(\"#goPage\").val()==\"\"){alert(\"请输入跳转页数。\");return false;}if($(\"#goPage\").val()>total){alert(\"跳转页数不能大于总页数。\");return false;}$(element).attr(\"href\",postbackstring.replace(\"{0}\",$(\"#goPage\").val()));return true;}</script>";

writer.Write(js);

if (CurrentIndex > PageCount)

{

CurrentIndex = PageCount;

}

//总共2784主题

writer.Write(PageBarResource.Total);

//writer.Write("总共");

writer.Write(" ");

writer.RenderBeginTag(HtmlTextWriterTag.Label);

writer.Write(Total.ToString(Format));

writer.RenderEndTag();

writer.Write(Unit);

writer.Write(", ");

writer.Write(PageBarResource.Page);

//writer.Write("当前");

writer.Write(" ");

writer.RenderBeginTag(HtmlTextWriterTag.Label);

writer.Write(CurrentIndex.ToString(Format));

writer.RenderEndTag();

writer.Write("/");

writer.RenderBeginTag(HtmlTextWriterTag.Label);

writer.Write(PageCount.ToString(Format));

writer.RenderEndTag();

if (PageCount > 1)

{

writer.Write(",");

int PagerGroup = Convert.ToInt32(Math.Ceiling(1.0 * PageCount / Displaysize)); //共多少页组

int CurrentGroup = (CurrentIndex - 1) / Displaysize + 1; //当前页组

int displaystart = (CurrentGroup - 1) * Displaysize + 1;

int displayend = displaystart + Displaysize;

if (displayend > (PageCount + 1))

{

displayend = PageCount + 1;

}

#region 显示后三的算法----------【新添加】

////显示后三的算法----------【新添加】

//if (PageCount > Displaysize && CurrentIndex > Displaysize - 3)

//{

// displaystart = CurrentIndex - (Displaysize - 4);

// displayend = CurrentIndex + 4;

// if (displayend - 1 >= PageCount)

// {

// displayend = PageCount + 1;

// }

//}

#endregion

//显示中间的算法----------【新添加】

if (PageCount > Displaysize && CurrentIndex >= Displaysize - ((Displaysize / 2) - 1))

{

displaystart = CurrentIndex - (Displaysize - (Displaysize / 2));

displayend = CurrentIndex + (Displaysize / 2);

if (displayend - 1 >= PageCount)

{

displayend = PageCount + 1;

}

}

//首页-------【新添加】

if (CurrentIndex != 1)

{

writer.RenderBeginTag(HtmlTextWriterTag.Span);

LinkText("【首页】", 1, writer);

writer.RenderEndTag();

}

else

{

//---【新添加】

writer.RenderBeginTag(HtmlTextWriterTag.Label);

writer.Write("【首页】");

writer.RenderEndTag();

}

//上一页

if (CurrentIndex > 1)

{

writer.RenderBeginTag(HtmlTextWriterTag.Span);

if (string.IsNullOrEmpty(LastPageImageUrl))

{

LinkText(PageBarResource.Previous, CurrentIndex - 1, writer);

//LinkText("【上一页】", this.CurrentIndex - 1, writer);

}

else

{

LinkText(

"<img alt=\"" + PageBarResource.Previous + "\" src=\"" + LastPageImageUrl + "\" />",

CurrentIndex - 1, writer);

//LinkText("<img alt=\"" +"【上一页】" + "\" src=\"" + this.LastPageImageUrl + "\" />", this.CurrentIndex - 1, writer);

}

writer.RenderEndTag();

}

else

{

//---【新添加】

writer.RenderBeginTag(HtmlTextWriterTag.Label);

writer.Write("【上一页】");

writer.RenderEndTag();

}

//上一组

if (CurrentGroup > 1 || displaystart != 1)

{

writer.AddAttribute(HtmlTextWriterAttribute.Title, "上"+Displaysize+"页");

writer.RenderBeginTag(HtmlTextWriterTag.Span);

int index = CurrentIndex - Displaysize;

if (index < 1)

{

index = 1;

}

LinkText("<<", index, writer);

writer.RenderEndTag();

}

else

{

//---【新添加】

writer.RenderBeginTag(HtmlTextWriterTag.Label);

writer.Write("<<");

writer.RenderEndTag();

}

string attr = string.Empty;

//显示数字

for (int i = displaystart; i < displayend; i++)

{

writer.RenderBeginTag(HtmlTextWriterTag.Span);

if (i != CurrentIndex)

{

LinkText(i.ToString() + " ", i, writer);

}

else

{

//当前页

writer.RenderBeginTag(HtmlTextWriterTag.Label);

writer.Write(i + " ");

writer.RenderEndTag();

}

writer.RenderEndTag();

}

//下一组

if (displayend - 1 < PageCount)

{

writer.AddAttribute(HtmlTextWriterAttribute.Title, "下" + Displaysize + "页");

writer.RenderBeginTag(HtmlTextWriterTag.Span);

int index = CurrentIndex + Displaysize;

if (index > PageCount)

{

index = PageCount;

}

LinkText(">>", index, writer);

writer.RenderEndTag();

}

else

{

//---【新添加】

writer.RenderBeginTag(HtmlTextWriterTag.Label);

writer.Write(">>");

writer.RenderEndTag();

}

//下一页

if (CurrentIndex < PageCount)

{

writer.RenderBeginTag(HtmlTextWriterTag.Span);

if (string.IsNullOrEmpty(NextPageImageUrl))

{

LinkText(PageBarResource.Next, CurrentIndex + 1, writer);

//LinkText("【下一页】", this.CurrentIndex + 1, writer);

}

else

{

LinkText("<img alt=\"" + PageBarResource.Next + "\" src=\"" + NextPageImageUrl + "\" />",

CurrentIndex + 1, writer);

//LinkText("<img alt=\"" + "【下一页】" + "\" src=\"" + this.NextPageImageUrl + "\" />", this.CurrentIndex + 1, writer);

}

writer.RenderEndTag();

}

else

{

//---【新添加】

writer.RenderBeginTag(HtmlTextWriterTag.Label);

writer.Write("【下一页】");

writer.RenderEndTag();

}

//尾页-------【新添加】

if (CurrentIndex != PageCount)

{

writer.RenderBeginTag(HtmlTextWriterTag.Span);

LinkText("【尾页】", PageCount, writer);

writer.RenderEndTag();

}

else

{

//---【新添加】

writer.RenderBeginTag(HtmlTextWriterTag.Label);

writer.Write("【尾页】");

writer.RenderEndTag();

}

//跳转---【新添加】

if (PagerGroup > 1)

{

writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");

writer.AddAttribute(HtmlTextWriterAttribute.Id, "goPage");

writer.AddAttribute(HtmlTextWriterAttribute.Value, Text);

writer.AddAttribute("onkeydown", "return PositiveInteger(this,event.keyCode);");

writer.AddStyleAttribute(HtmlTextWriterStyle.Height, "10px");

writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "40px");

writer.AddStyleAttribute(HtmlTextWriterStyle.Position, "relative");

writer.AddStyleAttribute(HtmlTextWriterStyle.Top, "4px");

writer.AddAttribute(HtmlTextWriterAttribute.Maxlength, PageCount.ToString().Length.ToString());

writer.RenderBeginTag(HtmlTextWriterTag.Input);

writer.RenderEndTag();

writer.AddAttribute("onclick", "return validatePage(this);");

writer.AddAttribute(HtmlTextWriterAttribute.Href, "javascript:void(0)");

writer.RenderBeginTag(HtmlTextWriterTag.A);

writer.Write("【跳转】");

writer.RenderEndTag();

}

}

}

else

{

Visible = false;

}

}

#endregion

#region - LinkText -

private void LinkText(string text, int index, HtmlTextWriter write)

{

var strHtml = new StringBuilder();

//href

if (Mode == PageBarMode.Get)

{

#region = 获取和解析当前的url =

if (string.IsNullOrEmpty(UrlFormatString))

{

strHtml.Append(UrlHelper.Current.Path);

strHtml.Append("?");

NameValueCollection querys = Page.Request.QueryString;

foreach (string s in querys.Keys)

{

if (s != QueryStringKey)

{

strHtml.AppendFormat("{0}={1}&", s, Page.Server.UrlEncode(querys[s]));

}

}

strHtml.AppendFormat("{0}={1}", QueryStringKey, index);

}

else

{

strHtml.AppendFormat(UrlFormatString, index);

}

#endregion

}

else

{

PostBackOptions options = GetPostBackOptions(index.ToString());

string js = null;

if (options != null)

{

js = Page.ClientScript.GetPostBackEventReference(options, true);

}

if (string.IsNullOrEmpty(js))

{

js = "javascript:void(0)";

}

strHtml.Append(js);

}

//text

write.AddAttribute(HtmlTextWriterAttribute.Href, strHtml.ToString());

if (Mode == PageBarMode.Get)

{

write.AddAttribute(HtmlTextWriterAttribute.Target, Target);

}

write.RenderBeginTag(HtmlTextWriterTag.A);

write.Write(text);

write.RenderEndTag();

}

#endregion

#region - GetPostBackOptions -

private PostBackOptions GetPostBackOptions(string index)

{

var options1 = new PostBackOptions(this, index);

options1.RequiresJavaScriptProtocol = true;

if (CausesValidation && (Page.GetValidators(ValidationGroup).Count > 0))

{

options1.PerformValidation = true;

options1.ValidationGroup = ValidationGroup;

}

return options1;

}

#endregion

#region - OnClick -

private void OnClick(EventArgs e)

{

var handler1 = (EventHandler)base.Events[EventClick];

if (handler1 != null)

{

handler1(this, e);

}

}

#endregion

#region IPostBackEventHandler Members

public void RaisePostBackEvent(string eventArgument)

{

if (CausesValidation)

{

Page.Validate(ValidationGroup);

}

int _currentindex;

if (int.TryParse(eventArgument, out _currentindex))

{

CurrentIndex = _currentindex;

}

OnClick(EventArgs.Empty);

}

#endregion

}

#endregion

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: