小 牛

博客园 首页 新随笔 联系 订阅 管理

namespace JRDEMS.Web.WebPages
{
      using System;
      using System.Data;
      using System.Drawing;
      using System.Web;
      using System.ComponentModel ;
      using System.Web.UI.WebControls;
      using System.Web.UI.HtmlControls;

      /// <summary>
      ///            Summary description for PageList.
      /// </summary>
      public class PageList : System.Web.UI.UserControl
      {
            protected System.Web.UI.WebControls.Label labPages;
            protected System.Web.UI.WebControls.ImageButton ImageButton1;
            protected System.Web.UI.WebControls.ImageButton imgGo;
            protected System.Web.UI.WebControls.ImageButton imagPrevPage;
            protected System.Web.UI.WebControls.ImageButton imagNextPage;
            protected System.Web.UI.WebControls.ImageButton imagLastPage;
            protected System.Web.UI.WebControls.ImageButton imagFirstPage;
            protected System.Web.UI.WebControls.Image Image1;
            protected System.Web.UI.WebControls.TextBox txtCurrentPage;
            public  event System.EventHandler  PageListClick;

            private void Page_Load(object sender, System.EventArgs e)
            {
                  if(!IsPostBack)
                  {
                        SetEnable();
                  }
            }

            #region Web Form Designer generated code
            override protected void OnInit(EventArgs e)
            {
                  //
                  // CODEGEN: This call is required by the ASP.NET Web Form Designer.
                  //
                  InitializeComponent();
                  base.OnInit(e);
            }
           
            /// <summary>
            ///            Required method for Designer support - do not modify
            ///            the contents of this method with the code editor.
            /// </summary>
            private void InitializeComponent()
            {
                  this.imagFirstPage.Click += new System.Web.UI.ImageClickEventHandler(this.PageList_Click);
                  this.imagPrevPage.Click += new System.Web.UI.ImageClickEventHandler(this.PageList_Click);
                  this.imagNextPage.Click += new System.Web.UI.ImageClickEventHandler(this.PageList_Click);
                  this.imagLastPage.Click += new System.Web.UI.ImageClickEventHandler(this.PageList_Click);
                  this.imgGo.Click += new System.Web.UI.ImageClickEventHandler(this.PageList_Click);
                  this.Load += new System.EventHandler(this.Page_Load);

            }
            #endregion

            private void PageList_Click(object sender, System.Web.UI.ImageClickEventArgs e)
            {
                  ImageButton btn=(System.Web.UI.WebControls.ImageButton)sender;
                  switch(btn.CommandName)
                  {
                        case "First":
                              ViewState["CurrentPageIndex"] = 1;
                              break;
                        case "Prev":
                              ViewState["CurrentPageIndex"] = (CurrentPageIndex > 1) ? CurrentPageIndex - 1 : 1;
                              break;
                        case "Next":
                              ViewState["CurrentPageIndex"] = (PageCount > CurrentPageIndex) ? CurrentPageIndex + 1 : PageCount;
                              break;
                        case "Last":
                              ViewState["CurrentPageIndex"]  = PageCount;
                              break;
                        case "Go":
                              BtnGoClick();
                              break;
                        default:
                              break;
                  }
                  if (PageListClick!=null)
                        PageListClick(this,System.EventArgs.Empty);
                  this.SetEnable();
            }
            private void BtnGoClick()
            {
                  int selPage=-1;
                  try
                  {
                        selPage=int.Parse(this.txtCurrentPage.Text);
                  }
                  catch
                  {
                        selPage=-1;
                  }
                  if(selPage>0 && selPage<=this.PageCount)
                        ViewState["CurrentPageIndex"]  = selPage;
                  else
                        return ;
            }
            private void SetEnable()
            {
                  this.labPages.Text = this.PageCount.ToString()+" TOTAL";
                  this.txtCurrentPage.Text =this.CurrentPageIndex.ToString();
                  if( this.PageCount >1 )
                  {
                        bool flagFP = CurrentPageIndex >1;
                        bool flagNL = CurrentPageIndex < PageCount;
                        if(flagFP==true)
                        {
                              this.imagFirstPage.ImageUrl = "../Images/firstpage_over.gif";
                              this.imagPrevPage.ImageUrl = "../Images/prevpage_over.gif";
                              this.imagFirstPage.Attributes.Remove("disabled");
                              this.imagPrevPage.Attributes.Remove("disabled");
                        }
                        else
                        {
                              this.imagFirstPage.ImageUrl = "../Images/firstpage_down.gif";
                              this.imagPrevPage.ImageUrl = "../Images/prevpage_down.gif";
                              this.imagFirstPage.Attributes.Add("disabled","true");
                              this.imagPrevPage.Attributes.Add("disabled","true");
                        }
                        if(flagNL==true)
                        {
                              this.imagNextPage.ImageUrl = "../Images/nextpage_over.gif";
                              this.imagLastPage.ImageUrl = "../Images/lastpage_over.gif";
                              this.imagNextPage.Attributes.Remove("disabled");
                              this.imagLastPage.Attributes.Remove("disabled");
                        }
                        else
                        {
                              this.imagNextPage.ImageUrl = "../Images/nextpage_down.gif";
                              this.imagLastPage.ImageUrl = "../Images/lastpage_down.gif";
                              this.imagNextPage.Attributes.Add("disabled","true");
                              this.imagLastPage.Attributes.Add("disabled","true");
                        }

                  }
                  else
                  {
                        this.imagFirstPage.Attributes.Add("disabled","true");
                        this.imagPrevPage.Attributes.Add("disabled","true");
                        this.imagNextPage.Attributes.Add("disabled","true");
                        this.imagLastPage.Attributes.Add("disabled","true");
                        this.imagFirstPage.ImageUrl = "../Images/firstpage_down.gif";
                        this.imagPrevPage.ImageUrl = "../Images/prevpage_down.gif";
                        this.imagNextPage.ImageUrl = "../Images/nextpage_down.gif";
                        this.imagLastPage.ImageUrl = "../Images/lastpage_down.gif";
                  }
            }

            #region Property
            /// <summary>
            /// 获取或设置当前显示页的索引。
            /// </summary>
            ///<remarks>This property define the to get current page index, or set the current page to display at running time。
            ///<p> <b>Notes: </b>Different from other index, this page index begins at 1.</p></remarks>
            [DefaultValue(1)]
            public int  CurrentPageIndex
            {
                  get
                  {
                        object cpage=ViewState["CurrentPageIndex"];
                        int pindex=(cpage==null)?1:(int)cpage;
                        if(pindex>PageCount && PageCount>0)
                              return PageCount;
                        else if(pindex<1)
                              return 1;
                        return pindex;
                  }
                  set
                  {
                        int cpage=value;
                        if(cpage<1)
                              cpage=1;
                        else if(cpage>this.PageCount)
                              cpage=this.PageCount;
                        ViewState["CurrentPageIndex"]=cpage;
                        SetEnable();
                  }
            }

 

            /// <summary>
            /// 获取或设置需要分页的所有记录的总数。
            /// </summary>
            /// <remarks>
            /// 当页面第一次加载时,应以编程方式将从存储过程或Sql语句中返回的数据表中所有要分页的记录的总数赋予该属性,UCListNavigation会将其保存的ViewState中并在页面回发时从ViewState中获取该值,因此避免了每次分页都要访问数据库而影响分页性能。UCListNavigation根据要分页的所有数据的总项数和 <see cref="PageSize"/> 属性来计算显示所有数据需要的总页数,即 <see cref="PageCount"/>的值。
            /// </remarks>
            [DefaultValue(255)]
            public int RecordCount
            {
                  get
                  {
                        object obj=ViewState["Recordcount"];
                        return (obj==null)?0:(int)obj;
                  }
                  set
                  {
                        ViewState["Recordcount"]=value;
                        SetEnable();
                  }
            }

            /// <summary>
            /// 获取或设置每页显示的项数。
            /// </summary>
            /// <remarks>
            /// 该值获取或设置数据呈现控件每次要显示数据表中的的数据的项数,根据该值和 <see cref="RecordCount"/> 来计算显示所有数据需要的总页数,即 <see cref="PageCount"/>的值。</remarks>
            /// <example>以下示例将 <see cref="UCListNavigation"/> 设置为允许每页显示8条数据:
            /// <code>
            /// <![CDATA[
            ///  ...
            ///  <Webdiyer:UCListNavigation id="pager" runat="server" PageSize=10 OnPageChanged="ChangePage"/>
            ///  ...
            /// ]]></code></example>
            [DefaultValue(20)]
            public int PageSize
            {
                  get
                  {
                 
                        object obj=ViewState["PageSize"];
                        if (obj==null)
                        {
                              obj=20;
                        }
                       
                        return (obj==null)?20:(int)obj;
                  }
                  set
                  {
                        int pageSize = value;
                       
                        if (Math.Abs(pageSize) == 0)
                              pageSize = 20;

                        ViewState["PageSize"]=pageSize;

                        SetEnable();
                  }
            }


            /// <summary>
            /// 获取所有要分页的记录需要的总页数。
            /// </summary>
            [DefaultValue(1)]
            public int PageCount
            {
                  get{return (RecordCount > 0) ? (int)Math.Ceiling((double)RecordCount/(double)PageSize) : 1;}
            }
            #endregion Property
      }
}

posted on 2006-08-07 08:48  csu02  阅读(454)  评论(0编辑  收藏  举报