using System;
using System.ComponentModel;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls; namespace Rocky.Web.Controls
{
[ParseChildren(true), PersistChildren(false), ToolboxData("<{0}:WebPager runat='server'></{0}:WebPager>"), Description("WebPager控件")]
public partial class WebPager : CompositeControl
{
#region 字段
private LinkButton[] lbDigits;
private LinkButton lbFirst, lbPrevious, lbPrevBatch, lbNextBatch, lbNext, lbLast;
private TextBox tbJumpIndex;
private LinkButton btnJump;
private DropDownList ddlJumpIndex; private int urlPageIndex;
/// <summary>
/// 是否启用URL分页
/// </summary>
private bool urlPaging;
/// <summary>
/// 获取或设置查询字符串集合。(当有多个查询字符串时使用,指定的分页子串必须放在最后,格式如:name=xx&pageIndex)
/// </summary>
private string queryString;
#endregion #region 属性
protected override HtmlTextWriterTag TagKey
{
get { return HtmlTextWriterTag.Div; }
} public ButtonFlags VisibleFlags
{
get { return ViewState["VisibleFlags"] != null ? (ButtonFlags)ViewState["VisibleFlags"] : ButtonFlags.All; }
set { ViewState["VisibleFlags"] = value; }
} [Browsable(true), Description("获取或设置首页文字。"), Category("分页外观"), DefaultValue("<font face='webdings'>9</font>")]
public String FirstText
{
get { return ViewState["FirstText"] != null ? (String)ViewState["FirstText"] : "<font face='webdings'>9</font>"; }
set { ViewState["FirstText"] = value; }
}
[Browsable(true), Description("获取或设置前翻文字。"), Category("分页外观"), DefaultValue("...")]
public String ForwardText
{
get { return ViewState["ForwardText"] != null ? (String)ViewState["ForwardText"] : "..."; }
set { ViewState["ForwardText"] = value; }
}
[Browsable(true), Description("获取或设置上一页字。"), Category("分页外观"), DefaultValue("<font face='webdings'>3</font>")]
public String PreviousText
{
get { return ViewState["PreviousText"] != null ? (String)ViewState["PreviousText"] : "<font face='webdings'>3</font>"; }
set { ViewState["PreviousText"] = value; }
}
[Browsable(true), Description("获取或设置下一页文字。"), Category("分页外观"), DefaultValue("<font face='webdings'>4</font>")]
public String NextText
{
get { return ViewState["NextText"] != null ? (String)ViewState["NextText"] : "<font face='webdings'>4</font>"; }
set { ViewState["NextText"] = value; }
}
[Browsable(true), Description("获取或设置后翻文字。"), Category("分页外观"), DefaultValue("...")]
public String BackText
{
get { return ViewState["BackText"] != null ? (String)ViewState["BackText"] : "..."; }
set { ViewState["BackText"] = value; }
}
[Browsable(true), Description("获取或设置尾页文字。"), Category("分页外观"), DefaultValue("<font face='webdings'>:</font>")]
public String LastText
{
get { return ViewState["LastText"] != null ? (String)ViewState["LastText"] : "<font face='webdings'>:</font>"; }
set { ViewState["LastText"] = value; }
}
[Browsable(true), Description("获取或设置没有启用页码的样式。"), Category("分页外观"), DefaultValue("")]
public String DisabledCss
{
get { return ViewState["DisabledCss"] != null ? (String)ViewState["DisabledCss"] : String.Empty; }
set { ViewState["DisabledCss"] = value; }
}
[Browsable(true), Description("获取或设置当前页码的样式。"), Category("分页外观"), DefaultValue("")]
public String CurrentCss
{
get { return ViewState["CurrentCss"] != null ? (String)ViewState["CurrentCss"] : String.Empty; }
set { ViewState["CurrentCss"] = value; }
}
private PageJump pageJump;
[Browsable(true), Description("获取或设置跳转索引框的样式。"), Category("分页外观")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content), TypeConverter(typeof(ExpandableObjectConverter)), PersistenceMode(PersistenceMode.InnerProperty)]
public PageJump PageJump
{
get
{
if (pageJump == null)
{
pageJump = new PageJump();
// IsTrackingViewState获取一个值,用于指示服务器控件是否会将更改保存到其视图状态中
if (IsTrackingViewState)
{
((IStateManager)pageJump).TrackViewState();
}
}
return pageJump;
}
} [Browsable(true), Description("获取或设置数据记录总数。"), Category("分页数据"), DefaultValue()]
public Int32 RecordCount
{
get { return ViewState["RecordCount"] != null ? (Int32)ViewState["RecordCount"] : ; }
set
{
#if DEBUG
if (value < )
{
throw new ArgumentOutOfRangeException();
}
#endif
ViewState["RecordCount"] = value;
}
}
[Browsable(true), Description("获取或设置每页显示的记录数量。"), Category("分页数据"), DefaultValue()]
public Int32 PageSize
{
get { return ViewState["PageSize"] != null ? (Int32)ViewState["PageSize"] : ; }
set
{
#if DEBUG
if (value < )
{
throw new ArgumentOutOfRangeException();
}
#endif
ViewState["PageSize"] = value;
}
}
[Description("获取总页数。"), DefaultValue()]
public Int32 PageCount
{
get { return this.PageSize > ? (this.RecordCount + this.PageSize - ) / this.PageSize : ; }
}
[Browsable(true), Description("获取或设置当前页码。"), Category("分页数据"), DefaultValue()]
public Int32 PageIndex
{
get
{
return urlPaging ? urlPageIndex : (ViewState["PageIndex"] != null ? (Int32)ViewState["PageIndex"] : );
}
set
{
#if DEBUG
if (value < )
{
throw new ArgumentOutOfRangeException();
}
#endif
ViewState["PageIndex"] = value;
}
}
[Browsable(true), Description("获取或设置每次显示的页码数量。"), Category("分页数据"), DefaultValue()]
public Int32 PageNumberCount
{
get { return ViewState["PageNumberCount"] != null ? (Int32)ViewState["PageNumberCount"] : ; }
set
{
#if DEBUG
if (value < )
{
throw new ArgumentOutOfRangeException();
}
#endif
ViewState["PageNumberCount"] = value;
}
}
#endregion #region 重写方法
protected override void OnInit(EventArgs e)
{
base.Font.Name = "Verdana";
base.Font.Size = FontUnit.Parse("12px");
base.OnInit(e);
} /// <summary>
/// 重写ICompositeControlDesignerAccessor接口的RecreateChildContrls方法
/// </summary>
protected override void RecreateChildControls()
{
if (!urlPaging)
{
EnsureChildControls();
}
} /// <summary>
/// 重写Control基类的CreateChildControls方法
/// </summary>
protected override void CreateChildControls()
{
if (!urlPaging)
{
//清除所有子控件
Controls.Clear(); var flags = this.VisibleFlags; lbFirst = new LinkButton();
lbFirst.ID = "lbFirst";
lbFirst.CommandName = "LinkJump";
lbFirst.Text = this.FirstText;
lbFirst.Visible = (flags & ButtonFlags.First) == ButtonFlags.First;
Controls.Add(lbFirst); lbPrevious = new LinkButton();
lbPrevious.ID = "lbPrevious";
lbPrevious.CommandName = "LinkJump";
lbPrevious.Text = this.PreviousText;
lbPrevious.Visible = (flags & ButtonFlags.Previous) == ButtonFlags.Previous;
Controls.Add(lbPrevious); int pageIndex = this.PageIndex, pageNumberCount = this.PageNumberCount, pageCount = this.PageCount; if (pageIndex <= )
{
lbPrevious.CssClass = lbFirst.CssClass = this.DisabledCss;
lbFirst.Attributes["rel"] = "change";
lbPrevious.Attributes["rel"] = "change";
}
int numIndex = (pageIndex / pageNumberCount) * pageNumberCount;
int firtNum = (pageIndex == numIndex) ? numIndex - pageNumberCount + : numIndex + ;
int lastNum = firtNum + pageNumberCount - ;
if (lastNum > pageCount)
{
lastNum = pageCount;
}
lbPrevBatch = new LinkButton();
lbPrevBatch.ID = "lbPrevBatch";
lbPrevBatch.CommandName = "LinkJump";
lbPrevBatch.Text = this.ForwardText;
lbPrevBatch.Visible = (flags & ButtonFlags.PreviousBatch) == ButtonFlags.PreviousBatch;
Controls.Add(lbPrevBatch);
if (firtNum <= || pageIndex <= pageNumberCount)
{
lbPrevBatch.CssClass = this.DisabledCss;
lbPrevBatch.Attributes["rel"] = "change";
}
//设置数字翻页控件数组
lbDigits = new LinkButton[lastNum - firtNum + ];
int j = ;
for (int i = firtNum; i <= lastNum; i++)
{
lbDigits[j] = new LinkButton();
lbDigits[j].ID = "lb" + i.ToString();
lbDigits[j].Text = i.ToString();
lbDigits[j].CommandName = "LinkJump";
Controls.Add(lbDigits[j]);
if (i == this.PageIndex)
{
lbDigits[j].Font.Bold = true;
lbDigits[j].CssClass = this.CurrentCss;
lbDigits[j].Attributes["rel"] = "change";
}
j++;
}
lbNextBatch = new LinkButton();
lbNextBatch.ID = "lbNextBatch";
lbNextBatch.CommandName = "LinkJump";
lbNextBatch.Text = this.BackText;
lbNextBatch.Visible = (flags & ButtonFlags.NextBatch) == ButtonFlags.NextBatch;
Controls.Add(lbNextBatch);
if (lastNum >= pageCount || pageCount < (pageIndex + pageNumberCount))
{
lbNextBatch.CssClass = this.DisabledCss;
lbNextBatch.Attributes["rel"] = "change";
} lbNext = new LinkButton();
lbNext.ID = "lbNext";
lbNext.CommandName = "LinkJump";
lbNext.Text = this.NextText;
lbNext.Visible = (flags & ButtonFlags.Next) == ButtonFlags.Next;
Controls.Add(lbNext); lbLast = new LinkButton();
lbLast.ID = "lbLast";
lbLast.CommandName = "LinkJump";
lbLast.Text = this.LastText;
lbLast.Visible = (flags & ButtonFlags.Last) == ButtonFlags.Last;
Controls.Add(lbLast); if (pageIndex >= pageCount)
{
lbLast.CssClass = lbNext.CssClass = this.DisabledCss;
lbNext.Attributes["rel"] = "change";
lbLast.Attributes["rel"] = "change";
} if (pageJump != null && this.PageJump.Visible)
{
if (this.PageJump.JumpType == PageJumpType.TextBox)
{
tbJumpIndex = new TextBox();
tbJumpIndex.ID = "tbJumpIndex";
tbJumpIndex.Text = pageIndex.ToString();
tbJumpIndex.Attributes.Add("onkeyup", @"this.value=this.value.replace(/[^\d]/g,'');if(this.value==''||this.value>" + pageCount + ")this.value=1;");
tbJumpIndex.Attributes.Add("onbeforepaste", @"clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''));");
Controls.Add(tbJumpIndex);
btnJump = new LinkButton();
btnJump.ID = "btnJump";
btnJump.CommandName = "PageJump";
btnJump.Text = this.PageJump.Text;
Controls.Add(btnJump);
}
else
{
ddlJumpIndex = new DropDownList();
ddlJumpIndex.ID = "ddlJumpIndex";
for (int i = ; i <= pageCount; i++)
{
ddlJumpIndex.Items.Add(new ListItem(i.ToString(), i.ToString()));
}
ddlJumpIndex.SelectedValue = pageIndex.ToString();
ddlJumpIndex.EnableViewState = false;
ddlJumpIndex.AutoPostBack = true;
ddlJumpIndex.SelectedIndexChanged += (sender, e) =>
{
int toJump = int.Parse(((DropDownList)sender).SelectedValue);
if (toJump >= && toJump <= this.PageCount)
{
this.PageIndex = toJump;
}
this.OnPageIndexChanged(e);
};
Controls.Add(ddlJumpIndex);
}
}
}
} protected override void RenderContents(HtmlTextWriter writer)
{
if (!urlPaging)
{
this.CreateChildControls(); lbFirst.RenderControl(writer);
writer.Write("&nbsp;&nbsp;"); lbPrevious.RenderControl(writer);
writer.Write("&nbsp;&nbsp;"); lbPrevBatch.RenderControl(writer);
writer.Write("&nbsp;&nbsp;"); // 呈现页码部分
foreach (LinkButton lb in lbDigits)
{
lb.RenderControl(writer);
writer.Write("&nbsp;&nbsp;");
} lbNextBatch.RenderControl(writer);
writer.Write("&nbsp;&nbsp;"); lbNext.RenderControl(writer);
writer.Write("&nbsp;&nbsp;"); lbLast.RenderControl(writer); // 呈现索引跳转
if (pageJump != null)
{
writer.Write("&nbsp;&nbsp;"); writer.Write("共" + this.RecordCount + "条记录,当前第" + this.PageIndex + "/" + this.PageCount + "页&nbsp;&nbsp;"); switch (this.PageJump.JumpType)
{
//使用输入框输入页码跳转
case PageJumpType.TextBox:
if (tbJumpIndex != null && btnJump != null)
{
writer.Write(this.PageJump.BeginText);
tbJumpIndex.MaxLength = ;
tbJumpIndex.Style.Add("width", "24px");
tbJumpIndex.Style.Add("text-align", "center");
tbJumpIndex.RenderControl(writer);
writer.Write(this.PageJump.EndText);
btnJump.RenderControl(writer);
}
break;
//下拉列表框跳转
case PageJumpType.DropDownList:
if (ddlJumpIndex != null)
{
writer.Write(pageJump.BeginText);
ddlJumpIndex.RenderControl(writer);
writer.Write(pageJump.EndText);
}
break;
}
} writer.Write("<script>(function() {$(\"a[rel='change']\").each(function(i, o) {var a = $(o), span = document.createElement('span');span.className = a.attr('class');span.innerHTML = a.html();$(span).insertAfter(a);a.remove();});})();</script>");
}
else
{
// 上翻页码
int pageUpIndex = GetPageUpIndex(this.PageIndex, this.PageNumberCount);
// 下翻页码
int pageDownIndex = GetPageDownIndex(this.PageIndex, this.PageNumberCount); // 首页
if (!String.IsNullOrEmpty(this.FirstText))
{
if (this.PageIndex != )
{
writer.AddAttribute(HtmlTextWriterAttribute.Href, String.Format("?{0}=1", queryString));
}
else
{
writer.AddAttribute(HtmlTextWriterAttribute.Disabled, "true");
writer.AddAttribute(HtmlTextWriterAttribute.Class, this.DisabledCss);
}
writer.RenderBeginTag(HtmlTextWriterTag.A);
writer.Write(this.FirstText);
writer.RenderEndTag();
writer.Write("&nbsp;&nbsp;");
} // 前翻
if (!String.IsNullOrEmpty(this.PreviousText))
{
if (this.PageIndex > this.PageNumberCount)
{
writer.AddAttribute(HtmlTextWriterAttribute.Href, String.Format("?{0}={1}", queryString, pageUpIndex));
}
else
{
writer.AddAttribute(HtmlTextWriterAttribute.Disabled, "true");
writer.AddAttribute(HtmlTextWriterAttribute.Class, this.DisabledCss);
}
writer.RenderBeginTag(HtmlTextWriterTag.A);
writer.Write(this.PreviousText);
writer.RenderEndTag();
writer.Write("&nbsp;&nbsp;");
} // 页码
RenderPageNumber(writer, this); // 后翻
if (!String.IsNullOrEmpty(this.NextText))
{
if (pageDownIndex <= this.PageCount)
{
writer.AddAttribute(HtmlTextWriterAttribute.Href, String.Format("?{0}={1}", queryString, pageDownIndex));
}
else
{
writer.AddAttribute(HtmlTextWriterAttribute.Disabled, "true");
writer.AddAttribute(HtmlTextWriterAttribute.Class, this.DisabledCss);
}
writer.RenderBeginTag(HtmlTextWriterTag.A);
writer.Write(this.NextText);
writer.RenderEndTag();
writer.Write("&nbsp;&nbsp;");
} // 尾页
if (!String.IsNullOrEmpty(this.LastText))
{
if (this.PageIndex != this.PageCount)
{
writer.AddAttribute(HtmlTextWriterAttribute.Href, String.Format("?{0}={1}", queryString, this.PageCount));
}
else
{
writer.AddAttribute(HtmlTextWriterAttribute.Disabled, "true");
writer.AddAttribute(HtmlTextWriterAttribute.Class, this.DisabledCss);
}
writer.RenderBeginTag(HtmlTextWriterTag.A);
writer.Write(this.LastText);
writer.RenderEndTag();
} if (this.pageJump != null)
{
// 状态页
writer.Write("&nbsp;&nbsp;");
writer.Write("共" + this.RecordCount + "条记录,当前第" + this.PageIndex + "/" + this.PageCount + "页&nbsp;&nbsp;"); // 索引页
RenderPageIndexContent(writer, this);
}
}
} protected override void Render(HtmlTextWriter writer)
{
if (this.RecordCount == || this.PageIndex < || this.PageIndex > this.RecordCount)
{
return;
}
base.Render(writer);
}
#endregion #region 自定义ViewState
protected override object SaveViewState()
{
object baseState = base.SaveViewState();
object thisState = null; if (pageJump != null)
{
thisState = ((IStateManager)pageJump).SaveViewState();
} if (thisState != null)
{
return new Pair(baseState, thisState);
}
else
{
return baseState;
}
} protected override void TrackViewState()
{
if (pageJump != null)
{
((IStateManager)pageJump).TrackViewState();
}
base.TrackViewState();
}
#endregion #region PageIndexChanged事件
private static readonly object EventKey = new object(); /// <summary>
/// 添加数据绑定事件
/// </summary>
public event EventHandler PageIndexChanged
{
add { Events.AddHandler(EventKey, value); }
remove { Events.RemoveHandler(EventKey, value); }
} /// <summary>
/// 实现数据绑定
/// </summary>
/// <param name="e"></param>
protected virtual void OnPageIndexChanged(EventArgs e)
{
EventHandler dataBindHandler = (EventHandler)Events[EventKey];
if (dataBindHandler != null)
{
dataBindHandler(this, e);
}
} /// <summary>
/// 重写OnBubbleEvent方法,执行事件冒泡,使用事件参数的CommandName成员确定是否需要引发事件处理程序OnPageIndexChanged,并返回true
/// </summary>
/// <param name="source"></param>
/// <param name="e"></param>
/// <returns></returns>
protected override bool OnBubbleEvent(object source, EventArgs e)
{
bool handled = false;
if (e is CommandEventArgs)
{
CommandEventArgs ce = (CommandEventArgs)e;
//设置LinkButton的跳转
if (ce.CommandName == "LinkJump")
{
LinkButton lb = (LinkButton)source;
switch (lb.ID)
{
//首页跳转
case "lbFirst":
this.PageIndex = ;
break;
//上一页跳转
case "lbPrevious":
if (this.PageIndex > )
{
this.PageIndex -= ;
}
break;
//前翻跳转
case "lbPrevBatch":
if ((this.PageIndex - this.PageNumberCount) > )
{
this.PageIndex -= this.PageNumberCount;
}
break;
//后翻跳转
case "lbNextBatch":
if ((this.PageIndex + this.PageNumberCount) < this.PageCount)
{
this.PageIndex += this.PageNumberCount;
}
break;
//下一页跳转
case "lbNext":
if (this.PageCount > this.PageIndex)
{
this.PageIndex += ;
}
break;
//尾页跳转
case "lbLast":
this.PageIndex = this.PageCount;
break;
//数字页跳转
default:
int numToJump = int.Parse(lb.ID.Substring(, lb.ID.Length - ));
if (numToJump == this.PageIndex)
{
return false;
}
this.PageIndex = numToJump;
break;
}
//响应跳页码变更事件,在此事件中绑定数据
OnPageIndexChanged(EventArgs.Empty);
handled = true;
}
//设置用户输入数字的跳转
else if (ce.CommandName == "PageJump")
{
int toJump = int.Parse(tbJumpIndex.Text.Trim());
if ((toJump < ) || (toJump > this.PageCount))
{
return false;
}
this.PageIndex = toJump;
OnPageIndexChanged(EventArgs.Empty);
handled = true;
}
}
return handled;
}
#endregion
} #region UrlMethods
public partial class WebPager
{
public void UrlToProperties(string urlPagingKeyWord, string urlQueryString)
{
if (int.TryParse(base.Page.Request.QueryString[urlPagingKeyWord], out urlPageIndex))
{
urlPaging = true;
queryString = urlQueryString;
}
} /// <summary>
/// 得到前翻页码(动态,前置条件:当前页码)
/// </summary>
/// <param name="pageIndex">当前选中的页码</param>
/// <param name="pageNumberCount">每页显示的分页页码数量</param>
/// <returns></returns>
private static Int32 GetPageUpIndex(Int32 pageIndex, Int32 pageNumberCount)
{
if (pageIndex % pageNumberCount == )
{
return (pageIndex / pageNumberCount - ) * pageNumberCount + pageNumberCount;
}
else
{
return (pageIndex / pageNumberCount - ) * pageNumberCount + pageNumberCount;
}
} /// <summary>
/// 得到后翻页码(动态,前置条件:当前页码)
/// </summary>
/// <param name="pageIndex">当前选中的页码</param>
/// <param name="pageNumberCount">每页显示的分页页码数量</param>
/// <returns></returns>
private static Int32 GetPageDownIndex(Int32 pageIndex, Int32 pageNumberCount)
{
if (pageIndex % pageNumberCount == )
{
return (pageIndex / pageNumberCount) * pageNumberCount + ;
}
else
{
return (pageIndex / pageNumberCount + ) * pageNumberCount + ;
}
} /// <summary>
/// 呈现页码部分
/// </summary>
/// <param name="output">HtmlTextWriter</param>
/// <param name="currentPageIndex">当前页码</param>
/// <param name="showPageNumberCount">显示的页码数量</param>
private static void RenderPageNumber(HtmlTextWriter output, WebPager pager)
{
Int32 firstIndex = , endIndex = ;
// 如果当前页不能整除 PageNumberCount 页
if (pager.PageIndex % pager.PageNumberCount != )
{
firstIndex = pager.PageIndex / pager.PageNumberCount * pager.PageNumberCount + ;
endIndex = firstIndex + pager.PageNumberCount;
}
else
{
firstIndex = (pager.PageIndex / pager.PageNumberCount - ) * pager.PageNumberCount + ;
endIndex = firstIndex + pager.PageNumberCount;
} for (Int32 i = firstIndex; i < endIndex && i <= pager.PageCount; i++)
{
// 当前选中页用特殊颜色标记
if (i != pager.PageIndex)
{
output.AddAttribute(HtmlTextWriterAttribute.Href, String.Format("?{0}={1}", pager.queryString, i));
}
else
{
output.AddStyleAttribute(HtmlTextWriterStyle.FontWeight, "blod");
output.AddAttribute(HtmlTextWriterAttribute.Class, pager.CurrentCss);
}
output.RenderBeginTag(HtmlTextWriterTag.A);
output.Write(i);
output.RenderEndTag();
output.Write("&nbsp;&nbsp;");
}
} /// <summary>
/// 呈现索引部分
/// </summary>
/// <param name="output">HtmlTextWriter</param>
/// <param name="sumPageCount">总页数</param>
/// <param name="queryString">查询字符串</param>
/// <param name="selectedPageNumberColor">当前选中页码的颜色</param>
public static void RenderPageIndexContent(HtmlTextWriter output, WebPager pager)
{
if (pager.pageJump.Visible)
{
String uniqueId = String.Empty;
switch (pager.pageJump.JumpType)
{
case PageJumpType.TextBox:
uniqueId = "txt" + pager.UniqueID;
output.Write(pager.PageJump.BeginText);
output.Write("<input id='" + uniqueId + "' type='text' maxlength='9' value='" + pager.PageIndex + "' style='width:24px;text-align:center;' onkeypress=\"if(event.keyCode==13){document.getElementById('" + uniqueId.Replace("txt", "btn") + "').onclick();event.returnValue=false;}\" />");
output.Write(pager.PageJump.EndText);
output.Write("<a id='" + uniqueId.Replace("txt", "btn") + "' ");
// 验证输入的页码是否为正整数
output.Write("onclick=\"var str=document.getElementById('");
output.Write(uniqueId);
output.Write("').value;var reg=");
output.Write(@"/^\+?[1-9][0-9]*$/");
output.Write(";if(str.length==0||!reg.test(str)){alert('请输入正确的页码!');return;};var pageIndex=parseInt(str);if(pageIndex==");
output.Write(pager.PageIndex);
output.Write("){return;}if(pageIndex>");
// 总页数
output.Write(pager.PageCount);
output.Write("||pageIndex<=0){alert('索引超出范围,请重新输入页码!');}else{window.location.href='?");
// 查询字符串
output.Write(pager.queryString);
output.Write("='+pageIndex+'';}\">" + pager.PageJump.Text + "</a>");
break;
case PageJumpType.DropDownList:
uniqueId = "opt" + pager.UniqueID;
// 左边文字
output.Write(pager.PageJump.BeginText);
// <select />
output.Write("<select id=\"");
output.Write(uniqueId);
output.Write("\" ");
output.Write("onchange=\"window.location.href='?");
// 查询字符串
output.Write(pager.queryString);
output.Write("='+document.getElementById('");
output.Write(uniqueId);
output.Write("').value+''\"></select>");
output.Write("<script>(function (optWebPager){optWebPager.style.display='none';for(var i=0;i<");
// 总页数
output.Write(pager.PageCount);
output.Write(";i++){optWebPager.options[i]=new Option('第'+(i+1)+'页',i+1);}optWebPager[");
output.Write(pager.PageIndex);
output.Write("-1].selected='selected';optWebPager.style.display='';})(document.getElementById('");
output.Write(uniqueId);
output.Write("'));</script>");
// 右边文字
output.Write(pager.PageJump.EndText);
break;
}
}
}
}
#endregion [Flags]
public enum ButtonFlags
{
None = ,
First = << ,
Previous = << ,
PreviousBatch = << ,
NextBatch = << ,
Next = << ,
Last = << ,
All = First | Previous | PreviousBatch | NextBatch | Next | Last
}
}
using System;
using System.Web.UI;
using System.ComponentModel;
using System.IO; namespace Rocky.Web.Controls
{
/// <summary>
/// 索引功能类
/// </summary>
[TypeConverter(typeof(ExpandableObjectConverter))]
public class PageJump : IStateManager, ITextControl
{
#region 属性
[Description("获取或设置是否显示跳转索引框。"), DefaultValue(true), NotifyParentProperty(true)]
public Boolean Visible
{
get { return ViewState["Visible"] != null ? (Boolean)ViewState["Visible"] : true; }
set { ViewState["Visible"] = value; }
} [Description("获取或设置位于页索引框左边的文字。"), DefaultValue("转到第"), NotifyParentProperty(true)]
public String BeginText
{
get { return ViewState["BeginText"] != null ? (String)ViewState["BeginText"] : "转到第"; }
set { ViewState["BeginText"] = value; }
} [Description("获取或设置索引框的类型。"), DefaultValue(PageJumpType.TextBox), NotifyParentProperty(true)]
public PageJumpType JumpType
{
get { return ViewState["JumpType"] != null ? (PageJumpType)ViewState["JumpType"] : PageJumpType.TextBox; }
set { ViewState["JumpType"] = value; }
} [Description("获取或设置索引框的内容。"), DefaultValue("跳转"), NotifyParentProperty(true)]
public String Text
{
get { return ViewState["Text"] != null ? (String)ViewState["Text"] : "跳转"; }
set { ViewState["Text"] = value; }
} [Description("获取或设置位于页索引框右边的文字。"), DefaultValue("页"), NotifyParentProperty(true)]
public String EndText
{
get { return ViewState["EndText"] != null ? (String)ViewState["EndText"] : "页"; }
set { ViewState["EndText"] = value; }
}
#endregion #region 自定义ViewState
private Boolean isTracking;
private StateBag viewState; protected StateBag ViewState
{
get
{
if (this.viewState == null)
{
this.viewState = new StateBag(false);
if (this.isTracking)
{
((IStateManager)this.viewState).TrackViewState();
}
}
return this.viewState;
}
}
#endregion #region IStateManager 成员
public bool IsTrackingViewState
{
get
{
return this.isTracking;
}
} public void LoadViewState(object savedState)
{
if (savedState != null)
{
((IStateManager)this.ViewState).LoadViewState(savedState);
}
} public object SaveViewState()
{
return this.viewState != null ? ((IStateManager)this.viewState).SaveViewState() : null;
} public void TrackViewState()
{
this.isTracking = true;
if (this.viewState != null)
{
((IStateManager)this.viewState).TrackViewState();
}
}
#endregion
} /// <summary>
/// 索引功能外观
/// </summary>
public enum PageJumpType
{
TextBox, DropDownList
}
}

ASP.NET 分页控件的更多相关文章

  1. asp.net分页控件

    一.说明 AspNetPager.dll这个分页控件主要用于asp.net webform网站,现将整理代码如下 二.代码 1.首先在测试页面Default.aspx页面添加引用 <%@ Reg ...

  2. 【asp.net爬虫】asp.NET分页控件抓取第n页数据 javascript:__doPostBack

    最近在模拟HTTP请求抓取数据,但是服务器是asp.net开发的 分页控件代码 <tr> <td align="left">共&nbsp210&am ...

  3. asp.net分页控件库

    AspNetPager分页控件 AspNetPager分页控件解决了分页中的很多问题,直接采用该控件进行分页处理,会将繁琐的分页工作变得简单化,下面是我如何使用AspNetPager控件进行分页处理的 ...

  4. 小白写的一个ASP.NET分页控件,仅供娱乐

    无聊,第一次写博客,自己动手写了一个分页控件.由于我是新手,有很多地方写得不够好,希望各位大牛多多指正.哈哈哈 /// <summary> /// 分页控件 /// </summar ...

  5. 对自写的Asp.Net分页控件的应用方式(异步无刷新分页)

    前台代码 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" co ...

  6. 我学习的自定义ASP.NET分页控件

    public class MyPagecontroll { public int TotalCount { get; set; }//数据的总条数 public int PageSize { get; ...

  7. asp.net webform 自定义分页控件

    做web开发一直用到分页控件,自己也动手实现了个,使用用户自定义控件. 翻页后数据加载使用委托,将具体实现放在在使用分页控件的页面进行注册. 有图有真相,给个直观的认识: 自定义分页控件前台代码: & ...

  8. asp.net 分页-自己写分页控件

    去年就发表过asp.net 分页-利用后台直接生成html分页 ,那种方法只是单纯的实现了分页,基本不能使用,那时就想写个自己的分页控件,无奈能力有限.最近有点时间了,就自己做出了这个分页控件.我承认 ...

  9. 分页控件-ASP.NET(AspNetPager)

    AspNetPager是asp.net中常用的分页控件,下载AspNetPager.dll,添加引用,在工具栏就可以看到AspNetPager控件: <div class="oa-el ...

随机推荐

  1. 基于 php-redis 的redis操作

    基于 php-redis 的redis操作 林涛 发表于:2016-5-13 12:12 分类:PHP 标签:php,php-redis,redis 203次 redis的操作很多的,下面的例子都是基 ...

  2. 深入理解JVM虚拟机-2自动内存管理机制

    java虚拟机所管理的内存将会包括一下几个运行时数据区域. 程序计数器: 程序计数器是一块较小的内存空间.字节码解析式工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支.循环.跳转 ...

  3. Linux下数据库的安装和使用

    数据库有多重要就不用说了,每一个计算机相关行业的人都必须要学会基本的数据库操作,因为你总会用到的. 之前转过一些学习资源: 与MySQL的零距离接触 - 慕课网 Python操作MySQL数据库 生物 ...

  4. xocde 静态类库 相对路径 与 绝对路径

    xocde 静态类库 相对路径 与 绝对路径 导入别人的 静态类库,通常我直接用鼠标把文件夹拉到了 xcode的项目里面: 这时,导入的静态类库路径变成了,绝对路径:如果你的项目,不换位置那么编译运行 ...

  5. IE6 IE7 hasLayout bug之li间的3px垂直间距

    1. li中仅包含a,span等内联(行内)元素2.触发条件: li元素的layout被触发(通常为设置了宽或高,设置overflow:hidden在IE7下同样触发layout),且a或span元素 ...

  6. Ubuntu 修复windows启动项

    打开终端输入命令sudo gedit /etc/default/grub修改GRUB_TIMEOUT="10"然后在终端中输入sudo update-grubupdate 命令会自 ...

  7. Shader for sprite clipping

    Unity3D - Shader for sprite clippinghttp://stackoverflow.com/questions/23165899/unity3d-shader-for-s ...

  8. Qt之findChild

    简述 在Qt编程过程中,通常会有多个部件嵌套,而大多数部件都有父子依赖关系,但是有些情况下不能直接引用子部件,这时我们可以通过父部件来findChild -"查找孩子". 简述 查 ...

  9. Servlet后续的尾(yi)巴--------Filter过滤器

    -------载录自  http://www.blogjava.net/yangaiyou/archive/2007/08/29/140854.html  感谢博主心如止水 一心向佛 描写出这么的具体 ...

  10. hdu----(1950)Bridging signals(最长递增子序列 (LIS) )

    Bridging signals Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...