没有花香/没有树高

用你的激情燃烧它,明年它会更好......

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
    分页控件有页面选择10 20 50显示,跳转到第几页,上页,下页功能。如图

代码为:
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;

namespace CommModules.UI
{
    /// <summary>
    /// 分页控件,页面选择10 20 50显示,跳转到第几页,上页下页.
    /// </summary>
    class ctrlPagination : Label, INamingContainer
    {
        #region "定义包含控件名称"
        /// <summary>
        /// 每页显示10条记录
        /// </summary>
        public Button TenButton;
        /// <summary>
        /// 每页显示20条记录
        /// </summary>
        public Button TwentyButton;
        /// <summary>
        /// 每页显示50条记录
        /// </summary>
        public Button FiftyButton;
        /// <summary>
        /// 上一页 带连接(有上一页)
        /// </summary>
        public LinkButton previousButton;
        /// <summary>
        /// 下一页 带连接(有下一页)
        /// </summary>
        public LinkButton nextButton;
        /// <summary>
        /// 上一页 不带连接(无上一页)
        /// </summary>
        public Literal previousLabel;
        /// <summary>
        /// 下一页 不带连接(无有下一页)
        /// </summary>
        public Literal nextLabel;
        /// <summary>
        /// "每页显示"说明,在10butten前
        /// </summary>
        public Literal TenLabel;
        /// <summary>
        /// 错误提示暂时不使用
        /// </summary>
        public Label litError;
        /// <summary>
        /// 跳转到第几页的页码输入框
        /// </summary>
        public TextBox txtGO;
        /// <summary>
        /// 跳转button
        /// </summary>
        public Button lbtnGO;
        #endregion

        #region "页面重写函数"

        /// <summary>
        /// 重写 提供使 ASP.NET 服务器控件能够维护其子控件列表的集合容器
        /// </summary>
        ///
        public override ControlCollection Controls
        {
            get
            {
                return base.Controls;
            }
        }

        /// <summary>
        /// 创建子控件
        /// </summary>
        protected override void CreateChildControls()
        {
            Controls.Clear();
            //定义显示控件
            AddControls();
        }

        /// <summary>
        /// 呈现控件到页面上
        /// </summary>
        /// <param name="writer"></param>
        protected override void Render(HtmlTextWriter writer)
        {
            int totalPages = CalculateTotalPages();

            AddAttributesToRender(writer);
            writer.AddAttribute(HtmlTextWriterAttribute.Class, this.CssClass, false);
            TenLabel = new Literal();
            TenLabel.ID = "lblTenStart";
            if (!IsEN)
            {
                TenLabel.Text = "每页显示&nbsp;";
            }
            else
            {
                TenLabel.Text = "Every Page:&nbsp;";
            }
            TenLabel.RenderControl(writer);

            TenButton.RenderControl(writer);

            TenLabel = new Literal();
            TenLabel.ID = "lblTenEnd";
            TenLabel.Text = "&nbsp;&nbsp;";
            TenLabel.RenderControl(writer);

            TwentyButton.RenderControl(writer);

            TenLabel = new Literal();
            TenLabel.ID = "nbsp2";
            TenLabel.Text = "&nbsp;&nbsp;";
            TenLabel.RenderControl(writer);

            FiftyButton.RenderControl(writer);

            TenLabel = new Literal();
            TenLabel.ID = "nbsp4";
            //int intStartRecord=1;
            //int intEndRecord=10;
            //intStartRecord=Convert.ToInt32(PageIndex ) * PageSize + 1;
            //intEndRecord=Convert.ToInt32(PageIndex ) * PageSize+PageSize;
            //if (intEndRecord > TotalRecords)
            //{
            //    intEndRecord = TotalRecords;
            //}
            //string strStartRow = "0";
            //if (TotalRecords > 0)
            //{
            //    strStartRow = intStartRecord.ToString();
            //}
            if (IsEN)
            {
                TenLabel.Text = "&nbsp;&nbsp;Total Records: " + TotalRecords.ToString() + " ";//, Current Records <strong>" + strStartRow + "</strong>~<strong>" + intEndRecord.ToString() + "</strong> ";
            }
            else
            {
                TenLabel.Text = "条  共 <strong>" + TotalRecords.ToString() + "</strong> 条";//,当前是第 <strong>" + strStartRow + "</strong>~<strong>" + intEndRecord.ToString() + "</strong> 条 ";
            }

            TenLabel.RenderControl(writer);

            TenLabel = new Literal();
            TenLabel.ID = "nbsp3";
            TenLabel.Text = "&nbsp;&nbsp;";
            TenLabel.RenderControl(writer);
            //上一页
            if (HasPrevious)
            {
                previousButton.RenderControl(writer);
            }
            else
            {
                if (IsEN)
                {
                    previousLabel = new Literal();
                    previousLabel.ID = "Previous";
                    previousLabel.Text = "<span>" + this.Previous + "</span>";
                    previousLabel.RenderControl(writer);
                }
                else
                {
                    previousLabel = new Literal();
                    previousLabel.ID = "上 页";
                    previousLabel.Text = "<span>" + this.Previous + "</span>";
                    previousLabel.RenderControl(writer);
                }
            }
            // 第 1/ 1 页
            TenLabel = new Literal();
            TenLabel.ID = "nbsp4";

            string strStartPage = "0";
            if (TotalRecords > 0)
            {
                strStartPage = Convert.ToInt32(PageIndex + 1).ToString();
            }

            if (IsEN)
            {
                TenLabel.Text = "  <strong>" + strStartPage + "</strong>/ <strong>" + CalculateTotalPages().ToString() + "</strong> ";
            }
            else
            {
                TenLabel.Text = " 第 <strong>" + strStartPage + "</strong>/ <strong>" + CalculateTotalPages().ToString() + " </strong>页 ";
            }
            TenLabel.RenderControl(writer);
            //下一页
            if (HasNext)
            {
                nextButton.Text = this.Next;
                nextButton.RenderControl(writer);
            }
            else
            {
                if (IsEN)
                {
                    nextLabel = new Literal();
                    nextLabel.ID = "Next";
                    nextLabel.Text = "<span>" + this.Next + "</span>";
                    nextLabel.RenderControl(writer);
                }
                else
                {
                    nextLabel = new Literal();
                    nextLabel.ID = "下 页";
                    nextLabel.Text = "<span>" + this.Next + "</span>";
                    nextLabel.RenderControl(writer);
                }
            }
            //转到  页 GO
            TenLabel = new Literal();
            TenLabel.ID = "nbsp5";
            if (IsEN)
            {
                TenLabel.Text = "&nbsp;&nbsp;Goto ";
            }
            else
            {
                TenLabel.Text = "&nbsp;&nbsp;跳转";
            }
            TenLabel.RenderControl(writer);
            if (TotalRecords > 0)
            {
                int intGo = PageIndex + 1;
                txtGO.Text = intGo.ToString();
            }
            txtGO.RenderControl(writer);

            TenLabel = new Literal();
            TenLabel.ID = "nbsp5";
            if (IsEN)
            {
                TenLabel.Text = "";
            }
            else
            {
                TenLabel.Text = "页";
            }
            TenLabel.RenderControl(writer);

            litError = new Label();
            litError.ForeColor = System.Drawing.Color.Red;
            litError.RenderControl(writer);

            lbtnGO.RenderControl(writer);
        }

        #endregion

        /// <summary>
        /// 设置分页控件中子控件的样式
        /// </summary>
        private void PageSizeStyle()
        {
            if (PageSize == 10)
            {
                TenButton.BackColor = System.Drawing.Color.LightSkyBlue;
                FiftyButton.BackColor = System.Drawing.Color.White;
                TwentyButton.BackColor = System.Drawing.Color.White;

                TenButton.ForeColor = System.Drawing.Color.White;
                FiftyButton.ForeColor = System.Drawing.Color.Black;
                TwentyButton.ForeColor = System.Drawing.Color.Black;
            }
            if (PageSize == 20)
            {
                TwentyButton.BackColor = System.Drawing.Color.LightSkyBlue;
                FiftyButton.BackColor = System.Drawing.Color.White;
                TenButton.BackColor = System.Drawing.Color.White;

                TwentyButton.ForeColor = System.Drawing.Color.White;
                FiftyButton.ForeColor = System.Drawing.Color.Black;
                TenButton.ForeColor = System.Drawing.Color.Black;

            }
            if (PageSize == 50)
            {
                FiftyButton.BackColor = System.Drawing.Color.LightSkyBlue;
                TenButton.BackColor = System.Drawing.Color.White;
                TwentyButton.BackColor = System.Drawing.Color.White;

                FiftyButton.ForeColor = System.Drawing.Color.White;
                TenButton.ForeColor = System.Drawing.Color.Black;
                TwentyButton.ForeColor = System.Drawing.Color.Black;

            }
        }

        #region "实例定义的控件"
        /// <summary>
        /// 实例化分页控件的子控件
        /// </summary>
        void AddControls()
        {
            TenButton = new Button();
            TenButton.ID = "TenButton";
            TenButton.Text = "10";
            TenButton.ToolTip = "10";
            TenButton.CommandArgument = "10";
            TenButton.Width = 22;
            TenButton.Height = 20;
            TenButton.BorderColor = System.Drawing.Color.LightSkyBlue;
            TenButton.BorderStyle = BorderStyle.Solid;
            TenButton.BorderWidth = 1;

            TenButton.Click += new System.EventHandler(RecordsChanged_Click);
            Controls.Add(TenButton);


            TwentyButton = new Button();
            TwentyButton.ID = "TwentyButton";
            TwentyButton.Text = "20";
            TwentyButton.ToolTip = "20";
            TwentyButton.CommandArgument = "20";
            TwentyButton.Width = 22;
            TwentyButton.Height = 20;
            TwentyButton.BorderColor = System.Drawing.Color.LightSkyBlue;
            TwentyButton.BorderStyle = BorderStyle.Solid;
            TwentyButton.BorderWidth = 1;

            TwentyButton.Click += new System.EventHandler(RecordsChanged_Click);
            Controls.Add(TwentyButton);


            FiftyButton = new Button();
            FiftyButton.ID = "FiftyButton";
            FiftyButton.Text = "50";
            FiftyButton.ToolTip = "50";
            FiftyButton.CommandArgument = "50";
            FiftyButton.Width = 22;
            FiftyButton.Height = 20;


            FiftyButton.BorderColor = System.Drawing.Color.LightSkyBlue;
            FiftyButton.BorderStyle = BorderStyle.Solid;
            FiftyButton.BorderWidth = 1;

            FiftyButton.Click += new System.EventHandler(RecordsChanged_Click);
            Controls.Add(FiftyButton);

            //设置默认样式
            PageSizeStyle();

            //上一页
            previousButton = new LinkButton();
            previousButton.ID = "previousButton";
            previousButton.Text = this.Previous;
            previousButton.ToolTip = this.Previous;
            previousButton.CommandArgument = "Prv";
            previousButton.Click += new System.EventHandler(PageIndex_Click);
            Controls.Add(previousButton);

            // 下一页
            nextButton = new LinkButton();
            nextButton.ID = "nextButton";
            nextButton.Text = this.Next;
            nextButton.ToolTip = this.Next;
            nextButton.CommandArgument = "Next";
            nextButton.Click += new System.EventHandler(PageIndex_Click);
            Controls.Add(nextButton);
            //跳转
            txtGO = new TextBox();
            txtGO.ID = "txtGO";
            txtGO.Text = string.Empty;
            txtGO.Width = 30;
            txtGO.MaxLength = 5;
            Controls.Add(txtGO);

            lbtnGO = new Button();
            lbtnGO.ID = "lbtnGO";
            lbtnGO.Text = "GO  ";
            lbtnGO.Width = 38;
            lbtnGO.Attributes.Add("onclick", "return CtrlPagingGoValid(this,'" + txtGO.ClientID + "'," + CalculateTotalPages().ToString() + "," + (string.IsNullOrEmpty(txtGO.Text) ? Convert.ToString(this.PageIndex + 1) : txtGO.Text) + "," + this.IsEN.ToString().ToLower() + ")");
            lbtnGO.CssClass = "gobutton";

            litError = new Label();
            litError.ID = "litError";

            //lbtnGO.BorderColor = System.Drawing.Color.LightSkyBlue;
            //lbtnGO.BorderStyle = BorderStyle.Solid;
            //lbtnGO.BorderWidth = 1;
            //lbtnGO.BackColor = System.Drawing.Color.LightGray;

            //lbtnGO.CommandArgument = txtGO.Text;
            lbtnGO.Click += new System.EventHandler(PageGo_Click);
            Controls.Add(lbtnGO);
        }
        #endregion

        #region "判断上一页是否到了第一页 或者到了最后一页"
        /// <summary>
        /// 判断是否有上一页
        /// </summary>
        private bool HasPrevious
        {
            get
            {
                if (PageIndex > 0)
                    return true;
                return false;
            }
        }
        /// <summary>
        /// 判断是否有下一页
        /// </summary>
        private bool HasNext
        {
            get
            {
                if (PageIndex + 1 < CalculateTotalPages())
                    return true;
                return false;
            }
        }
        #endregion

        #region "控件暴露给外面的事件"

        /// <summary>
        /// 暴露控件外上一页,下一页事件
        /// </summary>
        public event System.EventHandler IndexChanged;
        /// <summary>
        /// 上一页,下一页事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void PageIndex_Click(Object sender, EventArgs e)
        {
            string strMark = ((LinkButton)sender).CommandArgument.ToString();

            if (strMark == "Prv")
            {
                PageIndex = PageIndex - 1;
            }
            else
            {
                PageIndex = PageIndex + 1;
            }

            if (null != IndexChanged)
                IndexChanged(sender, e);

        }

        /// <summary>
        /// 暴露控件外每页显示条数事件 10 20 50 三个规格
        /// </summary>
        public event System.EventHandler RecordsChanged;
        /// <summary>
        /// 每页显示条数事件 10 20 50 三个规格
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void RecordsChanged_Click(Object sender, EventArgs e)
        {
            PageSize = Convert.ToInt32(((Button)sender).CommandArgument);
            PageSizeStyle();
            PageIndex = 0;
            txtGO.Text = "";
            if (null != RecordsChanged)
                RecordsChanged(sender, e);
        }

        /// <summary>
        /// 暴露控件外跳转页面事件
        /// </summary>
        public event System.EventHandler PageGo;
        /// <summary>
        /// 跳转页面事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void PageGo_Click(Object sender, EventArgs e)
        {
            try
            {
                int.Parse(txtGO.Text);
            }
            catch
            {
                return;
            }
            if (CalculateTotalPages() < int.Parse(txtGO.Text))
            {
                txtGO.Text = CalculateTotalPages().ToString();
            }
            litError.Text = "";
            if (int.Parse(txtGO.Text) < CalculateTotalPages())
            {
                PageIndex = Convert.ToInt32(int.Parse(txtGO.Text) - 1);
            }
            else
            {
                PageIndex = CalculateTotalPages() - 1;
            }
            if (null != PageGo)
                PageGo(sender, e);

        }

        #endregion

        #region "根据每页显示数目和总记录数获取显示页数"
        /// <summary>
        /// 获取总共多少页数据
        /// </summary>
        /// <returns></returns>
        public int CalculateTotalPages()
        {
            int totalPagesAvailable;

            if (TotalRecords == 0)
                return 0;


            totalPagesAvailable = TotalRecords / PageSize;


            if ((TotalRecords % PageSize) > 0)
                totalPagesAvailable++;

            return totalPagesAvailable;

        }

        /// <summary>
        /// 向页面注册脚本数据
        /// </summary>
        /// <param name="e"></param>
        protected override void OnPreRender(EventArgs e)
        {
            //暂时不需要脚本的提示,还是页面作判断
            //Page.RegisterStartupScript("PagerValidScript", s_Js);
            base.OnPreRender(e);
        }
        #endregion

        #region "属性"
        /// <summary>
        /// 当前页索引
        /// </summary>
        public int PageIndex
        {
            get
            {
                int _pageIndex = 0;

                if (ViewState["PPageIndex"] == null)
                {
                    _pageIndex = 0;
                }
                else
                {
                    _pageIndex = Convert.ToInt32(ViewState["PPageIndex"]);
                }

                if (_pageIndex < 0)
                {
                    return 0;
                }
                else
                {
                    return _pageIndex;
                }
            }
            set
            {
                ViewState["PPageIndex"] = value;
            }
        }
        /// <summary>
        /// 每页显示记录条数
        /// </summary>
        public int PageSize
        {
            get
            {
                if (ViewState["PageSize"] == null)
                {
                    return 10;
                }
                else
                {
                    return Convert.ToInt32(ViewState["PageSize"]);
                }
            }
            set
            {
                ViewState["PageSize"] = value;
            }

        }
        /// <summary>
        /// 总记录条数
        /// </summary>
        public int TotalRecords
        {
            get
            {
                return Convert.ToInt32(ViewState["TotalRecords"]);
            }
            set
            {
                ViewState["TotalRecords"] = value;
            }
        }

        /// <summary>
        /// 上一页
        /// </summary>
        private string Previous
        {
            get
            {
                if (IsEN)
                {
                    return "Previous";
                }
                else
                {
                    return "上 页";
                }

            }

        }
        /// <summary>
        /// 下一页面
        /// </summary>
        private string Next
        {
            get
            {
                if (IsEN)
                {
                    return "Next";
                }
                else
                {
                    return "下 页";
                }
            }
        }
        /// <summary>
        /// 跳转
        /// </summary>
        private string GoTo
        {
            get
            {
                if (IsEN)
                {
                    return "GO";
                }
                else
                {
                    return "GO";
                }
            }
        }
        /// <summary>
        /// 是否英文
        /// </summary>
        public bool IsEN
        {
            get
            {
                if (ViewState["IsEN"] == null)
                    return false;
                else
                    return Convert.ToBoolean(ViewState["IsEN"]);
            }
            set
            {
                ViewState["IsEN"] = value;
            }
        }

        /// <summary>
        /// 是否英文
        /// </summary>
        public string strGoTxt
        {
            get
            {
                return txtGO.Text;
            }
            set
            {
                txtGO.Text = value;
            }
        }
        /// <summary>
        /// 当前页索引
        /// </summary>
        public int CurrentIndex
        {
            get
            {
                int _pageIndex = 0;

                if (ViewState["PPageIndex"] == null)
                {
                    _pageIndex = 0;
                }
                else
                {
                    _pageIndex = Convert.ToInt32(ViewState["PPageIndex"]);
                }

                if (_pageIndex <= 0)
                {
                    return 0;
                }
                else
                {
                    if (_pageIndex >= TotalRecords / PageSize)
                    {
                        if (TotalRecords % PageSize > 0)
                        {
                            PageIndex = TotalRecords / PageSize;
                            return TotalRecords / PageSize;
                        }
                        else
                        {
                            PageIndex = TotalRecords / PageSize - 1;
                            return TotalRecords / PageSize - 1;
                        }

                    }
                    else
                    {
                        return _pageIndex;
                    }
                }
            }
            set
            {
                ViewState["CurrentIndex"] = value;
            }
        }
        /// <summary>
        /// 注册到页面验证
        /// </summary>
        public const string s_Js = @"
        <script type=""text/javascript"" language=""javascript"">
            function CtrlPagingGoValid(sender, target, PageNum, curIndex, IsEn)
            {
                var curNum = document.getElementById(target).value.replace(/(^"s*)|("s*$)/g, """").replace(/(^" *)|(" *$)/g, """");
                document.getElementById(target).value = curNum;
                var numreg = new RegExp(""^""d+$"");

                if (curNum.length == 0 || !numreg.test(curNum) )
                {
                    if (IsEn)
                    {
                        alert(""Page Index Error!"");
                    }
                    else
                    {
                        alert(""页码错误!"");
                    }
                    return false;
                }
                return true;
            }
        </script>
        ";
        #endregion
    }
}



调用代码:int intStart, intEnd, intRows;//intRows返回查询数据集合的总记录数量
intRows = 0;
//设置其实记录位置
intStart = CtrlPag.PageIndex * CtrlPag.PageSize; //获取SQLRead的开始记录
intEnd = CtrlPag.PageSize;                       //获取记录条数量
DataTable dtb;  //获取查询记录的总记录数
CtrlPag.TotalRecords = intRows;//给控件设置总记录数
GrideView.PageSize = CtrlPag.PageSize; //为GrideView设置当前页显示记录条数
//下面就不用解释了哦
GrideView.DataSource = dtb;
GrideView.DataBind();
posted on 2008-02-25 16:01  小草.NET  阅读(681)  评论(0)    收藏  举报