|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
觉得J2EE好像有很多工具,比如servlet,jboss,tomcat,ejb什么的,可是微软的.NET怎么什么也没有啊?分页|控件//此源代码仅供进修参考,不得用作任何贸易用处;
//若需修正偏重新编译该控件,请保存完全的源代码的版权信息!
//有关控件晋级及新控件公布信息,请寄望www.webdiyer.com。
usingSystem;
usingSystem.IO;
usingSystem.Web;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.HtmlControls;
usingSystem.Collections.Specialized;
usingSystem.Text;
usingSystem.ComponentModel;
usingSystem.ComponentModel.Design;
usingSystem.Collections;
namespaceWuqi.Webdiyer
{
#regionAspNetPagerServerControl
#region控件申明及示例
///<summary>
///用于ASP.NETWeb使用程序中对数据举行分页的的服务器控件。
///</summary>
///<remarks>分歧于DataGrid控件,AspNetPager分页控件自己其实不显现任何数据,而只显现页导航元素,数据在页面上的显现体例与该控件有关。该控件能够为DataGrid、DataList、Repeater和自界说控件举行分页,共同Sql存储历程,分页功能较利用DataGrid分页有分明提拔,特别是当数据量年夜时功能可提拔数倍!
///<p>AspNetPager2.0中新增了经由过程Url来分页的功效,这使得会见者能够间接输出响应的Url来会见任何页面,而且搜刮引擎也能够间接检索每一个页面,若利用DataGrid的分页功效,这是没法完成的。</p>
///<p>要利用AspNetPager分页控件,必需起码指定它的<seecref="RecordCount"/>属性,指定并编写<seecref="PageChanged"/>事务的处置程序。
///<seecref="RecordCount"/>属性指定要分页的一切数据的总项数,若未指定该值或该值小于即是<seecref="PageSize"/>,则AspNetPager控件不会显现任何内容。
///若未指定并编写<seecref="PageChanged"/>事务处置程序,则当用户点击页导航元素或在页索引文本框中手式输出页索引并提交时AspNetPager不会跳转到指定的页。
///AspNetPager控件的分页办法和DataGrid基础不异,即在它的<seecref="PageChanged"/>事务处置程序中将传送事务数据的<seecref="PageChangedEventArgs"/>的<seecref="PageChangedEventArgs.NewPageIndex"/>值赋给AspNetPager的<seecref="CurrentPageIndex"/>属性,然后从头将新的数据与数据显现控件绑定。</p></remarks>
///<example>以下示例申明怎样用AspNetPager对DataGrid举行分页。
///<code><![CDATA[
///<%@PageLanguage="C#"%>
///<%@ImportNamespace="System.Data"%>
///<%@ImportNamespace="System.Data.SqlClient"%>
///<%@ImportNamespace="System.Configuration"%>
///<%@RegisterTagPrefix="Webdiyer"Namespace="Wuqi.Webdiyer"Assembly="aspnetpager"%>
///<HTML>
///<HEAD>
///<TITLE>WelcometoWebdiyer.com</TITLE>
///<scriptrunat="server">
///SqlConnectionconn;
///SqlCommandcmd;
///voidPage_Load(objectsrc,EventArgse)
///{
///conn=newSqlConnection(ConfigurationSettings.AppSettings["ConnStr"]);
///if(!Page.IsPostBack)
///{
///cmd=newSqlCommand("GetNews",conn);
///cmd.CommandType=CommandType.StoredProcedure;
///cmd.Parameters.Add("@pageindex",1);
///cmd.Parameters.Add("@pagesize",1);
///cmd.Parameters.Add("@docount",true);
///conn.Open();
///pager.RecordCount=(int)cmd.ExecuteScalar();
///conn.Close();
///BindData();
///}
///}
///
///voidBindData()
///{
///cmd=newSqlCommand("GetNews",conn);
///cmd.CommandType=CommandType.StoredProcedure;
///cmd.Parameters.Add("@pageindex",pager.CurrentPageIndex);
///cmd.Parameters.Add("@pagesize",pager.PageSize);
///cmd.Parameters.Add("@docount",false);
///conn.Open();
///dataGrid1.DataSource=cmd.ExecuteReader();
///dataGrid1.DataBind();
///conn.Close();
///pager.CustomInfoText="纪录总数:<fontcolor="blue"><b>"+pager.RecordCount.ToString()+"</b></font>";
///pager.CustomInfoText+="总页数:<fontcolor="blue"><b>"+pager.PageCount.ToString()+"</b></font>";
///pager.CustomInfoText+="以后页:<fontcolor="red"><b>"+pager.CurrentPageIndex.ToString()+"</b></font>";
///}
///voidChangePage(objectsrc,PageChangedEventArgse)
///{
///pager.CurrentPageIndex=e.NewPageIndex;
///BindData();
///}
///</script>
///<metahttp-equiv="Content-Language"content="zh-cn">
///<metahttp-equiv="content-type"content="text/html;charset=gb2312">
///<METANAME="Generator"CONTENT="EditPlus">
///<METANAME="Author"CONTENT="Webdiyer(yhaili@21cn.com)">
///</HEAD>
///<body>
///<formrunat="server"ID="Form1">
///<asp:DataGridid="dataGrid1"runat="server"/>
///<Webdiyer:AspNetPagerid="pager"
///runat="server"
///PageSize="8"
///NumericButtonCount="8"
///ShowCustomInfoSection="left"
///PagingButtonSpacing="0"
///ShowInputBox="always"
///CSSClass="mypager"
///HorizontalAlign="right"
///OnPageChanged="ChangePage"
///SubmitButtonText="转到"
///NumericButtonTextFormatString="[{0}]"/>
///</form>
///</body>
///</HTML>
///]]>
///</code>
///<p>上面是该示例所用的SqlServer存储历程:</p>
///<code>
///<![CDATA[
///CREATEprocedureGetNews
///(@pagesizeint,
///@pageindexint,
///@docountbit)
///as
///setnocounton
///if(@docount=1)
///selectcount(id)fromnews
///else
///begin
///declare@indextabletable(idintidentity(1,1),nidint)
///declare@PageLowerBoundint
///declare@PageUpperBoundint
///set@PageLowerBound=(@pageindex-1)*@pagesize
///set@PageUpperBound=@PageLowerBound+@pagesize
///setrowcount@PageUpperBound
///insertinto@indextable(nid)selectidfromnewsorderbyaddtimedesc
///selectO.id,O.source,O.title,O.addtimefromnewsO,@indextabletwhereO.id=t.nid
///andt.id>@PageLowerBoundandt.id<=@PageUpperBoundorderbyt.id
///end
///setnocountoff
///GO
///]]>
///</code></example>
#endregion
[DefaultProperty("PageSize")]
[DefaultEvent("PageChanged")]
[ParseChildren(false)]
[PersistChildren(false)]
[Description("公用于ASP.NetWeb使用程序的分页控件")]
[Designer(typeof(PagerDesigner))]
[ToolboxData("<{0}:AspNetPagerrunat=server></{0}:AspNetPager>")]
publicclassAspNetPager:Panel,INamingContainer,IPostBackEventHandler,IPostBackDataHandler
{
privatestringcssClassName;
privatestringurlPageIndexName="page";
privateboolurlPaging=false;
privatestringinputPageIndex;
privatestringcurrentUrl=null;
privateNameValueCollectionurlParams=null;#regionProperties#regionNavigationButtons///<summary>
///猎取或设置一个值,该值指挥当鼠标指针悬停在导航按钮上时是不是显现工具提醒。
///</summary>
[Browsable(true),
Category("导航按钮"),DefaultValue(true),Description("指定当鼠标停止在导航按钮上时,是不是显现工具提醒")]
publicboolShowNavigationToolTip
{
get
{
objectobj=ViewState["ShowNavigationToolTip"];
return(obj==null)?true:(bool)obj;
}
set
{
ViewState["ShowNavigationToolTip"]=value;
}
}///<summary>
///猎取或设置导航按钮工具提醒文本的格局。
///</summary>
[Browsable(true),
Category("导航按钮"),
DefaultValue("转到第{0}页"),
Description("页导航按钮工具提醒文本的格局")]
publicstringNavigationToolTipTextFormatString
{
get
{
objectobj=ViewState["NavigationToolTipTextFormatString"];
return(obj==null)?"转到第{0}页":(string)obj;
}
set
{
stringtip=value;
if(tip.Trim().Length<1&&tip.IndexOf("{0}")<0)
tip="{0}";
ViewState["NavigationToolTipTextFormatString"]=tip;
}
}///<summary>
///猎取或设置一个值,该值唆使是不是将页索引按钮用中文数字取代。
///</summary>
///<remarks>
///将该值设为true而且未利用图片按钮时,页索引按钮中的数值1、2、3等将会被中笔墨符1、2、三等取代。
///</remarks>
[Browsable(true),
Category("导航按钮"),
DefaultValue(false),
Description("是不是将页索引数值按钮用中文数字1、2、三等取代")]
publicboolChinesePageIndex
{
get
{
objectobj=ViewState["ChinesePageIndex"];
return(obj==null)?false:(bool)obj;
}
set
{
ViewState["ChinesePageIndex"]=value;
}
}///<summary>
///猎取或设置页索引数值导航按钮上笔墨的显现格局。
///</summary>
///<value>
///字符串,指定页索引数值按钮上笔墨的显现格局,默许值为<seecref="String.Empty"/>,即未设置该属性。</value>
///<remarks>
///利用NumericButtonTextFormatString属性指定页索引数值按钮的显现格局,如未设置该值时索引按钮文本将会是:123...,设置该值将改动索引按钮文本的显现格局,
///如将该值设为“[{0}]”则索引文本会显现为:[1][2][3]...,将该值设为“-{0}-”则会使索引文本变成:-1--2--3-...。
///</remarks>
[Browsable(true),
DefaultValue(""),
Category("导航按钮"),
Description("页索引数值按钮上笔墨的显现格局")]
publicstringNumericButtonTextFormatString
{
get
{
objectobj=ViewState["NumericButtonTextFormatString"];
return(obj==null)?String.Empty:(string)obj;
}
set
{
ViewState["NumericButtonTextFormatString"]=value;
}
}///<summary>
///猎取或设置分页导航按钮的范例,即便用笔墨仍是图片。
///</summary>
///<remarks>
///要利用图片按钮,您必要筹办以下图片:从0到9的十个数值图片(当ShowPageIndex设为true时),第一页、上一页、下一页、最初一页及更多页(...)五个按钮图片(当ShowFirstLast及ShowPrevNext都设为true时),
///若必要使以后页索引的数值按钮分歧于其余页索引数值按钮,则还需筹办以后页索引的按钮图片;
///若必要使已禁用的第一页、上一页、下一页及最初一页按钮图片分歧于一般的按钮图片,则还需筹办这四个按钮在禁用形态下的图片;
///<p><b>图片文件的定名划定规矩以下:</b></p>
///<p>从0到9十张数值按钮图片必需定名为“数值+ButtonImageNameExtension+ButtonImageExtension”,个中的ButtonImageNameExtension能够不必设置,
///ButtonImageExtension是图片文件的后缀名,如.gif或.jpg等能够在扫瞄器中显现的任何图片文件范例。如页索引“1”的图片文件可定名为“1.gif”或“1.jpg”,
///当您有两套或更多套图片文件时,能够经由过程指定ButtonImageNameExtension属性值来辨别分歧套的图片,如第一套图片能够不必设ButtonImageNameExtension,则图片文件名相似于“1.gif”、“2.gif”等等,而第二套图片则设置ButtonImageNameExtension为“f”,图片文件名相似于“1f.gif”,“2f.gif”等等。</p>
///<p>第一页按钮的图片文件名以“first”开首,上一页按钮图片名以“prev”开首,下一页按钮图片名以“next”开首,最初一页按钮图片名以“last”开首,更多页按钮图片名以“more”开首,是不是利用ButtonImageNameExtension取决于数值按钮的设置及是不是有更多套图片。</p>
///</remarks>
///<example>
///以下代码片断示比方果利用图片按钮:
///<p>
///<code><![CDATA[
///<Webdiyer:AspNetPagerrunat="server"
///id="pager1"
///OnPageChanged="ChangePage"
///PagingButtonType="image"
///ImagePath="images"
///ButtonImageNameExtension="n"
///DisabledButtonImageNameExtension="g"
///ButtonImageExtension="gif"
///CpiButtonImageNameExtension="r"
///PagingButtonSpacing=5/>
///]]>
///</code>
///</p>
///</example>
[Browsable(true),
DefaultValue(PagingButtonType.Text),
Category("导航按钮"),
Description("分页导航按钮的范例,是利用笔墨仍是图片")]
publicPagingButtonTypePagingButtonType
{
get
{
objectobj=ViewState["PagingButtonType"];
return(obj==null)?PagingButtonType.Text:(PagingButtonType)obj;
}
set
{
ViewState["PagingButtonType"]=value;
}
}///<summary>
///猎取或设置页导航数值按钮的范例,该值仅当PagingButtonType设为Image时才无效。
///</summary>
///<remarks>
///当您将PagingButtonType设为Image当又不想让页索引数值按钮利用图片时,能够将该值设为Text,这会使页索引数据按钮利用文本而不是图片按钮。
///</remarks>
[Browsable(true),
DefaultValue(PagingButtonType.Text),
Category("导航按钮"),
Description("页导航数值按钮的范例")]
publicPagingButtonTypeNumericButtonType
{
get
{
objectobj=ViewState["NumericButtonType"];
return(obj==null)?PagingButtonType:(PagingButtonType)obj;
}
set
{
ViewState["NumericButtonType"]=value;
}
}///<summary>
///猎取或设置第一页、上一页、下一页和最初一页按钮的范例,该值仅当PagingButtonType设为Image时才无效。
///</summary>
///<remarks>
///当您将PagingButtonType设为Image但又不想让第一页、下一页、下一页和最初一页按钮利用图片,则能够将该值设为Text,这会使后面的四个按钮利用文本而不是图片按钮。
///</remarks>
[Browsable(true),
Category("导航按钮"),
DefaultValue(PagingButtonType.Text),
Description("第一页、上一页、下一页和最初一页按钮的范例")]
publicPagingButtonTypeNavigationButtonType
{
get
{
objectobj=ViewState["NavigationButtonType"];
return(obj==null)?PagingButtonType:(PagingButtonType)obj;
}
set
{
ViewState["NavigationButtonType"]=value;
}
}///<summary>
///猎取或设置“更多页”(...)按钮的范例,该值仅当PagingButtonType设为Image时才无效。
///</summary>
///<remarks>
///当您将PagingButtonType设为Image但又不想让更多页(...)按钮利用图片时,能够将此值设为Text,这会使更多页按钮利用文本而不是图片按钮。
///</remarks>
[Browsable(true),
Category("导航按钮"),
DefaultValue(PagingButtonType.Text),
Description("“更多页”(...)按钮的范例")]
publicPagingButtonTypeMoreButtonType
{
get
{
objectobj=ViewState["MoreButtonType"];
return(obj==null)?PagingButtonType:(PagingButtonType)obj;
}
set
{
ViewState["MoreButtonType"]=value;
}
}///<summary>
///猎取或设置分页导航按钮之间的间距。
///</summary>
[Browsable(true),
Category("导航按钮"),
DefaultValue(typeof(Unit),"5px"),
Description("分页导航按钮之间的间距")]
publicUnitPagingButtonSpacing
{
get
{
objectobj=ViewState["PagingButtonSpacing"];
return(obj==null)?Unit.Pixel(5):(Unit.Parse(obj.ToString()));
}
set
{
ViewState["PagingButtonSpacing"]=value;
}
}///<summary>
///猎取或设置一个值,该值唆使是不是在页导航元素中显现第一页和最初一页按钮。
///</summary>
[Browsable(true),
Description("是不是在页导航元素中显现第一页和最初一页按钮"),
Category("导航按钮"),
DefaultValue(true)]
publicboolShowFirstLast
{
get
{
objectobj=ViewState["ShowFirstLast"];
return(obj==null)?true:(bool)obj;
}
set{ViewState["ShowFirstLast"]=value;}
}///<summary>
///猎取或设置一个值,该值唆使是不是在页导航元素中显现上一页和下一页按钮。
///</summary>
[Browsable(true),
Description("是不是在页导航元素中显现上一页和下一页按钮"),
Category("导航按钮"),
DefaultValue(true)]
publicboolShowPrevNext
{
get
{
objectobj=ViewState["ShowPrevNext"];
return(obj==null)?true:(bool)obj;
}
set{ViewState["ShowPrevNext"]=value;}
}///<summary>
///猎取或设置一个值,该值唆使是不是在页导航元素中显现页索引数值按钮。
///</summary>
[Browsable(true),
Description("是不是在页导航元素中显现数值按钮"),
Category("导航按钮"),
DefaultValue(true)]
publicboolShowPageIndex
{
get
{
objectobj=ViewState["ShowPageIndex"];
return(obj==null)?true:(bool)obj;
}
set{ViewState["ShowPageIndex"]=value;}
}///<summary>
///猎取或设置为第一页按钮显现的文本。
///</summary>
[Browsable(true),
Description("第一页按钮上显现的文本"),
Category("导航按钮"),
DefaultValue("<fontface="webdings">9</font>")]
publicstringFirstPageText
{
get
{
objectobj=ViewState["FirstPageText"];
return(obj==null)?"<fontface="webdings">9</font>":(string)obj;
}
set{ViewState["FirstPageText"]=value;}
}///<summary>
///猎取或设置为上一页按钮显现的文本。
///</summary>
[Browsable(true),
Description("上一页按钮上显现的文本"),
Category("导航按钮"),
DefaultValue("<fontface="webdings">3</font>")]
publicstringPrevPageText
{
get
{
objectobj=ViewState["PrevPageText"];
return(obj==null)?"<fontface="webdings">3</font>":(string)obj;
}
set{ViewState["PrevPageText"]=value;}
}///<summary>
///猎取或设置为下一页按钮显现的文本。
///</summary>
[Browsable(true),
Description("下一页按钮上显现的文本"),
Category("导航按钮"),
DefaultValue("<fontface="webdings">4</font>")]
publicstringNextPageText
{
get
{
objectobj=ViewState["NextPageText"];
return(obj==null)?"<fontface="webdings">4</font>":(string)obj;
}
set{ViewState["NextPageText"]=value;}
}///<summary>
///猎取或设置为最初一页按钮显现的文本。
///</summary>
[Browsable(true),
Description("最初一页按钮上显现的文本"),
Category("导航按钮"),
DefaultValue("<fontface="webdings">:</font>")]
publicstringLastPageText
{
get
{
objectobj=ViewState["LastPageText"];
return(obj==null)?"<fontface="webdings">:</font>":(string)obj;
}
set{ViewState["LastPageText"]=value;}
}///<summary>
///猎取或设置在<seecref="AspNetPager"/>控件的页导航元素中同时显现的数值按钮的数量。
///</summary>
[Browsable(true),
Description("要显现的页索引数值按钮的数量"),
Category("导航按钮"),
DefaultValue(10)]
publicintNumericButtonCount
{
get
{
objectobj=ViewState["NumericButtonCount"];
return(obj==null)?10:(int)obj;
}
set{ViewState["NumericButtonCount"]=value;}
}///<summary>
///猎取或设置一个值,该值指定是不是显现已禁用的按钮。
///</summary>
///<remarks>
///该值用来指定是不是显现已禁用的分页导航按钮,铛铛前页为第一页时,第一页和上一页按钮将被禁用,铛铛前页为最初一页时,下一页和最初一页按钮将被禁用,被禁用的按钮没有链接,在按钮上点击也不会有任何感化。
///</remarks>
[Browsable(true),
Category("导航按钮"),
Description("是不是显现已禁用的按钮"),
DefaultValue(true)]
publicboolShowDisabledButtons
{
get
{
objectobj=ViewState["ShowDisabledButtons"];
return(obj==null)?true:(bool)obj;
}
set
{
ViewState["ShowDisabledButtons"]=value;
}
}
#endregion
#regionImageButtons
///<summary>
///猎取或设置当利用图片按钮时,图片文件的路径。
///</summary>
[Browsable(true),
Category("图片按钮"),
Description("当利用图片按钮时,指定图片文件的路径"),
DefaultValue(null)]
publicstringImagePath
{
get
{
stringimgPath=(string)ViewState["ImagePath"];
if(imgPath!=null)
imgPath=this.ResolveUrl(imgPath);
returnimgPath;
}
set
{
stringimgPath=value.Trim().Replace("","/");
ViewState["ImagePath"]=(imgPath.EndsWith("/"))?imgPath:imgPath+"/";
}
}
///<summary>
///猎取或设置当利用图片按钮时,图片的范例,如gif或jpg,该值即图片文件的后缀名。
///</summary>
[Browsable(true),
Category("图片按钮"),
DefaultValue(".gif"),
Description("当利用图片按钮时,图片的范例,如gif或jpg,该值即图片文件的后缀名")]
publicstringButtonImageExtension
{
get
{
objectobj=ViewState["ButtonImageExtension"];
return(obj==null)?".gif":(string)obj;
}
set
{
stringext=value.Trim();
ViewState["ButtonImageExtension"]=(ext.StartsWith("."))?ext:("."+ext);
}
}
///<summary>
///猎取或设置自界说图片文件名的后缀字符串,以辨别分歧范例的按钮图片。
///</summary>
///<remarks><note>注重:</note>该值不是文件后缀名,而是为辨别分歧的图片文件而在图片名中到场的字符串,如:
///以后有两套按钮图片,个中一套中的“1”的图片名可为“1f.gif”,另外一套中的“1”的图片名可起为“1n.gif”,个中的f和n即为ButtonImageNameExtension。</remarks>
[Browsable(true),
DefaultValue(null),
Category("图片按钮"),
Description("自界说图片文件名的后缀字符串(非文件后缀名),如图片“1f.gif”的ButtonImageNameExtension即为“f”")]
publicstringButtonImageNameExtension
{
get
{
return(string)ViewState["ButtonImageNameExtension"];
}
set
{
ViewState["ButtonImageNameExtension"]=value;
}
}
///<summary>
///猎取或设置以后页索引按钮的图片名后缀。
///</summary>
///<remarks>
///当<seecref="PagingButtonType"/>设为Image时,该属性同意您设置以后页索引数值按钮利用的图片名后缀字符,因而可使以后页索引按钮与别的页索引按钮利用分歧的图片,若未设置该值,则默许值为<seecref="ButtonImageNameExtension"/>,即以后页索引按钮与别的页索引按钮利用不异的图片。
///</remarks>
[Browsable(true),
DefaultValue(null),
Category("图片按钮"),
Description("以后页索引按钮的图片名后缀字符串")]
publicstringCpiButtonImageNameExtension
{
get
{
objectobj=ViewState["CpiButtonImageNameExtension"];
return(obj==null)?ButtonImageNameExtension:(string)obj;
}
set
{
ViewState["CpiButtonImageNameExtension"]=value;
}
}
///<summary>
///猎取或设置已禁用的页导航按钮图片名后缀字符串。
///</summary>
///<remarks>
///当<seecref="PagingButtonType"/>设为Image时,该值同意您设置已禁用(即没有链接,因此点击后无反响)的页导航按钮(包含第一页、上一页、下一页、最初一页四个按钮)的图片文件名后缀字符串,因而可使已禁用的页导航按钮分歧于一般的页导航按钮。若未设置该值,则默许值为<seecref="ButtonImageNameExtension"/>,即已禁用的页导航按钮与一般的页导航按钮利用不异的图片。
///</remarks>
[Browsable(true),
DefaultValue(null),
Category("图片按钮"),
Description("已禁用的页导航按钮的图片名后缀字符串")]
publicstringDisabledButtonImageNameExtension
{
get
{
objectobj=ViewState["DisabledButtonImageNameExtension"];
return(obj==null)?ButtonImageNameExtension:(string)obj;
}
set
{
ViewState["DisabledButtonImageNameExtension"]=value;
}
}
///<summary>
///指定当利用图片按钮时,图片的对齐体例。
///</summary>
[Browsable(true),
Description("指定当利用图片按钮时,图片的对齐体例"),
DefaultValue(ImageAlign.Baseline),
Category("图片按钮")]
publicImageAlignButtonImageAlign
{
get
{
objectobj=ViewState["ButtonImageAlign"];
return(obj==null)?ImageAlign.Baseline:(ImageAlign)obj;
}
set{ViewState["ButtonImageAlign"]=value;}
}
#endregion
#regionPaging
///<summary>
///猎取或设置是不是启用url来传送分页信息。
///</summary>
///<remarks>
///启用Url分页体例是将用户欲会见的页索引经由过程Url来传送,因为该分页体例不利用页面向本身回发来传送数据,
///以是每次分页时一切的数据都恢复为初始值或必要从头猎取。利用Url分页体例不撑持静态改动分页控件的属性值,
///因临时没法将新的属性值经由过程Url来传送给下一页。
///</remarks>
///<example>以下示例申明怎样用AspNetPager的Url分页体例对DataGrid举行分页(利用Access数据库):
///<code><![CDATA[
///<%@RegisterTagPrefix="Webdiyer"Namespace="Wuqi.Webdiyer"Assembly="aspnetpager"%>
///<%@ImportNamespace="System.Data.OleDb"%>
///<%@ImportNamespace="System.Data"%>
///<%@PageLanguage="C#"debug=true%>
///<HTML>
///<HEAD>
///<TITLE>WelcometoWebdiyer.com</TITLE>
///<scriptrunat="server">
///OleDbConnectionconn;
///OleDbCommandcmd;
///voidPage_Load(objectsrc,EventArgse){
///conn=newOleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DataSource="+Server.MapPath("access/aspnetpager.mdb"));
///if(!Page.IsPostBack){
///cmd=newOleDbCommand("selectcount(newsid)fromwqnews",conn);
///conn.Open();
///pager.RecordCount=(int)cmd.ExecuteScalar();
///conn.Close();
///BindData();
///}
///}
///
///voidBindData(){
///cmd=newOleDbCommand("selectnewsid,heading,source,addtimefromwqnewsorderbyaddtimedesc",conn);
///OleDbDataAdapteradapter=newOleDbDataAdapter(cmd);
///DataSetds=newDataSet();
///adapter.Fill(ds,pager.PageSize*(pager.CurrentPageIndex-1),pager.PageSize,"news");
///dg.DataSource=ds.Tables["news"];
///dg.DataBind();
///}
///
///voidChangePage(objectsrc,PageChangedEventArgse){
///pager.CurrentPageIndex=e.NewPageIndex;
///BindData();
///}
///
///</script>
///<metahttp-equiv="Content-Language"content="zh-cn">
///<metahttp-equiv="content-type"content="text/html;charset=gb2312">
///<METANAME="Generator"CONTENT="EditPlus">
///<METANAME="Author"CONTENT="Webdiyer(yhaili@21cn.com)">
///</HEAD>
///<body>
///<formrunat="server"ID="Form1">
///<h2align="center">AspNetPager分页示例</h2>
///<asp:DataGridid="dg"runat="server"
///Width="760"CellPadding="4"Align="center"/>
///
///<Webdiyer:AspNetPagerrunat="server"id="pager"
///OnPageChanged="ChangePage"
///HorizontalAlign="center"
///style="MARGIN-TOP:10px;FONT-SIZE:16px"
///PageSize="8"
///ShowInputBox="always"
///SubmitButtonStyle="border:1pxsolid#000066;height:20px;width:30px"
///InputBoxStyle="border:1px#0000FFsolid;text-align:center"
///SubmitButtonText="转到"
///UrlPaging="true"
///UrlPageIndexName="pageindex"/>
///</form>
///</body>
///</HTML>
///]]></code>
///</example>
[Browsable(true),
Category("分页"),
DefaultValue(false),
Description("是不是利用url传送分页信息的体例来分页")]
publicboolUrlPaging
{
get
{
returnurlPaging;
}
set
{
urlPaging=value;
}
}
///<summary>
///猎取或设置当启用Url分页体例时,在url中暗示要传送的页索引的参数的称号。
///</summary>
///<remarks>
///该属性同意您自界说经由过程Url传送页索引时暗示要传送的页索引的参数的称号,以免与现有的参数名反复。
///<p>该属性的默许值是“page”,即经由过程Url分页时,显现在扫瞄器地点栏中的Url相似于:</p>http://www.webdiyer.com/aspnetpager/samples/datagrid_url.aspx?page=2
///<p>如将该值改成“pageindex”,则下面的Url将变成:</p><p>http://www.webdiyer.com/aspnetpager/samples/datagrid_url.aspx?pageindex=2</p>
///</remarks>
[Browsable(true),
DefaultValue("page"),
Category("分页"),
Description("当启用Url分页体例时,显现在url中暗示要传送的页索引的参数的称号")]
publicstringUrlPageIndexName
{
get{returnurlPageIndexName;}
set{urlPageIndexName=value;}
}
///<summary>
///猎取或设置以后显现页的索引。
///</summary>
///<remarks>利用此属性来断定在AspNetPager控件中以后显现的页,以后显现的页的数字索引将以白色字体加粗显现。此属性还用于以编程的体例把持所显现的页。
///<p> <b>注重:</b>分歧于DataGrid控件的CurrentPageIndex,AspNetPager的CurrentPageIndex属性是从1入手下手的。</p></remarks>
[ReadOnly(true),
Browsable(false),
Description("以后显现页的索引"),
Category("分页"),
DefaultValue(1),
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
publicintCurrentPageIndex
{
get
{
objectcpage=ViewState["CurrentPageIndex"];
intpindex=(cpage==null)?1:(int)cpage;
if(pindex>PageCount&&PageCount>0)
returnPageCount;
elseif(pindex<1)
return1;
returnpindex;
}
set
{
intcpage=value;
if(cpage<1)
cpage=1;
elseif(cpage>this.PageCount)
cpage=this.PageCount;
ViewState["CurrentPageIndex"]=cpage;
}
}
///<summary>
///猎取或设置必要分页的一切纪录的总数。
///</summary>
///<remarks>
///当页面第一次加载时,应以编程体例将从存储历程或Sql语句中前往的数据表中一切要分页的纪录的总数付与该属性,AspNetPager会将其保留的ViewState中并在页面回发时从ViewState中猎取该值,因而制止了每次分页都要会见数据库而影响分页功能。AspNetPager依据要分页的一切数据的总项数和<seecref="PageSize"/>属性来盘算显现一切数据必要的总页数,即<seecref="PageCount"/>的值。
///</remarks>
///<example>
///上面的示例显现怎样以编程体例将从Sql语句前往的纪录总数赋给该属性:
///<p>
///<code><![CDATA[
///<HTML>
///<HEAD>
///<TITLE>WelcometoWebdiyer.com</TITLE>
///<scriptrunat="server">
///SqlConnectionconn;
///SqlCommandcmd;
///voidPage_Load(objectsrc,EventArgse)
///{
///conn=newSqlConnection(ConfigurationSettings.AppSettings["ConnStr"]);
///if(!Page.IsPostBack)
///{
///cmd=newSqlCommand("selectcount(id)fromnews",conn);
///conn.Open();
///pager.RecordCount=(int)cmd.ExecuteScalar();
///conn.Close();
///BindData();
///}
///}
///
///voidBindData()
///{
///cmd=newSqlCommand("GetPagedNews",conn);
///cmd.CommandType=CommandType.StoredProcedure;
///cmd.Parameters.Add("@pageindex",pager.CurrentPageIndex);
///cmd.Parameters.Add("@pagesize",pager.PageSize);
///conn.Open();
///dataGrid1.DataSource=cmd.ExecuteReader();
///dataGrid1.DataBind();
///conn.Close();
///}
///voidChangePage(objectsrc,PageChangedEventArgse)
///{
///pager.CurrentPageIndex=e.NewPageIndex;
///BindData();
///}
///</script>
///<metahttp-equiv="Content-Language"content="zh-cn">
///<metahttp-equiv="content-type"content="text/html;charset=gb2312">
///<METANAME="Generator"CONTENT="EditPlus">
///<METANAME="Author"CONTENT="Webdiyer(yhaili@21cn.com)">
///</HEAD>
///<body>
///<formrunat="server"ID="Form1">
///<asp:DataGridid="dataGrid1"runat="server"/>
///
///<Webdiyer:AspNetPagerid="pager"runat="server"
///PageSize="8"
///NumericButtonCount="8"
///ShowCustomInfoSection="before"
///ShowInputBox="always"
///CssClass="mypager"
///HorizontalAlign="center"
///OnPageChanged="ChangePage"/>
///
///</form>
///</body>
///</HTML>
///]]>
///</code></p>
///<p>本示例利用的存储历程代码以下:</p>
///<code><![CDATA[
///CREATEprocedureGetPagedNews
///(@pagesizeint,
///@pageindexint)
///as
///setnocounton
///declare@indextabletable(idintidentity(1,1),nidint)
///declare@PageLowerBoundint
///declare@PageUpperBoundint
///set@PageLowerBound=(@pageindex-1)*@pagesize
///set@PageUpperBound=@PageLowerBound+@pagesize
///setrowcount@PageUpperBound
///insertinto@indextable(nid)selectidfromnewsorderbyaddtimedesc
///selectO.id,O.title,O.source,O.addtimefromnewsO,@indextabletwhereO.id=t.nid
///andt.id>@PageLowerBoundandt.id<=@PageUpperBoundorderbyt.id
///setnocountoff
///GO
///]]>
///</code>
///</example>
[Browsable(false),
Description("要分页的一切纪录的总数,该值须在程序运转时设置,默许值为225是为计划时撑持而设置的参照值。"),
Category("Data"),
DefaultValue(225)]
publicintRecordCount
{
get
{
objectobj=ViewState["Recordcount"];
return(obj==null)?0:(int)obj;
}
set{ViewState["Recordcount"]=value;}
}
///<summary>
///猎取以后页以后未显现的页的总数。
///</summary>
[Browsable(false),
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
publicintPagesRemain
{
get
{
returnPageCount-CurrentPageIndex;
}
}
///<summary>
///猎取或设置每页显现的项数。
///</summary>
///<remarks>
///该值猎取或设置数据出现控件每主要显现数据表中的的数据的项数,AspNetPager依据该值和<seecref="RecordCount"/>来盘算显现一切数据必要的总页数,即<seecref="PageCount"/>的值。</remarks>
///<example>以下示例将<seecref="AspNetPager"/>设置为同意每页显现8条数据:
///<code>
///<![CDATA[
///...
///<Webdiyer:AspNetPagerid="pager"runat="server"PageSize=8OnPageChanged="ChangePage"/>
///...
///]]></code></example>
[Browsable(true),
Description("每页显现的纪录数"),
Category("分页"),
DefaultValue(10)]
publicintPageSize
{
get
{
objectobj=ViewState["PageSize"];
return(obj==null)?10:(int)obj;
}
set
{
ViewState["PageSize"]=value;
}
}
///<summary>
///猎取在以后页以后还未显现的残剩纪录的项数。
///</summary>
[Browsable(false),
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
publicintRecordsRemain
{
get
{
if(CurrentPageIndex<PageCount)
returnRecordCount-(CurrentPageIndex*PageSize);
return0;}
}
///<summary>
///猎取一切要分页的纪录必要的总页数。
///</summary>
[Browsable(false),
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
publicintPageCount
{
get{return(int)Math.Ceiling((double)RecordCount/(double)PageSize);}
}
#endregion
#regionTextBoxandSubmitButton
///<summary>
///猎取或设置页索引文本框的显现体例。
///</summary>
///<remarks>
///页索引文件框同意用户手式输出要会见的页的索引,当页数十分多时,显现页索引文本框十分便利用户跳转到指定的页,默许情形下,该文本框只要在总页数年夜于或即是<seecref="ShowBoxThreshold"/>的值时才显现,不然不显现,要想该文本框任什么时候候都显现,请将其值设为Always,若但愿任什么时候候都不显现,则应设为Never。
///</remarks>
[Browsable(true),
Description("指定页索引文本框的显现体例"),
Category("文本框及提交按钮"),
DefaultValue(ShowInputBox.Auto)]
publicShowInputBoxShowInputBox
{
get
{
objectobj=ViewState["ShowInputBox"];
return(obj==null)?ShowInputBox.Auto:(ShowInputBox)obj;
}
set{ViewState["ShowInputBox"]=value;}
}
///<summary>
///猎取或设置使用于页索引输出文本框的CSS类名。
///</summary>
[Browsable(true),
Category("文本框及提交按钮"),
DefaultValue(null),
Description("使用于页索引输出文本框的CSS类名")]
publicstringInputBoxClass
{
get
{
return(string)ViewState["InputBoxClass"];
}
set
{
if(value.Trim().Length>0)
ViewState["InputBoxClass"]=value;
}
}
///<summary>
///猎取或设置页索引输出文本框的CSS款式文本。
///</summary>
[Browsable(true),
Category("文本框及提交按钮"),
DefaultValue(null),
Description("使用于页索引输出文本框的CSS款式文本")]
publicstringInputBoxStyle
{
get
{
return(string)ViewState["InputBoxStyle"];
}
set
{
if(value.Trim().Length>0)
ViewState["InputBoxStyle"]=value;
}
}
///<summary>
///猎取或设置页索引页索引输出文本框前的文本字符串值。
///</summary>
[Browsable(true),
Category("文本框及提交按钮"),
DefaultValue(null),
Description("页索引输出文本框前的文本内容字符串")]
publicstringTextBeforeInputBox
{
get
{
return(string)ViewState["TextBeforeInputBox"];
}
set
{
ViewState["TextBeforeInputBox"]=value;
}
}
///<summary>
///猎取或设置页索引文本输出框后的文本内容字符串值。
///</summary>
[Browsable(true),
DefaultValue(null),
Category("文本框及提交按钮"),
Description("页索引输出文本框后的文本内容字符串")]
publicstringTextAfterInputBox
{
get
{
return(string)ViewState["TextAfterInputBox"];
}
set
{
ViewState["TextAfterInputBox"]=value;
}
}
///<summary>
///猎取或设置提交按钮上的文本。
///</summary>
[Browsable(true),
Category("文本框及提交按钮"),
DefaultValue("go"),
Description("提交按钮上的文本")]
publicstringSubmitButtonText
{
get
{
objectobj=ViewState["SubmitButtonText"];
return(obj==null)?"go":(string)obj;
}
set
{
if(value.Trim().Length>0)
ViewState["SubmitButtonText"]=value;
}
}
///<summary>
///猎取或设置使用于提交按钮的CSS类名。
///</summary>
[Browsable(true),
Category("文本框及提交按钮"),
DefaultValue(null),
Description("使用于提交按钮的CSS类名")]
publicstringSubmitButtonClass
{
get
{
return(string)ViewState["SubmitButtonClass"];
}
set
{
ViewState["SubmitButtonClass"]=value;
}
}
///<summary>
///猎取或设置使用于提交按钮的CSS款式。
///</summary>
[Browsable(true),
Category("文本框及提交按钮"),
DefaultValue(null),
Description("使用于提交按钮的CSS款式")]
publicstringSubmitButtonStyle
{
get
{
return(string)ViewState["SubmitButtonStyle"];
}
set
{
ViewState["SubmitButtonStyle"]=value;
}
}
///<summary>
///猎取或设置主动显现页索引输出文本框的最低肇端页数。
///</summary>
///<remarks>
///当<seecref="ShowInputBox"/>设为Auto(默许)而且要分页的数据的总页数到达该值时会主动显现页索引输出文本框,默许值为30。该选项当<seecref="ShowInputBox"/>设为Never或Always时没有任何感化。
///</remarks>
[Browsable(true),
Description("指定当ShowInputBox设为ShowInputBox.Auto时,当总页数到达几时才显现页索引输出文本框"),
Category("文本框及提交按钮"),
DefaultValue(30)]
publicintShowBoxThreshold
{
get
{
objectobj=ViewState["ShowBoxThreshold"];
return(obj==null)?30:(int)obj;
}
set{ViewState["ShowBoxThreshold"]=value;}
}
#endregion
#regionCustomInfoSection
///<summary>
///猎取或设置显现用户自界说信息区的体例。
///</summary>
///<remarks>
///该属性值设为Left或Right时会在分页导航元素右边或右侧划出一个专门的地区来显现有关用户自界说信息,设为Never时不显现。
///</remarks>
[Browsable(true),
Description("显现以后页和总页数信息,默许值为不显现,值为ShowCustomInfoSection.Left时将显现在页索引前,为ShowCustomInfoSection.Right时将显现在页索引后"),
DefaultValue(ShowCustomInfoSection.Never),
Category("自界说信息区")]
publicShowCustomInfoSectionShowCustomInfoSection
{
get
{
objectobj=ViewState["ShowCustomInfoSection"];
return(obj==null)?ShowCustomInfoSection.Never:(ShowCustomInfoSection)obj;
}
set{ViewState["ShowCustomInfoSection"]=value;}
}
///<summary>
///猎取或设置用户自界说信息区文本的对齐体例。
///</summary>
[Browsable(true),
Category("自界说信息区"),
DefaultValue(HorizontalAlign.Left),
Description("用户自界说信息区文本的对齐体例")]
publicHorizontalAlignCustomInfoTextAlign
{
get
{
objectobj=ViewState["CustomInfoTextAlign"];
return(obj==null)?HorizontalAlign.Left:(HorizontalAlign)obj;
}
set
{
ViewState["CustomInfoTextAlign"]=value;
}
}
///<summary>
///猎取或设置用户自界说信息区的宽度。
///</summary>
[Browsable(true),
Category("自界说信息区"),
DefaultValue(typeof(Unit),"40%"),
Description("用户自界说信息区的宽度")]
publicUnitCustomInfoSectionWidth
{
get
{
objectobj=ViewState["CustomInfoSectionWidth"];
return(obj==null)?Unit.Percentage(40):(Unit)obj;
}
set
{
ViewState["CustomInfoSectionWidth"]=value;
}
}
///<summary>
///猎取或设置使用于用户自界说信息区的级联款式表类名。
///</summary>
[Browsable(true),
Category("自界说信息区"),
DefaultValue(null),
Description("使用于用户自界说信息区的级联款式表类名")]
publicstringCustomInfoClass
{
get
{
objectobj=ViewState["CustomInfoClass"];
return(obj==null)?CssClass:(string)obj;
}
set
{
ViewState["CustomInfoClass"]=value;
}
}
///<summary>
///猎取或设置使用于用户自界说信息区的CSS款式文本。
///</summary>
///<value>字符串值,要使用于用户自界说信息区的CSS款式文本。</value>
[Browsable(true),
Category("自界说信息区"),
DefaultValue(null),
Description("使用于用户自界说信息区的CSS款式文本")]
publicstringCustomInfoStyle
{
get
{
objectobj=ViewState["CustomInfoStyle"];
return(obj==null)?GetStyleString():(string)obj;
}
set
{
ViewState["CustomInfoStyle"]=value;
}
}
///<summary>
///猎取或设置在显现在用户自界说信息区的用户自界说文本。
///</summary>
[Browsable(true),
Category("自界说信息区"),
DefaultValue(null),
Description("要显现在用户自界说信息区的用户自界说信息文本")]
publicstringCustomInfoText
{
get
{
return(string)ViewState["CustomInfoText"];
}
set
{
ViewState["CustomInfoText"]=value;
}
}
#endregion
#regionOthers
///<summary>
///猎取或设置一个值,该值指定是不是老是显现AspNetPager分页按件,即便要分页的数据只要一页。
///</summary>
///<remarks>
///默许情形下,当要分页的数据小于两页时,AspNetPager不会在页面上显现任何内容,将此属性值设为true时,即便总页数只要一页,AspNetPager也将显现分页导航元素。
///</remarks>
[Browsable(true),
Category("Behavior"),
DefaultValue(false),
Description("老是显现分页控件,即便要分页的数据只需一页")]
publicboolAlwaysShow
{
get
{
objectobj=ViewState["AlwaysShow"];
return(obj==null)?false:(bool)obj;
}
set
{
ViewState["AlwaysShow"]=value;
}
}
///<summary>
///猎取或设置由AspNetPager服务器控件在客户端出现的级联款式表(CSS)类。
///</summary>
[Browsable(true),
Description("使用于控件的CSS类名"),
Category("Appearance"),
DefaultValue(null)]
publicoverridestringCssClass
{
get{returnbase.CssClass;}
set
{
base.CssClass=value;
cssClassName=value;
}
}
///<summary>
///猎取或设置一个值,该值唆使AspNetPager服务器控件是不是向收回哀求的客户端坚持本人的视图形态,该属性经重写后不同意设为false。
///</summary>
///<remarks><seecref="AspNetPager"/>服务器控件将一些主要的分页信息保留在ViewState中,当利用Url分页体例时,固然视图形态在分页过程当中没有任何感化,但如果以后页必要回发,则必需启用视图形态以便分页控件能在页面回发后猎取回发前的分页形态;当经由过程页面回发(PostBack)的体例来分页时,要使AspNetPager一般事情,必需启用视图形态。
///<p><note>该属性其实不能克制用户用<![CDATA[<%@PageEnableViewState=false%>]]>页指令来禁用全部页面的视图形态,当利用此指令而且设置AspNetPager经由过程页面回发来分页时,AspNetPager由于没法猎取保留的信息而不克不及一般事情。</note></p></remarks>
[Browsable(false),
Description("是不是启用控件的视图形态,该属性的值必需为true,不同意用户设置。"),
DefaultValue(true),
Category("Behavior")]
publicoverrideboolEnableViewState
{
get
{
returnbase.EnableViewState;
}
set
{
base.EnableViewState=true;
}
}
///<summary>
///猎取或设置当用户输出的页索引超越局限(年夜于最年夜页索引或小于最小页索引)时在客户端显现的毛病信息。
///</summary>
[Browsable(true),
Description("当用户输出的页索引超越局限(年夜于最年夜页索引或小于最小页索引)时在客户端显现的毛病信息。"),
DefaultValue("页数超越局限!"),
Category("Data")]
publicstringPageIndexOutOfRangeErrorString
{
get
{
objectobj=ViewState["PageIndexOutOfRangeErrorString"];
return(obj==null)?"页数超越局限!":(string)obj;
}
set
{
ViewState["PageIndexOutOfRangeErrorString"]=value;
}
}
///<summary>
///猎取或设置当用户输出有效的页索引(负值或非数字)时在客户端显现的毛病信息。
///</summary>
[Browsable(true),
Description("当用户输出有效的页索引(负值或非数字)时在客户端显现的毛病信息。"),
DefaultValue("页索引有效!"),
Category("Data")]
publicstringInvalidPageIndexErrorString
{
get
{
objectobj=ViewState["InvalidPageIndexErrorString"];
return(obj==null)?"页索引有效!":(string)obj;
}
set
{
ViewState["InvalidPageIndexErrorString"]=value;
}
}
#endregion
#endregion
#regionControlRenderingLogic
///<summary>
///重写<seecref="System.Web.UI.Control.OnLoad"/>办法。
///</summary>
///<paramname="e">包括事务数据的<seecref="EventArgs"/>工具。</param>
protectedoverridevoidOnLoad(EventArgse)
{
if(urlPaging)
{
currentUrl=Page.Request.Path;
urlParams=Page.Request.QueryString;
stringpageIndex=Page.Request.QueryString[urlPageIndexName];
intindex=1;
try
{
index=int.Parse(pageIndex);
}
catch{}
OnPageChanged(newPageChangedEventArgs(index));
}
else
{
inputPageIndex=Page.Request.Form[this.UniqueID+"_input"];
}
base.OnLoad(e);
}
///<summary>
///重写<seecref="System.Web.UI.Control.OnPreRender"/>办法。
///</summary>
///<paramname="e">包括事务数据的<seecref="EventArgs"/>工具。</param>
protectedoverridevoidOnPreRender(EventArgse)
{
if(PageCount>1)
{
stringcheckscript="<scriptlanguage="javascript">functiondoCheck(el){varr=newRegExp("^s*(d+)s*$");if(r.test(el.value)){if(RegExp.$1<1||RegExp.$1>"+PageCount.ToString()+"){alert(""+PageIndexOutOfRangeErrorString+"");document.all["+this.UniqueID+"_input].select();returnfalse;}returntrue;}alert(""+InvalidPageIndexErrorString+"");document.all["+this.UniqueID+"_input].select();returnfalse;}</script>";
if((ShowInputBox==ShowInputBox.Always)||(ShowInputBox==ShowInputBox.Auto&&PageCount>=ShowBoxThreshold))
{
if(!Page.IsClientScriptBlockRegistered("checkinput"))
Page.RegisterClientScriptBlock("checkinput",checkscript);
stringscript="<scriptlanguage="javascript"><!--nfunctionBuildUrlString(key,value){var_key=key.toLowerCase();varprms=location.search;if(prms.length==0)returnlocation.pathname+"?"+_key+"="+value;varparams=prms.substring(1).split("&");varnewparam="";varfound=false;for(i=0;i<params.length;i++){if(params[i].split("=")[0].toLowerCase()==_key){params[i]=_key+"="+value;found=true;break;}}if(found)returnlocation.pathname+"?"+params.join("&");elsereturnlocation+"&"+_key+"="+value;}n//--></script>";
if(!Page.IsClientScriptBlockRegistered("BuildUrlScript"))
Page.RegisterClientScriptBlock("BuildUrlScript",script);
}
}
base.OnPreRender(e);
}
///<summary>
///重写<seecref="System.Web.UI.WebControls.WebControl.AddAttributesToRender"/>办法,将必要出现的HTML属性和款式增加到指定的<seecref="System.Web.UI.HtmlTextWriter"/>中
///</summary>
///<paramname="writer"></param>
protectedoverridevoidAddAttributesToRender(HtmlTextWriterwriter)
{
if(this.Page!=null)
this.Page.VerifyRenderingInServerForm(this);
base.AddAttributesToRender(writer);
}
///<summary>
///重写<seecref="System.Web.UI.WebControls.WebControl.RenderBeginTag"/>办法,将<seecref="AspNetPager"/>控件的HTML入手下手标志输入到指定的<seecref="System.Web.UI.HtmlTextWriter"/>编写器中。
///</summary>
///<paramname="writer"><seecref="System.Web.UI.HtmlTextWriter"/>,暗示要在客户端出现HTML内容的输入流。</param>
publicoverridevoidRenderBeginTag(HtmlTextWriterwriter)
{
boolshowPager=(PageCount>1||(PageCount<=1&&AlwaysShow));
writer.WriteLine();
writer.Write("<!------------------------------");
writer.Write("AspNetPagerV4.3Start");
writer.WriteLine("------------------------------>");
writer.Write("<!--------------------");
writer.Write("Copyright:2003Webdiyer(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);
}
}
///<summary>
///重写<seecref="System.Web.UI.WebControls.WebControl.RenderEndTag"/>办法,将<seecref="AspNetPager"/>控件的HTML停止标志输入到指定的<seecref="System.Web.UI.HtmlTextWriter"/>编写器中。
///</summary>
///<paramname="writer"><seecref="System.Web.UI.HtmlTextWriter"/>,暗示要在客户端出现HTML内容的输入流。</param>
publicoverridevoidRenderEndTag(HtmlTextWriterwriter)
{
if((ShowCustomInfoSection==ShowCustomInfoSection.Left||ShowCustomInfoSection==ShowCustomInfoSection.Right)&&(PageCount>1||(PageCount<=1&&AlwaysShow)))
{
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderEndTag();
}
base.RenderEndTag(writer);
writer.WriteLine();
writer.Write("<!-------------------------------");
writer.Write("AspNetPagerV4.3End");
writer.Write("--------------------------------");
writer.WriteLine(">");
writer.WriteLine();
}
///<summary>
///重写<seecref="System.Web.UI.WebControls.WebControl.RenderContents"/>办法,将控件的内容出现到指定<seecref="System.Web.UI.HtmlTextWriter"/>的编写器中。
///</summary>
///<paramname="writer"><seecref="System.Web.UI.HtmlTextWriter"/>,暗示要在客户端出现HTML内容的输入流。</param>
protectedoverridevoidRenderContents(HtmlTextWriterwriter)
{
if(PageCount<=1&&!AlwaysShow)
return;
if(ShowCustomInfoSection==ShowCustomInfoSection.Left)
{
writer.Write(CustomInfoText);
writer.RenderEndTag();
WriteCellAttributes(writer,false);
writer.AddAttribute(HtmlTextWriterAttribute.Class,CssClass);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
}
intmidpage=(int)((CurrentPageIndex-1)/NumericButtonCount);
intpageoffset=midpage*NumericButtonCount;
intendpage=((pageoffset+NumericButtonCount)>PageCount)?PageCount:(pageoffset+NumericButtonCount);
this.CreateNavigationButton(writer,"first");
this.CreateNavigationButton(writer,"prev");
if(ShowPageIndex)
{
if(CurrentPageIndex>NumericButtonCount)
CreateMoreButton(writer,pageoffset);
for(inti=pageoffset+1;i<=endpage;i++)
{
CreateNumericButton(writer,i);
}
if(PageCount>NumericButtonCount&&endpage<PageCount)
CreateMoreButton(writer,endpage+1);
}
this.CreateNavigationButton(writer,"next");
this.CreateNavigationButton(writer,"last");
if((ShowInputBox==ShowInputBox.Always)||(ShowInputBox==ShowInputBox.Auto&&PageCount>=ShowBoxThreshold))
{
writer.Write("");
if(TextBeforeInputBox!=null)
writer.Write(TextBeforeInputBox);
writer.AddAttribute(HtmlTextWriterAttribute.Type,"text");
writer.AddStyleAttribute(HtmlTextWriterStyle.Width,"30px");
writer.AddAttribute(HtmlTextWriterAttribute.Value,CurrentPageIndex.ToString());
if(InputBoxStyle!=null&&InputBoxStyle.Trim().Length>0)
writer.AddAttribute(HtmlTextWriterAttribute.Style,InputBoxStyle);
if(InputBoxClass!=null&&InputBoxClass.Trim().Length>0)
writer.AddAttribute(HtmlTextWriterAttribute.Class,InputBoxClass);
if(PageCount<=1&&AlwaysShow)
writer.AddAttribute(HtmlTextWriterAttribute.ReadOnly,"true");
writer.AddAttribute(HtmlTextWriterAttribute.Name,this.UniqueID+"_input");
stringscriptRef="doCheck(document.all["+this.UniqueID+"_input])";
stringpostRef="if(event.keyCode==13){if("+scriptRef+")__doPostBack("+this.UniqueID+",document.all["+this.UniqueID+"_input].value);else{event.returnValue=false;}}";
stringkeydownScript="if(event.keyCode==13){if("+scriptRef+"){even
csover宣布于:2006.07.2108:46::分类:(asp.net)::浏览:(464次)::批评(0)::援用(0)
2006年07月20日,木曜日
一个复杂的分页控件
接纳Datagrid的默任的分页体例分页,厥后发明关于年夜的数据量速率很慢,NET历程占用体系资本也很年夜,厥后写了个分页的存储历程,每次取数据都只取以后页的,分页是分好了,可是发明翻页就没那末便利了,因而本人写了个复杂的分页控件,代码以下(编译今后间接构成dll就能够用)。
samplecode:
usingSystem;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.ComponentModel;
namespacePageInfoControl
{
///<summary>
///WebCustomeControl1的择要申明
///</summary>
[DefaultProperty(TotalRecord),ToolboxData(<{0}:PageInforunat=server></{0}:PageInfo>)]
publicclassPageInfo:System.Web.UI.WebControls.WebControl,IPostBackEventHandler
{
#regionConstructmethod
///<summary>
///机关函数
///</summary>
publicPageInfo():base(HtmlTextWriterTag.Div)
{
}
#endregion
#regionVariablesandConstants
publiceventEventHandlerChangePageClick;
privatestring_BarBackGroudColor=#F1F1F1;
privatestring_BarLinkColor=Navy;
privatestring_BarCurrentColor=#EEEEEE;
privateint_TotalRecord=0;
privateint_TotalPage=0;
privateint_CurrentPageIndex=1;
privateint_ItemSize=10;
#endregion
#regionProperties
[Description(分页条背景致),Bindable(true),Category(Appearance),DefaultValue(#F1F1F1)]
publicstringBarBackGroundColor
{
get{return_BarBackGroundColor;}
set{_BarBackGroundColor=value;}
}
[Description(分页条带链接数字色彩),Bindable(true),Category(Appearance),DefaultValue(Navy)]
publicstringBarLinkColor
{
get{return_BarLinkColor;}
set{_BarLinkColor=value;}
}[Description(分页条以后页数字色彩),Bindable(true),Category(Appearance),DefaultValue(#EEEEEE)]
publicstringBarCurrentColor
{
get{return_BarCurrentColor;}
set{_BarCurrentColor=value;}
}[Description(总纪录数),Bindable(false),Category(Behavior),DefaultValue(0)]
publicintTotalRecord
{
get{return_TotalRecord;}
set
{
foreach(charcinSystem.Convert.ToString(value))
{
if(!Char.IsNumber(c)
{
_TotalRecord=0;
break;
}
_TotalRecord=value;
}
}[Description(每页显现纪录数),Bindable(true),Category(Behavior),DefaultValue(0)]
publicintPageSize
{
get{return_PageSize;}
set
{
foreach(charcinSystem.Convert.ToString(value))
{
if(!Char.IsNumber(c))
{
_PageSize=0;
break;
}
}
_PageSize=value;
}
}[Description(总页数),Bindable(true),Category(Behavior),DefaultValue(0)]
publicintTotalPage
{
get{return_TotalPage;}
}[Description(数字规格),Bindable(true),Category(Behavior),DefaultValue(10)]
publicintItemSize
{
get{return_ItemSize;}
set
{
foreach(charcinSystem.Convert.ToString(value))
{
if(!Char.IsNumber(c))
{
_ItemSize=10;
break;
}
}
_ItemSize=value;
}
}[Description(以后页值),Bindable(true),Category(Behavior),DefaultValue(1)]
publicintCurrentPageIndex
{
get{return_CurrentPageIndex;}
set{_CurrentPageIndex=value;}
}
#endregion
<P>//界说Div的款式
protectedoverridevoidAddAttributesToRender(HtmlTextWriterwriter)
{
writer.AddStyleAttribute(White-space,nowrap);
writer.AddStyleAttribute(Padding-Top,2px);
writer.AddStyleAttribute(Padding-Bottom,2px);
writer.AddStyleAttribute(Width,width.ToString());
writer.AddStyleAttribute(Height,Height.ToString());
base.AddAttributesToRender(writer);
}
protectedvirtualvoidOnPageChangeClick(EventArgse)
{
if(ChangePageClick!=null)
{
ChangePageClick(this,e);
}
}publicvoidRaisePostBackEvent(stringeventArgument)
{
intPageIndex=int.Parse(eventArgument);
this._CurrentPageIndex=PageIndex;
OnPageChangeClick(newEventArgs());
}
///<summary>
///将此控件出现给指定的输入参数
///</summary>
///<paramname=output>要写出到的HTML编写器</param>
protectedoverridevoidRenderContents(HtmlTextWriteroutput)
{this._TotalPage=((this.TotalRecord/PageSize)*this.PageSize==this.TotalRecord)?(this.TotalRecord/this.PageSize):((this.TotalRecord/this.PageSize)+1);
intBeginRecord=(this.CurrentPageIndex-1)*this.PageSize+1;
intEndRecord=this.CurrentPageIndex*this.PageSize;
StringPageInfo=[共<fontcolor=#CC0000>+this.TotalPage.ToString()+</font>页/以后第<fontcolor=#CC0000>+this.CurrentPageIndex.ToString()+</font>页共<fontcolor=#CC0000>+TotalRecord.ToString()+</font>笔记录,以后纪录数<fontcolor=#CC0000>+BegingRecord.ToString()+</font>到<fontcolor=#CC0000>+EndRecord.ToString()+</font>];
stringPageListStr=;
stringPageIndexColor=#0000C0;
intSingleNumber=this.TotalPage-(TotalPage/ItemSize)*ItemSize;//失掉分页后的尾数(好比:统共58页,按10页规格显现,则尾数为8)
intIntPageForMax=(this.CurrentPageIndex-1)/ItemSize;
intMinInt=(1+ItemSize*IntPageForMax);
intMaxInt=((IntPageForMax+1)*ItemSize)>TotalPage?TotalPage:((IntPageForMax+1)*ItemSize);
if(this.TotalRecord==0||this.TotalPage==0)
{
PageListStr=<fontcolor=+PageIndexColor+>0</font>;
PageListStr=PageListStr+[共<fontcolor=#CC0000>0</font>页/以后第<fontcolor=#CC0000>0</font>页共<fontcolor=#CC0000>0</font>笔记录,可怜的程序员,还是逃不出移植的命运! |
|