今天增强了一下AspNetPager控件

在分页设置的时候发现http://www.webdiyer.com/ 写的分页控件实在是好用,而且是开源的,真是佩服呀,一直没有机会感谢一下,使用了很久,这次客户提了一些需求正好安排一天时间改进了一下,也是很不错的。
    说明:增强的了内容是在4.3.3的版本基本上进行修改的。只是简单的测试版,我只发了几个小时的时间修改的。还没有经过严格的测试,如果大家发现有什么问题,请回复,谢谢

 

   1//AspNetPager分页控件源代码:
   2//版权所有:陕西省吴旗县 Webdiyer(yhaili@21cn.com)(Web site: www.webdiyer.com);
   3//此源代码仅供学习参考,不得用作任何商业用途;
   4//若需修改并重新编译该控件,请保留完整的源代码的版权信息!
   5//有关控件升级及新控件发布信息,请留意 www.webdiyer.com 。
   6//版本4.3.3
   7//增强版 (修改自4.3.3版本)
   8//描述:增加了可自定义每页的记录数。
   9//modify by liubiqu(liubiqu@sina.com) [http://www.cnblogs.com/liubiqu]
  10//DateTime: 2005-06-10
  11
  12using System;
  13using System.Collections;
  14using System.Collections.Specialized;
  15using System.ComponentModel;
  16using System.IO;
  17using System.Text;
  18using System.Web.UI;
  19using System.Web.UI.Design.WebControls;
  20using System.Web.UI.WebControls;
  21
  22namespace EOffice.Components
  23{
  24    #region AspNetPager Server Control
  25
  26    #region 控件说明及示例
  27    /// <summary>
  28    /// 用于ASP.NET Web应用程序中对数据进行分页的的服务器控件。
  29    /// </summary>
  30    /// <remarks>不同于DataGrid控件,AspNetPager分页控件本身并不显示任何数据,而只显示页导航元素,数据在页面上的显示方式与该控件无关。该控件可以为DataGrid、DataList、Repeater以及自定义控件进行分页,配合Sql存储过程,分页性能较使用DataGrid分页有明显提升,尤其是当数据量大时性能可提升数倍!
  31    /// <p>AspNetPager 2.0 中新增了通过Url来分页的功能,这使得访问者可以直接输入相应的Url来访问任何页面,并且搜索引擎也可以直接检索每个页面,若使用DataGrid的分页功能,这是无法实现的。</p>
  32    /// <p>要使用 AspNetPager 分页控件,必须最少指定它的 <see cref="RecordCount"/> 属性,指定并编写 <see cref="PageChanged"/> 事件的处理程序。
  33    /// <see cref="RecordCount"/> 属性指定要分页的所有数据的总项数,若未指定该值或该值小于等于 <see cref="PageSize"/> ,则AspNetPager控件不会显示任何内容。
  34    /// 若未指定并编写 <see cref="PageChanged"/> 事件处理程序,则当用户点击页导航元素或在页索引文本框中手式输入页索引并提交时AspNetPager不会跳转到指定的页。
  35    /// AspNetPager控件的分页方法和DataGrid基本相同,即在它的 <see cref="PageChanged"/> 事件处理程序中将传递事件数据的 <see cref="PageChangedEventArgs"/> 的 <see cref="PageChangedEventArgs.NewPageIndex"/>值赋给 AspNetPager的 <see cref="CurrentPageIndex"/>属性,然后重新将新的数据与数据显示控件绑定。 </p></remarks>
  36    /// <example>以下示例说明如何用AspNetPager对DataGrid进行分页。
  37    /// <code><![CDATA[
  38    ///<%@ Page Language="C#"%>
  39    ///<%@ Import Namespace="System.Data"%>
  40    ///<%@Import Namespace="System.Data.SqlClient"%>
  41    ///<%@Import Namespace="System.Configuration"%>
  42    ///<%@Register TagPrefix="Webdiyer" Namespace="Wuqi.Webdiyer" Assembly="aspnetpager"%>
  43    ///<HTML>
  44    ///<HEAD>
  45    ///<TITLE>Welcome to Webdiyer.com </TITLE>
  46    ///  <script runat="server">
  47    ///        SqlConnection conn;
  48    ///        SqlCommand cmd;
  49    ///        void Page_Load(object src,EventArgs e)
  50    ///        {
  51    ///            conn=new SqlConnection(ConfigurationSettings.AppSettings["ConnStr"]);
  52    ///            if(!Page.IsPostBack)
  53    ///            {
  54    ///                cmd=new SqlCommand("GetNews",conn);
  55    ///                cmd.CommandType=CommandType.StoredProcedure;
  56    ///                cmd.Parameters.Add("@pageindex",1);
  57    ///                cmd.Parameters.Add("@pagesize",1);
  58    ///                cmd.Parameters.Add("@docount",true);
  59    ///                conn.Open();
  60    ///                pager.RecordCount=(int)cmd.ExecuteScalar();
  61    ///                conn.Close();
  62    ///                BindData();
  63    ///            }
  64    ///        }
  65    ///
  66    ///        void BindData()
  67    ///        {
  68    ///            cmd=new SqlCommand("GetNews",conn);
  69    ///            cmd.CommandType=CommandType.StoredProcedure;
  70    ///            cmd.Parameters.Add("@pageindex",pager.CurrentPageIndex);
  71    ///            cmd.Parameters.Add("@pagesize",pager.PageSize);
  72    ///            cmd.Parameters.Add("@docount",false);
  73    ///            conn.Open();
  74    ///            dataGrid1.DataSource=cmd.ExecuteReader();
  75    ///            dataGrid1.DataBind();
  76    ///            conn.Close();
  77    ///            pager.CustomInfoText="记录总数:<font color=\"blue\"><b>"+pager.RecordCount.ToString()+"</b></font>";
  78    ///            pager.CustomInfoText+=" 总页数:<font color=\"blue\"><b>"+pager.PageCount.ToString()+"</b></font>";
  79    ///            pager.CustomInfoText+=" 当前页:<font color=\"red\"><b>"+pager.CurrentPageIndex.ToString()+"</b></font>";
  80    ///        }
  81    ///        void ChangePage(object src,PageChangedEventArgs e)
  82    ///        {
  83    ///            pager.CurrentPageIndex=e.NewPageIndex;
  84    ///            BindData();
  85    ///        }
  86    ///  </script>
  87    ///     <meta http-equiv="Content-Language" content="zh-cn">
  88    ///        <meta http-equiv="content-type" content="text/html;charset=gb2312">
  89    ///        <META NAME="Generator" CONTENT="EditPlus">
  90    ///        <META NAME="Author" CONTENT="Webdiyer(yhaili@21cn.com)">
  91    ///    </HEAD>
  92    ///    <body>
  93    ///        <form runat="server" ID="Form1">
  94    ///            <asp:DataGrid id="dataGrid1" runat="server" />
  95    ///
  96    ///            <Webdiyer:AspNetPager id="pager" 
  97    ///            runat="server" 
  98    ///            PageSize="8" 
  99    ///            NumericButtonCount="8" 
 100    ///            ShowCustomInfoSection="left" 
 101    ///            PagingButtonSpacing="0"
 102    ///            ShowInputBox="always" 
 103    ///            CssClass="mypager" 
 104    ///            HorizontalAlign="right" 
 105    ///            OnPageChanged="ChangePage"  
 106    ///            SubmitButtonText="转到" 
 107    ///            NumericButtonTextFormatString="[{0}]"/>
 108    ///
 109    ///        </form>
 110    ///    </body>
 111    ///</HTML>
 112    /// ]]>
 113    /// </code>
 114    /// <p>下面是该示例所用的Sql Server存储过程:</p>
 115    /// <code>
 116    /// <![CDATA[
 117    ///CREATE procedure GetNews
 118    ///     (@pagesize int,
 119    ///        @pageindex int,
 120    ///        @docount bit)
 121    ///        as
 122    ///        set nocount on
 123    ///        if(@docount=1)
 124    ///        select count(id) from news
 125    ///        else
 126    ///        begin
 127    ///        declare @indextable table(id int identity(1,1),nid int)
 128    ///        declare @PageLowerBound int
 129    ///        declare @PageUpperBound int
 130    ///        set @PageLowerBound=(@pageindex-1)*@pagesize
 131    ///        set @PageUpperBound=@PageLowerBound+@pagesize
 132    ///        set rowcount @PageUpperBound
 133    ///        insert into @indextable(nid) select id from news order by addtime desc
 134    ///        select O.id,O.source,O.title,O.addtime from news O,@indextable t where O.id=t.nid
 135    ///        and t.id>@PageLowerBound and t.id<=@PageUpperBound order by t.id
 136    ///        end
 137    ///        set nocount off
 138    ///GO
 139    /// ]]>
 140    /// </code></example>

 141    #endregion

 142
 143    [DefaultProperty("PageSize")]
 144    [DefaultEvent("PageChanged")]
 145    [ParseChildren(false)]
 146    [PersistChildren(false)]
 147    [Description("专用于ASP.Net Web应用程序的分页控件")]
 148    [Designer(typeof(PagerDesigner))]
 149    [ToolboxData("<{0}:AspNetPager runat=server></{0}:AspNetPager>")]
 150    public class AspNetPager:Panel,INamingContainer,IPostBackEventHandler,IPostBackDataHandler
 151    {
 152        private string cssClassName;
 153        private string urlPageIndexName="page";
 154        private string urlPageSize = "pagesize";//TODO:var urlPageSize add by liubiqu 2005-6-10
 155        private bool urlPaging=false;
 156        private string inputPageIndex;
 157        private string selectPageSize; //TODO:var selectPageSize add by liubiqu 2005-6-10
 158        private string currentUrl=null;
 159        private NameValueCollection urlParams=null;
 160
 161        #region Properties
 162
 163        #region Navigation Buttons
 164
 165        /// <summary>
 166        /// 获取或设置一个值,该值批示当鼠标指针悬停在导航按钮上时是否显示工具提示。
 167        /// </summary>

 168        [Browsable(true),
 169        Category("导航按钮"),
 170        DefaultValue(true),
 171        Description("指定当鼠标停留在导航按钮上时,是否显示工具提示")]
 172        public bool ShowNavigationToolTip
 173        {
 174            get
 175            {
 176                object obj=ViewState["ShowNavigationToolTip"];
 177                return (obj==null)?true:(bool)obj;
 178            }

 179            set
 180            {
 181                ViewState["ShowNavigationToolTip"]=value;
 182            }

 183        }

 184
 185        /// <summary>
 186        /// 获取或设置导航按钮工具提示文本的格式。
 187        /// </summary>

 188        [Browsable(true),
 189        Category("导航按钮"),
 190        DefaultValue("转到第{0}页"),
 191        Description("页导航按钮工具提示文本的格式")]
 192        public string NavigationToolTipTextFormatString
 193        {
 194            get
 195            {
 196                object obj=ViewState["NavigationToolTipTextFormatString"];
 197                return (obj==null)?"转到第{0}页":(string)obj;
 198            }

 199            set
 200            {
 201                string tip=value;
 202                if(tip.Trim().Length<1&&tip.IndexOf("{0}")<0)
 203                    tip="{0}";
 204                ViewState["NavigationToolTipTextFormatString"]=tip;
 205            }

 206        }

 207
 208        /// <summary>
 209        /// 获取或设置一个值,该值指示是否将页索引按钮用中文数字代替。
 210        /// </summary>
 211        /// <remarks>
 212        /// 将该值设为true并且未使用图片按钮时,页索引按钮中的数值1、2、3等将会被中文字符一、二、三等代替。
 213        /// </remarks>

 214        [Browsable(true),
 215        Category("导航按钮"),
 216        DefaultValue(false),
 217        Description("是否将页索引数值按钮用中文数字一、二、三等代替")]
 218        public bool ChinesePageIndex
 219        {
 220            get
 221            {
 222                object obj=ViewState["ChinesePageIndex"];
 223                return (obj==null)?false:(bool)obj;
 224            }

 225            set
 226            {
 227                ViewState["ChinesePageIndex"]=value;
 228            }

 229        }

 230
 231        /// <summary>
 232        /// 获取或设置页索引数值导航按钮上文字的显示格式。
 233        /// </summary>
 234        /// <value>
 235        /// 字符串,指定页索引数值按钮上文字的显示格式,默认值为<see cref="String.Empty"/>,即未设置该属性。</value>
 236        /// <remarks>
 237        /// 使用NumericButtonTextFormatString属性指定页索引数值按钮的显示格式,如未设置该值时索引按钮文本将会是:1 2 3 ,设置该值将改变索引按钮文本的显示格式,
 238        /// 如将该值设为“[{0}]”则索引文本会显示为:[1] [2] [3] ,将该值设为“-{0}-”则会使索引文本变为:-1- -2- -3- 
 239        /// </remarks>

 240        [Browsable(true),
 241        DefaultValue(""),
 242        Category("导航按钮"),
 243        Description("页索引数值按钮上文字的显示格式")]
 244        public string NumericButtonTextFormatString
 245        {
 246            get
 247            {
 248                object obj=ViewState["NumericButtonTextFormatString"];
 249                return (obj==null)?String.Empty:(string)obj;
 250            }

 251            set
 252            {
 253                ViewState["NumericButtonTextFormatString"]=value;
 254            }

 255        }

 256
 257        /// <summary>
 258        /// 获取或设置分页导航按钮的类型,即使用文字还是图片。
 259        /// </summary>
 260        /// <remarks>
 261        /// 要使用图片按钮,您需要准备以下图片:从0到9的十个数值图片(当ShowPageIndex设为true时),第一页、上一页、下一页、最后一页及更多页()五个按钮图片(当ShowFirstLast及ShowPrevNext都设为true时),
 262        /// 若需要使当前页索引的数值按钮不同于别的页索引数值按钮,则还需准备当前页索引的按钮图片;
 263        /// 若需要使已禁用的第一页、上一页、下一页及最后一页按钮图片不同于正常的按钮图片,则还需准备这四个按钮在禁用状态下的图片;
 264        /// <p><b>图片文件的命名规则如下:</b></p>
 265        /// <p>从0到9十张数值按钮图片必须命名为“数值+ButtonImageNameExtension+ButtonImageExtension”,其中的ButtonImageNameExtension可以不用设置,
 266        /// ButtonImageExtension是图片文件的后缀名,如 .gif或 .jpg等可以在浏览器中显示的任何图片文件类型。如页索引“1”的图片文件可命名为“1.gif”或“1.jpg”,
 267        /// 当您有两套或更多套图片文件时,可以通过指定ButtonImageNameExtension属性值来区分不同套的图片,如第一套图片可以不用设ButtonImageNameExtension,则图片文件名类似于“1.gif”、“2.gif”等等,而第二套图片则设置ButtonImageNameExtension为“f”,图片文件名类似于“1f.gif”,“2f.gif”等等。</p>
 268        /// <p>第一页按钮的图片文件名以“first”开头,上一页按钮图片名以“prev”开头,下一页按钮图片名以“next”开头,最后一页按钮图片名以“last”开头,更多页按钮图片名以“more”开头,是否使用ButtonImageNameExtension取决于数值按钮的设置及是否有更多套图片。</p>
 269        /// </remarks>
 270        /// <example>
 271        /// 以下代码片段示例如果使用图片按钮:
 272        /// <p>
 273        /// <code><![CDATA[
 274        /// <Webdiyer:AspNetPager runat="server" 
 275        ///        id="pager1" 
 276        ///        OnPageChanged="ChangePage"  
 277        ///        PagingButtonType="image" 
 278        ///        ImagePath="images" 
 279        ///        ButtonImageNameExtension="n" 
 280        ///        DisabledButtonImageNameExtension="g" 
 281        ///        ButtonImageExtension="gif" 
 282        ///        CpiButtonImageNameExtension="r" 
 283        ///        PagingButtonSpacing=5/>
 284        /// ]]>
 285        /// </code>
 286        /// </p>
 287        /// </example>

 288        [Browsable(true),
 289        DefaultValue(PagingButtonType.Text),
 290        Category("导航按钮"),
 291        Description("分页导航按钮的类型,是使用文字还是图片")]
 292        public PagingButtonType PagingButtonType
 293        {
 294            get
 295            {
 296                object obj=ViewState["PagingButtonType"];
 297                return (obj==null)?PagingButtonType.Text:(PagingButtonType)obj;
 298            }

 299            set
 300            {
 301                ViewState["PagingButtonType"]=value;
 302            }

 303        }

 304
 305        /// <summary>
 306        /// 获取或设置页导航数值按钮的类型,该值仅当PagingButtonType设为Image时才有效。
 307        /// </summary>
 308        /// <remarks>
 309        /// 当您将PagingButtonType设为Image当又不想让页索引数值按钮使用图片时,可以将该值设为Text,这会使页索引数据按钮使用文本而不是图片按钮。
 310        /// </remarks>

 311        [Browsable(true),
 312        DefaultValue(PagingButtonType.Text),
 313        Category("导航按钮"),
 314        Description("页导航数值按钮的类型")]
 315        public PagingButtonType NumericButtonType
 316        {
 317            get
 318            {
 319                object obj=ViewState["NumericButtonType"];
 320                return (obj==null)?PagingButtonType:(PagingButtonType)obj;
 321            }

 322            set
 323            {
 324                ViewState["NumericButtonType"]=value;
 325            }

 326        }

 327
 328        /// <summary>
 329        /// 获取或设置第一页、上一页、下一页和最后一页按钮的类型,该值仅当PagingButtonType设为Image时才有效。
 330        /// </summary>
 331        /// <remarks>
 332        /// 当您将PagingButtonType设为Image但又不想让第一页、下一页、下一页和最后一页按钮使用图片,则可以将该值设为Text,这会使前面的四个按钮使用文本而不是图片按钮。
 333        /// </remarks>

 334        [Browsable(true),
 335        Category("导航按钮"),
 336        DefaultValue(PagingButtonType.Text),
 337        Description("第一页、上一页、下一页和最后一页按钮的类型")]
 338        public PagingButtonType NavigationButtonType
 339        {
 340            get
 341            {
 342                object obj=ViewState["NavigationButtonType"];
 343                return (obj==null)?PagingButtonType:(PagingButtonType)obj;
 344            }

 345            set
 346            {
 347                ViewState["NavigationButtonType"]=value;
 348            }

 349        }

 350
 351        /// <summary>
 352        /// 获取或设置“更多页”()按钮的类型,该值仅当PagingButtonType设为Image时才有效。
 353        /// </summary>
 354        /// <remarks>
 355        /// 当您将PagingButtonType设为Image但又不想让更多页()按钮使用图片时,可以将此值设为Text,这会使更多页按钮使用文本而不是图片按钮。
 356        /// </remarks>

 357        [Browsable(true),
 358        Category("导航按钮"),
 359        DefaultValue(PagingButtonType.Text),
 360        Description("“更多页”()按钮的类型")]
 361        public PagingButtonType MoreButtonType
 362        {
 363            get
 364            {
 365                object obj=ViewState["MoreButtonType"];
 366                return (obj==null)?PagingButtonType:(PagingButtonType)obj;
 367            }

 368            set
 369            {
 370                ViewState["MoreButtonType"]=value;
 371            }

 372        }

 373
 374        /// <summary>
 375        /// 获取或设置分页导航按钮之间的间距。
 376        /// </summary>

 377        [Browsable(true),
 378        Category("导航按钮"),
 379        DefaultValue(typeof(Unit),"5px"),
 380        Description("分页导航按钮之间的间距")]
 381        public Unit PagingButtonSpacing
 382        {
 383            get
 384            {
 385                object obj=ViewState["PagingButtonSpacing"];
 386                return (obj==null)?Unit.Pixel(5):(Unit.Parse(obj.ToString()));
 387            }

 388            set
 389            {
 390                ViewState["PagingButtonSpacing"]=value;
 391            }

 392        }

 393
 394        /// <summary>
 395        /// 获取或设置一个值,该值指示是否在页导航元素中显示第一页和最后一页按钮。
 396        /// </summary>

 397        [Browsable(true),
 398        Description("是否在页导航元素中显示第一页和最后一页按钮"),
 399        Category("导航按钮"),
 400        DefaultValue(true)]
 401        public bool ShowFirstLast
 402        {
 403            get
 404            {
 405                object obj=ViewState["ShowFirstLast"];
 406                return (obj==null)?true:(bool)obj;
 407            }

 408            set{ViewState["ShowFirstLast"]=value;}
 409        }

 410
 411        /// <summary>
 412        /// 获取或设置一个值,该值指示是否在页导航元素中显示上一页和下一页按钮。
 413        /// </summary>

 414        [Browsable(true),
 415        Description("是否在页导航元素中显示上一页和下一页按钮"),
 416        Category("导航按钮"),
 417        DefaultValue(true)]
 418        public bool ShowPrevNext
 419        {
 420            get
 421            {
 422                object obj=ViewState["ShowPrevNext"];
 423                return (obj==null)?true:(bool)obj;
 424            }

 425            set{ViewState["ShowPrevNext"]=value;}
 426        }

 427
 428        /// <summary>
 429        /// 获取或设置一个值,该值指示是否在页导航元素中显示页索引数值按钮。
 430        /// </summary>

 431        [Browsable(true),
 432        Description("是否在页导航元素中显示数值按钮"),
 433        Category("导航按钮"),
 434        DefaultValue(true)]
 435        public bool ShowPageIndex
 436        {
 437            get
 438            {
 439                object obj=ViewState["ShowPageIndex"];
 440                return (obj==null)?true:(bool)obj;
 441            }

 442            set{ViewState["ShowPageIndex"]=value;}
 443        }

 444
 445        /// <summary>
 446        /// 获取或设置为第一页按钮显示的文本。
 447        /// </summary>

 448        [Browsable(true),
 449        Description("第一页按钮上显示的文本"),
 450        Category("导航按钮"),
 451        DefaultValue("<font face=\"webdings\">9</font>")]
 452        public string FirstPageText
 453        {
 454            get
 455            {
 456                object obj=ViewState["FirstPageText"];
 457                return (obj==null)?"<font face=\"webdings\">9</font>":(string)obj;
 458            }

 459            set{ViewState["FirstPageText"]=value;}
 460        }

 461
 462        /// <summary>
 463        /// 获取或设置为上一页按钮显示的文本。
 464        /// </summary>

 465        [Browsable(true),
 466        Description("上一页按钮上显示的文本"),
 467        Category("导航按钮"),
 468        DefaultValue("<font face=\"webdings\">3</font>")]
 469        public string PrevPageText
 470        {
 471            get
 472            {
 473                object obj=ViewState["PrevPageText"];
 474                return (obj==null)?"<font face=\"webdings\">3</font>":(string)obj;
 475            }

 476            set{ViewState["PrevPageText"]=value;}
 477        }

 478
 479        /// <summary>
 480        /// 获取或设置为下一页按钮显示的文本。
 481        /// </summary>

 482        [Browsable(true),
 483        Description("下一页按钮上显示的文本"),
 484        Category("导航按钮"),
 485        DefaultValue("<font face=\"webdings\">4</font>")]
 486        public string NextPageText
 487        {
 488            get
 489            {
 490                object obj=ViewState["NextPageText"];
 491                return (obj==null)?"<font face=\"webdings\">4</font>":(string)obj;
 492            }

 493            set{ViewState["NextPageText"]=value;}
 494        }

 495
 496        /// <summary>
 497        /// 获取或设置为最后一页按钮显示的文本。
 498        /// </summary>

 499        [Browsable(true),
 500        Description("最后一页按钮上显示的文本"),
 501        Category("导航按钮"),
 502        DefaultValue("<font face=\"webdings\">:</font>")]
 503        public string LastPageText
 504        {
 505            get
 506            {
 507                object obj=ViewState["LastPageText"];
 508                return (obj==null)?"<font face=\"webdings\">:</font>":(string)obj;
 509            }

 510            set{ViewState["LastPageText"]=value;}
 511        }

 512
 513        /// <summary>
 514        /// 获取或设置在 <see cref="AspNetPager"/> 控件的页导航元素中同时显示的数值按钮的数目。
 515        /// </summary>

 516        [Browsable(true),
 517        Description("要显示的页索引数值按钮的数目"),
 518        Category("导航按钮"),
 519        DefaultValue(10)]
 520        public int NumericButtonCount
 521        {
 522            get
 523            {
 524                object obj=ViewState["NumericButtonCount"];
 525                return (obj==null)?10:(int)obj;
 526            }

 527            set{ViewState["NumericButtonCount"]=value;}
 528        }

 529
 530        /// <summary>
 531        /// 获取或设置一个值,该值指定是否显示已禁用的按钮。
 532        /// </summary>
 533        /// <remarks>
 534        /// 该值用来指定是否显示已禁用的分页导航按钮,当当前页为第一页时,第一页和上一页按钮将被禁用,当当前页为最后一页时,下一页和最后一页按钮将被禁用,被禁用的按钮没有链接,在按钮上点击也不会有任何作用。
 535        /// </remarks>

 536        [Browsable(true),
 537        Category("导航按钮"),
 538        Description("是否显示已禁用的按钮"),
 539        DefaultValue(true)]
 540        public bool ShowDisabledButtons
 541        {
 542            get
 543            {
 544                object obj=ViewState["ShowDisabledButtons"];
 545                return (obj==null)?true:(bool)obj;
 546            }

 547            set
 548            {
 549                ViewState["ShowDisabledButtons"]=value;
 550            }

 551        }

 552        
 553        #endregion

 554
 555        #region Image Buttons
 556
 557        /// <summary>
 558        /// 获取或设置当使用图片按钮时,图片文件的路径。
 559        /// </summary>

 560        [Browsable(true),
 561        Category("图片按钮"),
 562        Description("当使用图片按钮时,指定图片文件的路径"),
 563        DefaultValue(null)]
 564        public string ImagePath
 565        {
 566            get
 567            {
 568                string imgPath=(string)ViewState["ImagePath"];
 569                if(imgPath!=null)
 570                    imgPath=this.ResolveUrl(imgPath);
 571                return imgPath;
 572            }

 573            set
 574            {
 575                string imgPath=value.Trim().Replace("\\","/");
 576                ViewState["ImagePath"]=(imgPath.EndsWith("/"))?imgPath:imgPath+"/";
 577            }

 578        }

 579        
 580        /// <summary>
 581        /// 获取或设置当使用图片按钮时,图片的类型,如gif或jpg,该值即图片文件的后缀名。
 582        /// </summary>

 583        [Browsable(true),
 584        Category("图片按钮"),
 585        DefaultValue(".gif"),
 586        Description("当使用图片按钮时,图片的类型,如gif或jpg,该值即图片文件的后缀名")]
 587        public string ButtonImageExtension
 588        {
 589            get
 590            {
 591                object obj=ViewState["ButtonImageExtension"];
 592                return (obj==null)?".gif":(string)obj;
 593            }

 594            set
 595            {
 596                string ext=value.Trim();
 597                ViewState["ButtonImageExtension"]=(ext.StartsWith("."))?ext:("."+ext);
 598            }

 599        }

 600
 601        /// <summary>
 602        /// 获取或设置自定义图片文件名的后缀字符串,以区分不同类型的按钮图片。
 603        /// </summary>
 604        /// <remarks><note>注意:</note>该值不是文件后缀名,而是为区分不同的图片文件而在图片名中加入的字符串,如:
 605        /// 当前有两套按钮图片,其中一套中的“1”的图片名可为“1f.gif”,另一套中的“1”的图片名可起为“1n.gif”,其中的f和n即为ButtonImageNameExtension。</remarks>

 606        [Browsable(true),
 607        DefaultValue(null),
 608        Category("图片按钮"),
 609        Description("自定义图片文件名的后缀字符串(非文件后缀名),如图片“1f.gif”的ButtonImageNameExtension即为“f”")]
 610        public string ButtonImageNameExtension
 611        {
 612            get
 613            {
 614                return (string)ViewState["ButtonImageNameExtension"];
 615            }

 616            set
 617            {
 618                ViewState["ButtonImageNameExtension"]=value;
 619            }

 620        }

 621
 622        /// <summary>
 623        /// 获取或设置当前页索引按钮的图片名后缀。
 624        /// </summary>
 625        /// <remarks>
 626        /// 当 <see cref="PagingButtonType"/> 设为 Image 时,该属性允许您设置当前页索引数值按钮使用的图片名后缀字符,因此可以使当前页索引按钮与其它页索引按钮使用不同的图片,若未设置该值,则默认值为<see cref="ButtonImageNameExtension"/>,即当前页索引按钮与其它页索引按钮使用相同的图片。
 627        /// </remarks>

 628        [Browsable(true),
 629        DefaultValue(null),
 630        Category("图片按钮"),
 631        Description("当前页索引按钮的图片名后缀字符串")]
 632        public string CpiButtonImageNameExtension
 633        {
 634            get
 635            {
 636                object obj=ViewState["CpiButtonImageNameExtension"];
 637                return (obj==null)?ButtonImageNameExtension:(string)obj;
 638            }

 639            set
 640            {
 641                ViewState["CpiButtonImageNameExtension"]=value;
 642            }

 643        }

 644
 645        /// <summary>
 646        /// 获取或设置已禁用的页导航按钮图片名后缀字符串。
 647        /// </summary>
 648        /// <remarks>
 649        /// 当 <see cref="PagingButtonType"/> 设为 Image 时, 该值允许您设置已禁用(即没有链接,因而点击后无反应)的页导航按钮(包括第一页、上一页、下一页、最后一页四个按钮)的图片文件名后缀字符串,因此可以使已禁用的页导航按钮不同于正常的页导航按钮。若未设置该值,则默认值为<see cref="ButtonImageNameExtension"/>,即已禁用的页导航按钮与正常的页导航按钮使用相同的图片。
 650        /// </remarks>

 651        [Browsable(true),
 652        DefaultValue(null),
 653        Category("图片按钮"),
 654        Description("已禁用的页导航按钮的图片名后缀字符串")]
 655        public string DisabledButtonImageNameExtension
 656        {
 657            get
 658            {
 659                object obj=ViewState["DisabledButtonImageNameExtension"];
 660                return (obj==null)?ButtonImageNameExtension:(string)obj;
 661            }

 662            set
 663            {
 664                ViewState["DisabledButtonImageNameExtension"]=value;
 665            }

 666        }

 667        /// <summary>
 668        /// 指定当使用图片按钮时,图片的对齐方式。
 669        /// </summary>

 670
 671        [Browsable(true),
 672        Description("指定当使用图片按钮时,图片的对齐方式"),
 673        DefaultValue(ImageAlign.Baseline),
 674        Category("图片按钮")]
 675        public ImageAlign ButtonImageAlign
 676        {
 677            get
 678            {
 679                object obj=ViewState["ButtonImageAlign"];
 680                return (obj==null)?ImageAlign.Baseline:(ImageAlign)obj;
 681            }

 682            set{ViewState["ButtonImageAlign"]=value;}
 683        }

 684
 685        
 686        #endregion

 687
 688        #region Paging
 689
 690        /// <summary>
 691        /// 获取或设置是否启用url来传递分页信息。
 692        /// </summary>
 693        /// <remarks>
 694        /// 启用Url分页方式是将用户欲访问的页索引通过Url来传递,由于该分页方式不使用页面向自身回发来传递数据,
 695        /// 所以每次分页时所有的数据都恢复为初始值或需要重新获取。使用Url分页方式不支持动态改变分页控件的属性值,
 696        /// 因暂时无法将新的属性值通过Url来传递给下一页。
 697        /// </remarks>
 698        /// <example>以下示例说明如何用AspNetPager的Url分页方式对DataGrid进行分页(使用Access数据库):
 699        /// <code><![CDATA[
 700        ///<%@Register TagPrefix="Webdiyer" Namespace="Wuqi.Webdiyer" Assembly="aspnetpager"%>
 701        ///<%@Import Namespace="System.Data.OleDb"%>
 702        ///<%@ Import Namespace="System.Data"%>
 703        ///<%@ Page Language="C#" debug=true%>
 704        ///<HTML>
 705        ///    <HEAD>
 706        ///        <TITLE>Welcome to Webdiyer.com </TITLE>
 707        ///        <script runat="server">
 708        ///        OleDbConnection conn;
 709        ///        OleDbCommand cmd;
 710        ///        void Page_Load(object src,EventArgs e){
 711        ///        conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("access/aspnetpager.mdb"));
 712        ///        if(!Page.IsPostBack){
 713        ///        cmd=new OleDbCommand("select count(newsid) from wqnews",conn);
 714        ///        conn.Open();
 715        ///        pager.RecordCount=(int)cmd.ExecuteScalar();
 716        ///        conn.Close();
 717        ///        BindData();
 718        ///        }
 719        ///        }
 720        ///
 721        ///        void BindData(){
 722        ///        cmd=new OleDbCommand("select newsid,heading,source,addtime from wqnews order by addtime desc",conn);
 723        ///        OleDbDataAdapter adapter=new OleDbDataAdapter(cmd);
 724        ///        DataSet ds=new DataSet();
 725        ///        adapter.Fill(ds,pager.PageSize*(pager.CurrentPageIndex-1),pager.PageSize,"news");
 726        ///        dg.DataSource=ds.Tables["news"];
 727        ///        dg.DataBind();
 728        ///        }
 729        ///
 730        ///        void ChangePage(object src,PageChangedEventArgs e){
 731        ///        pager.CurrentPageIndex=e.NewPageIndex;
 732        ///        BindData();
 733        ///        }
 734        ///
 735        ///        </script>
 736        ///        <meta http-equiv="Content-Language" content="zh-cn">
 737        ///        <meta http-equiv="content-type" content="text/html;charset=gb2312">
 738        ///        <META NAME="Generator" CONTENT="EditPlus">
 739        ///        <META NAME="Author" CONTENT="Webdiyer(yhaili@21cn.com)">
 740        ///    </HEAD>
 741        ///    <body>
 742        ///        <form runat="server" ID="Form1">
 743        ///            <h2 align="center">AspNetPager分页示例</h2>
 744        ///            <asp:DataGrid id="dg" runat="server" 
 745        ///            Width="760" CellPadding="4" Align="center" />
 746        ///            
 747        ///            <Webdiyer:AspNetPager runat="server" id="pager" 
 748        ///            OnPageChanged="ChangePage" 
 749        ///            HorizontalAlign="center" 
 750        ///            style="MARGIN-TOP:10px;FONT-SIZE:16px" 
 751        ///            PageSize="8" 
 752        ///            ShowInputBox="always" 
 753        ///            SubmitButtonStyle="border:1px solid #000066;height:20px;width:30px" 
 754        ///            InputBoxStyle="border:1px #0000FF solid;text-align:center" 
 755        ///            SubmitButtonText="转到" 
 756        ///            UrlPaging="true" 
 757        ///            UrlPageIndexName="pageindex" />
 758        ///        </form>
 759        ///    </body>
 760        ///</HTML>
 761        /// ]]></code>
 762        /// </example>

 763        [Browsable(true),
 764        Category("分页"),
 765        DefaultValue(false),
 766        Description("是否使用url传递分页信息的方式来分页")]
 767        public bool UrlPaging
 768        {
 769            get
 770            {
 771                return urlPaging;
 772            }

 773            set
 774            {
 775                urlPaging=value;
 776            }

 777        }

 778
 779        /// <summary>
 780        /// 获取或设置当启用Url分页方式时,在url中表示要传递的页索引的参数的名称。
 781        /// </summary>
 782        /// <remarks>
 783        /// 该属性允许您自定义通过Url传递页索引时表示要传递的页索引的参数的名称,以避免与现有的参数名重复。
 784        /// <p>该属性的默认值是“page”,即通过Url分页时,显示在浏览器地址栏中的Url类似于:</p>http://www.webdiyer.com/aspnetpager/samples/datagrid_url.aspx?page=2 
 785        /// <p>如将该值改为“pageindex”,则上面的Url将变为:</p><p>http://www.webdiyer.com/aspnetpager/samples/datagrid_url.aspx?pageindex=2 </p>
 786        /// </remarks>

 787        [Browsable(true),
 788        DefaultValue("page"),
 789        Category("分页"),
 790        Description("当启用Url分页方式时,显示在url中表示要传递的页索引的参数的名称")]
 791        public string UrlPageIndexName
 792        {
 793            get{return urlPageIndexName;}
 794            set{urlPageIndexName=value;}
 795        }

 796
 797        /// <summary>
 798        /// 获取或设置当启用Url分页方式时,在url中表示要传递的页索引的参数的名称。
 799        /// </summary>
 800        /// <remarks>
 801        /// 该属性允许您自定义通过Url传递页索引时表示要传递的页索引的参数的名称,以避免与现有的参数名重复。
 802        /// <p>该属性的默认值是“page”,即通过Url分页时,显示在浏览器地址栏中的Url类似于:</p>http://www.webdiyer.com/aspnetpager/samples/datagrid_url.aspx?pagesize=20 
 803        /// <p>如将该值改为“pagesize1”,则上面的Url将变为:</p><p>http://www.webdiyer.com/aspnetpager/samples/datagrid_url.aspx?pagesize1=20 </p>
 804        /// </remarks>

 805        [Browsable(true),
 806        DefaultValue("pagesize"),
 807        Category("分页"),
 808        Description("当启用Url分页方式时,显示在url中表示要传递的记录数的参数的名称")]
 809        public string UrlPageSize
 810        {
 811            get{return urlPageSize;}
 812            set{urlPageSize=value;}
 813        }

 814
 815        /// <summary>
 816        /// 获取或设置当前显示页的索引。
 817        /// </summary>
 818        ///<remarks>使用此属性来确定在 AspNetPager 控件中当前显示的页,当前显示的页的数字索引将以红色字体加粗显示。此属性还用于以编程的方式控制所显示的页。
 819        ///<p> <b>注意:</b>不同于DataGrid控件的CurrentPageIndex,AspNetPager的CurrentPageIndex属性是从1开始的。</p></remarks>

 820        [ReadOnly(true),
 821        Browsable(false),
 822        Description("当前显示页的索引"),
 823        Category("分页"),
 824        DefaultValue(1),
 825        DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 826        public int  CurrentPageIndex
 827        {
 828            get
 829            {
 830                object cpage=ViewState["CurrentPageIndex"];
 831                int pindex=(cpage==null)?1:(int)cpage;
 832                if(pindex>PageCount&&PageCount>0)
 833                    return PageCount;
 834                else if(pindex<1)
 835                    return 1;
 836                return pindex;
 837            }

 838            set
 839            {
 840                int cpage=value;
 841                if(cpage<1)
 842                    cpage=1;
 843                else if(cpage>this.PageCount)
 844                    cpage=this.PageCount;
 845                ViewState["CurrentPageIndex"]=cpage;
 846            }

 847        }

 848
 849        /// <summary>
 850        /// 获取或设置需要分页的所有记录的总数。
 851        /// </summary>
 852        /// <remarks>
 853        /// 当页面第一次加载时,应以编程方式将从存储过程或Sql语句中返回的数据表中所有要分页的记录的总数赋予该属性,AspNetPager会将其保存的ViewState中并在页面回发时从ViewState中获取该值,因此避免了每次分页都要访问数据库而影响分页性能。AspNetPager根据要分页的所有数据的总项数和 <see cref="PageSize"/> 属性来计算显示所有数据需要的总页数,即 <see cref="PageCount"/>的值。
 854        /// </remarks>
 855        /// <example>
 856        /// 下面的示例显示如何以编程方式将从Sql语句返回的记录总数赋给该属性:
 857        /// <p>
 858        /// <code><![CDATA[
 859        /// <HTML>
 860        /// <HEAD>
 861        /// <TITLE>Welcome to Webdiyer.com </TITLE>
 862        /// <script runat="server">
 863        ///        SqlConnection conn;
 864        ///        SqlCommand cmd;
 865        ///        void Page_Load(object src,EventArgs e)
 866        ///        {
 867        ///            conn=new SqlConnection(ConfigurationSettings.AppSettings["ConnStr"]);
 868        ///            if(!Page.IsPostBack)
 869        ///            {
 870        ///                cmd=new SqlCommand("select count(id) from news",conn);
 871        ///                conn.Open();
 872        ///                pager.RecordCount=(int)cmd.ExecuteScalar();
 873        ///                conn.Close();
 874        ///                BindData();
 875        ///            }
 876        ///        }
 877        ///
 878        ///        void BindData()
 879        ///        {
 880        ///            cmd=new SqlCommand("GetPagedNews",conn);
 881        ///            cmd.CommandType=CommandType.StoredProcedure;
 882        ///            cmd.Parameters.Add("@pageindex",pager.CurrentPageIndex);
 883        ///            cmd.Parameters.Add("@pagesize",pager.PageSize);
 884        ///            conn.Open();
 885        ///            dataGrid1.DataSource=cmd.ExecuteReader();
 886        ///            dataGrid1.DataBind();
 887        ///            conn.Close();
 888        ///        }
 889        ///        void ChangePage(object src,PageChangedEventArgs e)
 890        ///        {
 891        ///            pager.CurrentPageIndex=e.NewPageIndex;
 892        ///            BindData();
 893        ///        }
 894        ///        </script>
 895        ///        <meta http-equiv="Content-Language" content="zh-cn">
 896        ///        <meta http-equiv="content-type" content="text/html;charset=gb2312">
 897        ///        <META NAME="Generator" CONTENT="EditPlus">
 898        ///        <META NAME="Author" CONTENT="Webdiyer(yhaili@21cn.com)">
 899        ///    </HEAD>
 900        ///    <body>
 901        ///        <form runat="server" ID="Form1">
 902        ///            <asp:DataGrid id="dataGrid1" runat="server" />
 903        ///
 904        ///            <Webdiyer:AspNetPager id="pager" runat="server" 
 905        ///            PageSize="8" 
 906        ///            NumericButtonCount="8" 
 907        ///            ShowCustomInfoSection="before" 
 908        ///            ShowInputBox="always" 
 909        ///            CssClass="mypager" 
 910        ///            HorizontalAlign="center" 
 911        ///            OnPageChanged="ChangePage" />
 912        ///
 913        ///        </form>
 914        ///    </body>
 915        ///</HTML>
 916        /// ]]>
 917        /// </code></p>
 918        /// <p>本示例使用的存储过程代码如下:</p>
 919        /// <code><![CDATA[
 920        ///CREATE procedure GetPagedNews
 921        ///        (@pagesize int,
 922        ///        @pageindex int)
 923        ///        as
 924        ///        set nocount on
 925        ///        declare @indextable table(id int identity(1,1),nid int)
 926        ///        declare @PageLowerBound int
 927        ///        declare @PageUpperBound int
 928        ///        set @PageLowerBound=(@pageindex-1)*@pagesize
 929        ///        set @PageUpperBound=@PageLowerBound+@pagesize
 930        ///        set rowcount @PageUpperBound
 931        ///        insert into @indextable(nid) select id from news order by addtime desc
 932        ///        select O.id,O.title,O.source,O.addtime from news O,@indextable t where O.id=t.nid
 933        ///        and t.id>@PageLowerBound and t.id<=@PageUpperBound order by t.id
 934        ///        set nocount off
 935        ///GO
 936        /// ]]>
 937        /// </code>
 938        /// </example>

 939        [Browsable(false),
 940        Description("要分页的所有记录的总数,该值须在程序运行时设置,默认值为225是为设计时支持而设置的参照值。"),
 941        Category("Data"),
 942        DefaultValue(225)]
 943        public int RecordCount
 944        {
 945            get
 946            {
 947                object obj=ViewState["Recordcount"];
 948                return (obj==null)?0:(int)obj;
 949            }

 950            set{ViewState["Recordcount"]=value;}
 951        }

 952
 953        /// <summary>
 954        /// 获取当前页之后未显示的页的总数。
 955        /// </summary>

 956        [Browsable(false),
 957        DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 958        public int PagesRemain
 959        {
 960            get
 961            {
 962                return PageCount-CurrentPageIndex;
 963            }

 964        }

 965        
 966        /// <summary>
 967        /// 获取或设置每页显示的项数。
 968        /// </summary>
 969        /// <remarks>
 970        /// 该值获取或设置数据呈现控件每次要显示数据表中的的数据的项数,AspNetPager根据该值和 <see cref="RecordCount"/> 来计算显示所有数据需要的总页数,即 <see cref="PageCount"/>的值。</remarks>
 971        /// <example>以下示例将 <see cref="AspNetPager"/> 设置为允许每页显示8条数据:
 972        /// <code>
 973        /// <![CDATA[
 974        ///  
 975        ///  <Webdiyer:AspNetPager id="pager" runat="server" PageSize=8 OnPageChanged="ChangePage"/>
 976        ///  
 977        /// ]]></code></example>

 978        [Browsable(true),
 979        Description("每页显示的记录数"),
 980        Category("分页"),
 981        DefaultValue(10)]
 982        public int PageSize
 983        {
 984            get
 985            {
 986                object obj=ViewState["PageSize"];
 987                return (obj==null)?10:(int)obj;
 988            }

 989            set
 990            {
 991                ViewState["PageSize"]=value;
 992            }

 993        }

 994        
 995        /// <summary>
 996        /// 获取在当前页之后还未显示的剩余记录的项数。
 997        /// </summary>

 998        [Browsable(false),
 999        DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
1000        public int RecordsRemain
1001        {
1002            get
1003            {
1004                if(CurrentPageIndex<PageCount)
1005                    return RecordCount-(CurrentPageIndex*PageSize);
1006                return 0;}

1007        }

1008
1009
1010        /// <summary>
1011        /// 获取所有要分页的记录需要的总页数。
1012        /// </summary>

1013        [Browsable(false),
1014        DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
1015        public int PageCount
1016        {
1017            get{return (int)Math.Ceiling((double)RecordCount/(double)PageSize);}
1018        }

1019
1020        
1021        #endregion

1022
1023        #region TextBox and Submit Button
1024
1025        /// <summary>
1026        /// 获取或设置页索引文本框的显示方式。
1027        /// </summary>
1028        /// <remarks>
1029        /// 页索引文件框允许用户手式输入要访问的页的索引,当页数非常多时,显示页索引文本框非常方便用户跳转到指定的页,默认情况下,该文本框只有在总页数大于或等于 <see cref="ShowBoxThreshold"/> 的值时才显示,否则不显示,要想该文本框任何时候都显示,请将其值设为Always,若希望任何时候都不显示,则应设为Never。
1030        ///</remarks>

1031        [Browsable(true),
1032        Description("指定页索引文本框的显示方式"),
1033        Category("文本框及提交按钮"),
1034        DefaultValue(ShowInputBox.Auto)]
1035        public ShowInputBox ShowInputBox
1036        {
1037            get
1038            {
1039                object obj=ViewState["ShowInputBox"];
1040                return (obj==null)?ShowInputBox.Auto:(ShowInputBox)obj;
1041            }

1042            set{ViewState["ShowInputBox"]=value;}
1043        }

1044        
1045        /// <summary>
1046        /// 获取或设置应用于页索引输入文本框的CSS类名。
1047        /// </summary>

1048        [Browsable(true),
1049        Category("文本框及提交按钮"),
1050        DefaultValue(null),
1051        Description("应用于页索引输入文本框的CSS类名")]
1052        public string InputBoxClass
1053        {
1054            get
1055            {
1056                return (string)ViewState["InputBoxClass"];
1057            }

1058            set
1059            {
1060                if(value.Trim().Length>0)
1061                    ViewState["InputBoxClass"]=value;
1062            }

1063        }

1064
1065        /// <summary>
1066        /// 获取或设置页索引输入文本框的CSS样式文本。
1067        /// </summary>

1068
1069        [Browsable(true),
1070        Category("文本框及提交按钮"),
1071        DefaultValue(null),
1072        Description("应用于页索引输入文本框的CSS样式文本")]
1073        public string InputBoxStyle
1074        {
1075            get
1076            {
1077                return (string)ViewState["InputBoxStyle"];
1078            }

1079            set
1080            {
1081                if(value.Trim().Length>0)
1082                    ViewState["InputBoxStyle"]=value;
1083            }

1084        }

1085
1086        /// <summary>
1087        /// 获取或设置页索引页索引输入文本框前的文本字符串值。
1088        /// </summary>

1089        [Browsable(true),
1090        Category("文本框及提交按钮"),
1091        DefaultValue(null),
1092        Description("页索引输入文本框前的文本内容字符串")]
1093        public string TextBeforeInputBox
1094        {
1095            get
1096            {
1097                return (string)ViewState["TextBeforeInputBox"];
1098            }

1099            set
1100            {
1101                ViewState["TextBeforeInputBox"]=value;
1102            }

1103        }

1104
1105        /// <summary>
1106        /// 获取或设置页索引文本输入框后的文本内容字符串值。
1107        /// </summary>

1108        [Browsable(true),
1109        DefaultValue(null),
1110        Category("文本框及提交按钮"),
1111        Description("页索引输入文本框后的文本内容字符串")]
1112        public string TextAfterInputBox
1113        {
1114            get
1115            {
1116                return (string)ViewState["TextAfterInputBox"];
1117            }

1118            set
1119            {
1120                ViewState["TextAfterInputBox"]=value;
1121            }

1122        }

1123        
1124
1125        /// <summary>
1126        /// 获取或设置提交按钮上的文本。
1127        /// </summary>

1128        [Browsable(true),
1129        Category("文本框及提交按钮"),
1130        DefaultValue("go"),
1131        Description("提交按钮上的文本")]
1132        public string SubmitButtonText
1133        {
1134            get
1135            {
1136                object obj=ViewState["SubmitButtonText"];
1137                return (obj==null)?"go":(string)obj;
1138            }

1139            set
1140            {
1141                if(value.Trim().Length>0)
1142                    ViewState["SubmitButtonText"]=value;
1143            }

1144        }

1145        /// <summary>
1146        /// 获取或设置应用于提交按钮的CSS类名。
1147        /// </summary>

1148        [Browsable(true),
1149        Category("文本框及提交按钮"),
1150        DefaultValue(null),
1151        Description("应用于提交按钮的CSS类名")]
1152        public string SubmitButtonClass
1153        {
1154            get
1155            {
1156                return (string)ViewState["SubmitButtonClass"];
1157            }

1158            set
1159            {
1160                ViewState["SubmitButtonClass"]=value;
1161            }

1162        }

1163
1164        /// <summary>
1165        /// 获取或设置应用于提交按钮的CSS样式。
1166        /// </summary>

1167        [Browsable(true),
1168        Category("文本框及提交按钮"),
1169        DefaultValue(null),
1170        Description("应用于提交按钮的CSS样式")]
1171        public string SubmitButtonStyle
1172        {
1173            get
1174            {
1175                return (string)ViewState["SubmitButtonStyle"];
1176            }

1177            set
1178            {
1179                ViewState["SubmitButtonStyle"]=value;
1180            }

1181        }

1182        /// <summary>
1183        /// 获取或设置自动显示页索引输入文本框的最低起始页数。
1184        /// </summary>
1185        /// <remarks>
1186        /// 当 <see cref="ShowInputBox"/> 设为Auto(默认)并且要分页的数据的总页数达到该值时会自动显示页索引输入文本框,默认值为30。该选项当 <see cref="ShowInputBox"/> 设为Never或Always时没有任何作用。
1187        /// </remarks>

1188        [Browsable(true),
1189        Description("指定当ShowInputBox设为ShowInputBox.Auto时,当总页数达到多少时才显示页索引输入文本框"),
1190        Category("文本框及提交按钮"),
1191        DefaultValue(30)]
1192        public int ShowBoxThreshold
1193        {
1194            get
1195            {
1196                object obj=ViewState["ShowBoxThreshold"];
1197                return (obj==null)?30:(int)obj;
1198            }

1199            set{ViewState["ShowBoxThreshold"]=value;}
1200        }

1201
1202
1203        #endregion

1204
1205        #region SelectBox and Submit Button
1206
1207        /// <summary>
1208        /// 获取或设置页索引文本框的显示方式。
1209        /// </summary>
1210        /// <remarks>
1211        /// 页索引文件框允许用户手式输入要访问的页的索引,当页数非常多时,显示页索引文本框非常方便用户跳转到指定的页,默认情况下,该文本框只有在总页数大于或等于 <see cref="ShowBoxThreshold"/> 的值时才显示,否则不显示,要想该文本框任何时候都显示,请将其值设为Always,若希望任何时候都不显示,则应设为Never。
1212        ///</remarks>

1213        [Browsable(true),
1214        Description("指定页索引文本框的显示方式"),
1215        Category("分页记录数选择"),
1216        DefaultValue(ShowInputBox.Auto)]
1217        public ShowInputBox ShowSelectBox
1218        {
1219            get
1220            {
1221                object obj=ViewState["ShowSelectBox"];
1222                return (obj==null)?ShowInputBox.Auto:(ShowInputBox)obj;
1223            }

1224            set{ViewState["ShowSelectBox"]=value;}
1225        }

1226        
1227        /// <summary>
1228        /// 获取或设置应用于页索引输入文本框的CSS类名。
1229        /// </summary>

1230        [Browsable(true),
1231        Category("分页记录数选择"),
1232        DefaultValue(null),
1233        Description("应用于页索引输入文本框的CSS类名")]
1234        public string SelectBoxClass
1235        {
1236            get
1237            {
1238                return (string)ViewState["SelectBoxClass"];
1239            }

1240            set
1241            {
1242                if(value.Trim().Length>0)
1243                    ViewState["SelectBoxClass"]=value;
1244            }

1245        }

1246
1247        /// <summary>
1248        /// 获取或设置页索引输入文本框的CSS样式文本。
1249        /// </summary>

1250
1251        [Browsable(true),
1252        Category("分页记录数选择"),
1253        DefaultValue(null),
1254        Description("应用于页索引输入文本框的CSS样式文本")]
1255        public string SelectBoxStyle
1256        {
1257            get
1258            {
1259                return (string)ViewState["SelectBoxStyle"];
1260            }

1261            set
1262            {
1263                if(value.Trim().Length>0)
1264                    ViewState["SelectBoxStyle"]=value;
1265            }

1266        }

1267
1268        /// <summary>
1269        /// 获取或设置页索引页索引输入文本框前的文本字符串值。
1270        /// </summary>

1271        [Browsable(true),
1272        Category("分页记录数选择"),
1273        DefaultValue("每页"),
1274        Description("页索引输入文本框前的文本内容字符串")]
1275        public string TextBeforeSelectBox
1276        {
1277            get
1278            {
1279                return (string)ViewState["TextBeforeSelectBox"];
1280            }

1281            set
1282            {
1283                ViewState["TextBeforeSelectBox"]=value;
1284            }

1285        }

1286
1287        /// <summary>
1288        /// 获取或设置页索引文本输入框后的文本内容字符串值。
1289        /// </summary>

1290        [Browsable(true),
1291        DefaultValue(""),
1292        Category("分页记录数选择"),
1293        Description("页索引输入文本框后的文本内容字符串")]
1294        public string TextAfterSelectBox
1295        {
1296            get
1297            {
1298                return (string)ViewState["TextAfterSelectBox"];
1299            }

1300            set
1301            {
1302                ViewState["TextAfterSelectBox"]=value;
1303            }

1304        }

1305        
1306
1307        /// <summary>
1308        /// 获取或设置提交按钮上的文本。
1309        /// </summary>

1310        [Browsable(true),
1311        Category("分页记录数选择"),
1312        DefaultValue("设置"),
1313        Description("提交按钮上的文本")]
1314        public string SubmitButtonSelectText
1315        {
1316            get
1317            {
1318                object obj=ViewState["SubmitButtonSelectText"];
1319                return (obj==null)?"设置":(string)obj;
1320            }

1321            set
1322            {
1323                if(value.Trim().Length>0)
1324                    ViewState["SubmitButtonSelectText"]=value;
1325            }

1326        }

1327        /// <summary>
1328        /// 获取或设置自动显示页索引输入文本框的最低起始页数。
1329        /// </summary>
1330        /// <remarks>
1331        /// 当 <see cref="ShowInputBox"/> 设为Auto(默认)并且要分页的数据的总页数达到该值时会自动显示页索引输入文本框,默认值为30。该选项当 <see cref="ShowInputBox"/> 设为Never或Always时没有任何作用。
1332        /// </remarks>

1333        [Browsable(true),
1334        Description("指定当ShowInputBox设为ShowInputBox.Auto时,当总页数达到多少时才显示页索引输入文本框"),
1335        Category("分页记录数选择"),
1336        DefaultValue(30)]
1337        public int ShowSelectBoxThreshold
1338        {
1339            get
1340            {
1341                object obj=ViewState["ShowSelectBoxThreshold"];
1342                return (obj==null)?30:(int)obj;
1343            }

1344            set{ViewState["ShowSelectBoxThreshold"]=value;}
1345        }

1346
1347
1348        #endregion

1349
1350        #region CustomInfoSection
1351
1352        /// <summary>
1353        /// 获取或设置显示用户自定义信息区的方式。
1354        /// </summary>
1355        /// <remarks>
1356        /// 该属性值设为Left或Right时会在分页导航元素左边或右边划出一个专门的区域来显示有关用户自定义信息,设为Never时不显示。
1357        /// </remarks>

1358        [Browsable(true),
1359        Description("显示当前页和总页数信息,默认值为不显示,值为ShowCustomInfoSection.Left时将显示在页索引前,为ShowCustomInfoSection.Right时将显示在页索引后"),
1360        DefaultValue(ShowCustomInfoSection.Never),
1361        Category("自定义信息区")]
1362        public ShowCustomInfoSection ShowCustomInfoSection
1363        {
1364            get
1365            {
1366                object obj=ViewState["ShowCustomInfoSection"];
1367                return (obj==null)?ShowCustomInfoSection.Never:(ShowCustomInfoSection)obj;
1368            }

1369            set{ViewState["ShowCustomInfoSection"]=value;}
1370        }

1371
1372        /// <summary>
1373        /// 获取或设置用户自定义信息区文本的对齐方式。
1374        /// </summary>

1375        [Browsable(true),
1376        Category("自定义信息区"),
1377        DefaultValue(HorizontalAlign.Left),
1378        Description("用户自定义信息区文本的对齐方式")]
1379        public HorizontalAlign CustomInfoTextAlign
1380        {
1381            get
1382            {
1383                object obj=ViewState["CustomInfoTextAlign"];
1384                return (obj==null)?HorizontalAlign.Left:(HorizontalAlign)obj;
1385            }

1386            set
1387            {
1388                ViewState["CustomInfoTextAlign"]=value;
1389            }

1390        }

1391
1392        /// <summary>
1393        /// 获取或设置用户自定义信息区的宽度。
1394        /// </summary>

1395        [Browsable(true),
1396        Category("自定义信息区"),
1397        DefaultValue(typeof(Unit),"40%"),
1398        Description("用户自定义信息区的宽度")]
1399        public Unit CustomInfoSectionWidth
1400        {
1401            get
1402            {
1403                object obj=ViewState["CustomInfoSectionWidth"];
1404                return (obj==null)?Unit.Percentage(40):(Unit)obj;
1405            }

1406            set
1407            {
1408                ViewState["CustomInfoSectionWidth"]=value;
1409            }

1410        }

1411
1523        [Browsable(false),
2601
2608        /// 使用文字按钮。
posted @ 2005-06-11 10:18  小草  阅读(4069)  评论(2编辑  收藏  举报
Google+