DEVPAGE

DEVPAGE
   1 // AspNetPager分页控件源代码:
   2 // 版权所有:陕西省吴旗县 Webdiyer([email protected])(Web site: www.webdiyer.com);
   3 // 此源代码仅供学习参考,不得用作任何商业用途;
   4 // 若需修改并重新编译该控件,请保留完整的源代码的版权信息!
   5 // 有关控件升级及新控件发布信息,请留意 www.webdiyer.com 。
   6 // 版本4.3.3
   7 // 增强版 (修改自4.3.3版本)
   8 // 描述:增加了可自定义每页的记录数。
   9 // modify by liubiqu([email protected]) [ http://www.cnblogs.com/liubiqu ]
  10 // DateTime: 2005-06-10
  11
  12 using  System;
  13 using  System.Collections;
  14 using  System.Collections.Specialized;
  15 using  System.ComponentModel;
  16 using  System.IO;
  17 using  System.Text;
  18 using  System.Web.UI;
  19 using  System.Web.UI.Design.WebControls;
  20 using  System.Web.UI.WebControls;
  21
  22 namespace  EOffice.Components
  23 {
  24      AspNetPager Server Control #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([email protected])">
  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          Properties #region  Properties
 162
 163          Navigation Buttons #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          Image Buttons #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          Paging #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([email protected])">
 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([email protected])">
 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          TextBox and Submit Button #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          SelectBox and Submit Button #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          CustomInfoSection #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          ///  使用文字按钮。

你可能感兴趣的:(DEVPAGE)