一個不錯的分頁控件

 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Frame.Component
{
    [Serializable]
    public class PageArgs : EventArgs
    {
        public PageArgs()
        {
        }

        private int _curPage;
        public int CurPage
        {
            get
            {
                return _curPage;
            }
            set
            {
                _curPage = value;
            }
        }
    }
    public delegate void EventPageIndex(Object sender, PageArgs e);

    [DefaultProperty("RecordCount")]
    [ToolboxData("<{0}:Pager runat=server></{0}:Pager>")]
    public class Pager : WebControl, IPostBackEventHandler
    {

        #region 事件
        public event EventPageIndex PageChange;  //頁更改事件

        public virtual void OnPageChange(Object sender, PageArgs e)
        {
            if (PageChange != null)
            {
                PageChange(this, e);
            }

        }

        public void RaisePostBackEvent(string eventArgument)
        {
            this.CurPage = Int32.Parse(System.Web.HttpContext.Current.Request.Form[this.UniqueID].ToString());
            PageArgs e = new PageArgs();
            e.CurPage = CurPage;
            OnPageChange(this, e);
        }
        #endregion 事件

        #region 私有屬性
        /// <summary>
        /// 當前頁
        /// </summary>
        private int CurPage
        {
            get
            {
                return (ViewState["CurPage"] == null) ? 1 : (int)ViewState["CurPage"];
            }
            set
            {
                ViewState["CurPage"] = value;
            }

        }

        /// <summary>
        /// 總頁數
        /// </summary>
        private int PageCount
        {
            get
            {
                int _pageCount = 0;
                if ((RecordCount % PageSize) == 0)
                {
                    _pageCount = RecordCount / PageSize;
                }
                else
                {
                    _pageCount = RecordCount / PageSize + 1;
                }
                return _pageCount;
            }
        }

        #endregion 私有屬性

        #region 公有屬性

        /// <summary>
        /// 記錄數
        /// </summary>
        [Bindable(true)]
        [Category("Appearance")]
        [DefaultValue("")]
        [Localizable(true)]
        public int RecordCount
        {
            get
            {
                return (ViewState["RecordCount"] == null) ? 0 : (int)(ViewState["RecordCount"]);
            }

            set
            {

                ViewState["RecordCount"] = value;
            }
        }

        /// <summary>
        /// 頁包含記錄數
        /// </summary>
        [Bindable(true)]
        [Category("Appearance")]
        [DefaultValue("")]
        [Localizable(true)]
        public int PageSize
        {
            get
            {
                return (ViewState["PageSize"] == null) ? 1 : (int)(ViewState["PageSize"]);
            }

            set
            {
                //EnsureChildControls();
                ViewState["PageSize"] = value;
            }
        }

        #endregion 公有屬性

        #region 方法


        protected override void OnPreRender(EventArgs e)
        {
            base.OnPreRender(e);
            string dopost = "<div>/n";
            dopost += "   <input type=/"hidden/" name=/"" + this.UniqueID + "/" id=/"__EVENTTARGET/" value=/"/" />/n";
            dopost += "</div>/n";
            dopost += "<script type=text/javascript>/n";
            dopost += "      function _doPost(cutomArg){/n";
            dopost += "          document.forms['form1']." + this.UniqueID + ".value = cutomArg;/n";
            dopost += "          document.forms['form1'].submit();/n";
            dopost += "      }/n";
            dopost += "</script>/n";
            if (!Page.ClientScript.IsClientScriptIncludeRegistered(this.GetType(), "_doPost"))
            {
                Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "_doPost", dopost);
            }
        }
        protected override void RenderContents(HtmlTextWriter writer)
        {
            writer.Write("<div class=/"/">/n");
            writer.Write("記錄數:");
            writer.Write(RecordCount);
            writer.Write("&#32;總頁數:");
            writer.Write(PageCount + "&#32;");
            if (CurPage != 1)
            {
                writer.Write("<a href=/"javascript:_doPost('" + (CurPage - 1) + "')/">上一頁</a>/n&#32;");
            }
            for (int i = 1; i <= PageCount; i++)
            {
                if (i == CurPage)
                {
                    writer.Write("<a href=/"javascript:_doPost('" + i + "')/">" + i + "</a>/n&#32;");
                }
                else
                {
                    writer.Write("<a href=/"javascript:_doPost('" + i + "')/">[" + i + "]</a>/n&#32;");
                }
            }
            if (CurPage != PageCount)
            {
                writer.Write("<a href=/"javascript:_doPost('" + (CurPage + 1) + "')/">下一頁</a>/n");
            }
            writer.Write("</div>/n");
        }
        #endregion 方法
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章