zoukankan      html  css  js  c++  java
  • 今天增强了一下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;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        /// 使用文字按钮。
  • 相关阅读:
    github设置添加SSH
    解决方案 git@github.com出现Permission denied (publickey)
    Shell 获取进程号 规格严格
    转线程堆栈获取 规格严格
    NTP搭建(原创) 规格严格
    Ntp完整说明(转载) 规格严格
    JavaAgent(转载) 规格严格
    Location of javaagent jar in bootclasspath 规格严格
    Manifest(转) 规格严格
    分析一下shell(转) 规格严格
  • 原文地址:https://www.cnblogs.com/liubiqu/p/172427.html
Copyright © 2011-2022 走看看