AspNetPager分页控件源代码(Version 4.2)第1/2页

时间:2021-05-28

//AspNetPager分页控件源代码(Version4.2):

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等将会被中文字符一、二、三等代替。
///</remarks>
[Browsable(true),
Category("导航按钮"),
DefaultValue(false),
Description("是否将页索引数值按钮用中文数字一、二、三等代替")]
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://)");
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)
{
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderEndTag();
}
base.RenderEndTag(writer);
writer.WriteLine();
writer.Write("<!-------------------------------");
writer.Write("AspNetPagerV4.2End");
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("&nbsp;&nbsp;&nbsp;&nbsp;");
if(TextBeforeInputBox!=null)
writer.Write(TextBeforeInputBox);
writer.AddAttribute(HtmlTextWriterAttribute.Type,"text");
writer.AddStyleAttribute(HtmlTextWriterStyle.Width,"30px");
writer.AddAttribute(HtmlTextWriterAttribute.Value,inputPageIndex);
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+"){event.returnValue=false;document.all[\'"+this.UniqueID+"\'][1].click();}else{event.returnValue=false;}}";
stringclickScript="if("+scriptRef+"){location.href=BuildUrlString(\'"+urlPageIndexName+"\',document.all[\'"+this.UniqueID+"_input\'].value)}";
writer.AddAttribute("onkeydown",(urlPaging==true)?keydownScript:postRef);
writer.RenderBeginTag(HtmlTextWriterTag.Input);
writer.RenderEndTag();
if(TextAfterInputBox!=null)
writer.Write(TextAfterInputBox);
writer.AddAttribute(HtmlTextWriterAttribute.Type,(urlPaging==true)?"Button":"Submit");
writer.AddAttribute(HtmlTextWriterAttribute.Name,this.UniqueID);
writer.AddAttribute(HtmlTextWriterAttribute.Value,SubmitButtonText);
if(SubmitButtonClass!=null&&SubmitButtonClass.Trim().Length>0)
writer.AddAttribute(HtmlTextWriterAttribute.Class,SubmitButtonClass);
if(SubmitButtonStyle!=null&&SubmitButtonStyle.Trim().Length>0)
writer.AddAttribute(HtmlTextWriterAttribute.Style,SubmitButtonStyle);
if(PageCount<=1&&AlwaysShow)
writer.AddAttribute(HtmlTextWriterAttribute.Disabled,"true");
writer.AddAttribute(HtmlTextWriterAttribute.Onclick,(urlPaging==true)?clickScript:"return"+scriptRef);
writer.RenderBeginTag(HtmlTextWriterTag.Input);
writer.RenderEndTag();}

if(ShowCustomInfoSection==ShowCustomInfoSection.Right)
{
writer.RenderEndTag();
WriteCellAttributes(writer,false);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
writer.Write(CustomInfoText);
}
}


#endregion

#regionPrivateHelperFunctions

///<summary>
///将基控件的Style转换为CSS字符串。
///</summary>
///<returns></returns>
privatestringGetStyleString()
{
if(Style.Count>0)
{
stringstl=null;
string[]skeys=newstring[Style.Count];
Style.Keys.CopyTo(skeys,0);
for(inti=0;i<skeys.Length;i++)
{
stl+=String.Concat(skeys[i],":",Style[skeys[i]],";");
}
returnstl;
}
returnnull;
}

///<summary>
///为用户自定义信息区和页导航按钮区和td添加属性。
///</summary>
///<paramname="writer"></param>
///<paramname="leftCell">是否为第一个td</param>
privatevoidWriteCellAttributes(HtmlTextWriterwriter,boolleftCell)
{
stringcustomUnit=CustomInfoSectionWidth.ToString();
if(ShowCustomInfoSection==ShowCustomInfoSection.Left&&leftCell||ShowCustomInfoSection==ShowCustomInfoSection.Right&&!leftCell)
{
if(CustomInfoClass!=null&&CustomInfoClass.Trim().Length>0)
writer.AddAttribute(HtmlTextWriterAttribute.Class,CustomInfoClass);
if(CustomInfoStyle!=null&&CustomInfoStyle.Trim().Length>0)
writer.AddAttribute(HtmlTextWriterAttribute.Style,CustomInfoStyle);
writer.AddAttribute(HtmlTextWriterAttribute.Valign,"bottom");
writer.AddStyleAttribute(HtmlTextWriterStyle.Width,customUnit);
writer.AddAttribute(HtmlTextWriterAttribute.Align,CustomInfoTextAlign.ToString().ToLower());
}
else
{
if(CustomInfoSectionWidth.Type==UnitType.Percentage)
{
customUnit=(Unit.Percentage(100-CustomInfoSectionWidth.Value)).ToString();
writer.AddStyleAttribute(HtmlTextWriterStyle.Width,customUnit);
}
writer.AddAttribute(HtmlTextWriterAttribute.Valign,"bottom");
writer.AddAttribute(HtmlTextWriterAttribute.Align,HorizontalAlign.ToString().ToLower());
}
writer.AddAttribute(HtmlTextWriterAttribute.Nowrap,"true");
}

///<summary>
///获取分页导航按钮的超链接字符串。
///</summary>
///<paramname="pageIndex">该分页按钮相对应的页索引。</param>
///<returns>分页导航按钮的超链接字符串。</returns>
privatestringGetHrefString(intpageIndex)
{
if(urlPaging)
{
NameValueCollectioncol=newNameValueCollection();
col.Add(urlPageIndexName,pageIndex.ToString());
returnBuildUrlString(col);
}
returnPage.GetPostBackClientHyperlink(this,pageIndex.ToString());
}

///<summary>
///当使用Url分页方式时,在当前Url上加入分页参数,若该参数存在,则改变其值。
///</summary>
///<paramname="col">要加入到新Url中的参数名和值的集合。</param>
///<returns>分页导航按钮的超链接字符串,包括分页参数。</returns>
privatestringBuildUrlString(NameValueCollectioncol)
{
inti;
stringtempstr="";
if(urlParams==null||urlParams.Count<=0)
{
for(i=0;i<col.Count;i++)
{
tempstr+=String.Concat("&",col.Keys[i],"=",col[i]);
}
returnString.Concat(currentUrl,"?",tempstr.Substring(1));
}
NameValueCollectionnewCol=newNameValueCollection(urlParams);
string[]newColKeys=newCol.AllKeys;
for(i=0;i<newColKeys.Length;i++)
{
newColKeys[i]=newColKeys[i].ToLower();
}
for(i=0;i<col.Count;i++)
{
if(Array.IndexOf(newColKeys,col.Keys[i].To

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章