AspNetPager 服务器控件使用实例
来 源:Www.PigCode.Com
点击次数:(120)
作 者:
审核人:
时 间:2007-06-09
TAGS :
/// <summary>
/// 获取或设置一个值,该值指定是否总是显示AspNetPager分页按件,即使要分页的数据只有一页。
/// </summary>
/// <remarks>
/// 默认情况下,当要分页的数据小于两页时,AspNetPager不会在页面上显示任何内容,将此属性值设为true时,即使总页数只有一页,AspNetPager也将显示分页导航元素。
/// </remarks>
[Browsable(true),
Category("Behavior"),
DefaultValue(false),
Description("总是显示分页控件,即使要分页的数据只要一页")]
public bool AlwaysShow
{
get
{
object obj=ViewState["AlwaysShow"];
return (obj==null)?false:(bool)obj;
}
set
{
ViewState["AlwaysShow"]=value;
}
}
/// <summary>
/// 获取或设置由 AspNetPager 服务器控件在客户端呈现的级联样式表 (CSS) 类。
/// </summary>
[Browsable(true),
Description("应用于控件的CSS类名"),
Category("Appearance"),
DefaultValue(null)]
public override string CssClass
{
get{return base.CssClass;}
set
{
base.CssClass=value;
cssClassName=value;
}
}
/// <summary>
/// 获取或设置一个值,该值指示 AspNetPager 服务器控件是否向发出请求的客户端保持自己的视图状态,该属性经重写后不允许设为false。
/// </summary>
/// <remarks><see cref="AspNetPager"/> 服务器控件将一些重要的分页信息保存在ViewState中,当使用Url分页方式时,虽然视图状态在分页过程中没有任何作用,但若当前页需要回发,则必须启用视图状态以便分页控件能在页面回发后获取回发前的分页状态;当通过页面回发(PostBack)的方式来分页时,要使AspNetPager正常工作,必须启用视图状态。
/// <p><note>该属性并不能禁止用户用<![CDATA[<%@Page EnableViewState=false%> ]]>页指令来禁用整个页面的视图状态,当使用此指令并且设置AspNetPager通过页面回发来分页时,AspNetPager因为无法获取保存的信息而不能正常工作。</note></p></remarks>
[Browsable(false),
Description("是否启用控件的视图状态,该属性的值必须为true,不允许用户设置。"),
DefaultValue(true),
Category("Behavior")]
public override bool EnableViewState
{
get
{
return base.EnableViewState;
}
set
{
base.EnableViewState=true;
}
}
/// <summary>
/// 获取或设置当用户输入的页索引超出范围(大于最大页索引或小于最小页索引)时在客户端显示的错误信息。
/// </summary>
[Browsable(true),
Description("当用户输入的页索引超出范围(大于最大页索引或小于最小页索引)时在客户端显示的错误信息。"),
DefaultValue("页数超出范围!"),
Category("Data")]
public string PageIndexOutOfRangeErrorString
{
get
{
object obj=ViewState["PageIndexOutOfRangeErrorString"];
return (obj==null)?"页数超出范围!":(string)obj;
}
set
{
ViewState["PageIndexOutOfRangeErrorString"]=value;
}
}
/// <summary>
/// 获取或设置当用户输入无效的页索引(负值或非数字)时在客户端显示的错误信息。
/// </summary>
[Browsable(true),
Description("当用户输入无效的页索引(负值或非数字)时在客户端显示的错误信息。"),
DefaultValue("页索引无效!"),
Category("Data")]
public string InvalidPageIndexErrorString
{
get
{
object obj=ViewState["InvalidPageIndexErrorString"];
return (obj==null)?"页索引无效!":(string)obj;
}
set
{
ViewState["InvalidPageIndexErrorString"]=value;
}
}
#endregion
#endregion
#region Control Rendering Logic
/// <summary>
/// 重写 <see cref="System.Web.UI.Control.OnLoad"/> 方法。
/// </summary>
/// <param name="e">包含事件数据的 <see cref="EventArgs"/> 对象。</param>
protected override void OnLoad(EventArgs e)
{
if(urlPaging)
{
currentUrl=Page.Request.Path;
urlParams=Page.Request.QueryString;
string pageIndex=Page.Request.QueryString[urlPageIndexName];
int index=1;
try
{
index=int.Parse(pageIndex);
}
catch{}
OnPageChanged(new PageChangedEventArgs(index));
}
else
{
inputPageIndex=Page.Request.Form[this.UniqueID+"_input"];
}
base.OnLoad(e);
}
/// <summary>
/// 重写<see cref="System.Web.UI.Control.OnPreRender"/>方法。
/// </summary>
/// <param name="e">包含事件数据的 <see cref="EventArgs"/> 对象。</param>
protected override void OnPreRender(EventArgs e)
{
if(PageCount>1)
{
string checkscript="<script language="Javascript">function doCheck(el){var r=new RegExp("^s*(d+)s*$");if(r.test(el.value)){if(RegExp.$1<1||RegExp.$1>"+PageCount.ToString()+"){alert(""+PageIndexOutOfRangeErrorString+"");document.all['"+this.UniqueID+"_input'].select();return false;}return true;}alert(""+InvalidPageIndexErrorString+"");document.all['"+this.UniqueID+"_input'].select();return false;}</script>";
if((ShowInputBox==ShowInputBox.Always)||(ShowInputBox==ShowInputBox.Auto&&PageCount>=ShowBoxThreshold))
{
if(!Page.IsClientScriptBlockRegistered("checkinput"))
Page.RegisterClientScriptBlock("checkinput",checkscript);
string script="<script language="javascript" > <!-- nfunction BuildUrlString(key,value){ var _key=key.toLowerCase(); var prms=location.search; if(prms.length==0) return location.pathname+"?"+_key+"="+value; var params=prms.substring(1).split("&"); var newparam=""; var found=false; for(i=0;i<params.length;i++){ if(params[i].split("=")[0].toLowerCase()==_key){ params[i]=_key+"="+value; found=true; break; } } if(found) return location.pathname+"?"+params.join("&"); else return location+"&"+_key+"="+value; }n//--> </script>";
if(!Page.IsClientScriptBlockRegistered("BuildUrlScript"))
Page.RegisterClientScriptBlock("BuildUrlScript",script);
}
}
base.OnPreRender(e);
}
/// <summary>
/// 重写<see cref="System.Web.UI.WebControls.WebControl.AddAttributesToRender"/> 方法,将需要呈现的 HTML 属性和样式添加到指定的 <see cref="System.Web.UI.HtmlTextWriter"/> 中
/// </summary>
/// <param name="writer"></param>
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
if(this.Page!=null)
this.Page.VerifyRenderingInServerForm(this);
base.AddAttributesToRender(writer);
}
///<summary>
///重写 <see cref="System.Web.UI.WebControls.WebControl.RenderBeginTag"/> 方法,将 <see cref="AspNetPager"/> 控件的 HTML 开始标记输出到指定的 <see cref="System.Web.UI.HtmlTextWriter"/> 编写器中。
///</summary>
///<param name="writer"><see cref="System.Web.UI.HtmlTextWriter"/>,表示要在客户端呈现 HTML 内容的输出流。</param>
public override void RenderBeginTag(HtmlTextWriter writer)
{
bool showPager=(PageCount>1||(PageCount<=1&&AlwaysShow));
writer.WriteLine();
writer.Write("<!------------------------------ ");
writer.Write("AspNetPager V4.3 Start");
writer.WriteLine(" ------------------------------>");
writer.Write("<!-------------------- ");
writer.Write("Copyright:2003 Webdiyer(www.webdiyer.com)");
writer.Write(" ---------------------");
writer.WriteLine(">");
base.RenderBeginTag(writer);
if(!showPager)
{
writer.Write("<!-----因为总页数只有一页,并且AlwaysShow属性设为false,AspNetPager不显示任何内容,若要在总页数只有一页的情况下显示AspNetPager,请将AlwaysShow属性设为true!");
writer.Write("----->");
}
if((ShowCustomInfoSection==ShowCustomInfoSection.Left||ShowCustomInfoSection==ShowCustomInfoSection.Right)&&showPager)
{
writer.AddAttribute(HtmlTextWriterAttribute.Width,"100%");
writer.AddAttribute(HtmlTextWriterAttribute.Style,GetStyleString());
if(Height!=Unit.Empty)
writer.AddStyleAttribute(HtmlTextWriterStyle.Height,Height.ToString());
writer.AddAttribute(HtmlTextWriterAttribute.Border,"0");
writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding,"0");
writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing,"0");
writer.RenderBeginTag(HtmlTextWriterTag.Table);
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
WriteCellAttributes(writer,true);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
}
}