ASP.NET 分页控件

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
}
}
上一篇:转 InnoDB索引


下一篇:public static void main(String[] args){}函数理解