KCMT开源控件之--方便简洁的分页控件

KMCT名字的由来,这是我在Blog中的第一篇关于控件的文章,在此我将对我的控件做一个申明,控件 名字以我的Blog名字各项的首字母命名(Keyboard,Mouse,Cigarette,Tea )希望大家在以后看我的控件的 时候能想到我的Blog。同时我选择了开源,开源更能促进技术的发展,也更能到达资源共享的目的。

废话少说、直接进入主题,今天整理的是分页控件,这个控件诞生将近一年了,是我和我的一个同事 共同开发,现在被广泛用于公司的各个项目中。控件基于.net 2.0 开发。

先从宏观上分析一下分页控件:作为分页控件应该具有每一页的大小(Pagesize)、总页数 (TotalPage)等属性。

从实现上说我们在以前的分页过程中都是像这样传递参数xxxx.aspx?page=1,那么我们只要改变page 参数的值便可以实现分页的效果,因此我们只需要继承System.Web.UI.Control控件并重写Render()方法 即可实现该功能。

贴出代码:

using System;

using System.Text;

using System.Text.RegularExpressions;

namespace KMCT.Control

{

    /// <summary>

    /// 该控件为分页控件,其特点是分页方便,轻量级

    /// </summary>

    public class Pager : System.Web.UI.Control

    {

        private int _pageSize, _totalPage;

        private static readonly Regex RX;

        private string query;

        private int curretPage;

        private int myTotalPage;

        //Filed

        public int TotalPage

        {

            get { return _totalPage; }

            set { _totalPage = value; }

        }

        public int PageSize

        {

            get { return _pageSize; }

            set { _pageSize = value; }

        }

        static Pager() { RX = new Regex(@"^&page=\d+", RegexOptions.Compiled); }

        public Pager()

        {

            query = Context.Request.Url.Query.Replace("?", "&");

            query = RX.Replace(query, string.Empty);

            string myPage = Context.Request["page"];

            if (string.IsNullOrEmpty(myPage))

                curretPage = 0;

            else

            {

                try

                {

                    curretPage = int.Parse(myPage);

                }

                catch

                {

                    Context.Response.Redirect(Regex.Replace

(Context.Request.Url.ToString(), @"page=[^&]+", "page=0"));

                }

            }

        }

        protected override void Render(System.Web.UI.HtmlTextWriter writer)

        {

            if ((this._totalPage % this._pageSize) == 0)

            {

                myTotalPage = this._totalPage / this._pageSize;

            }

            else

                myTotalPage = this._totalPage / this._pageSize + 1;

            string str = "<div class='digg'>";

            if (this._pageSize > this._totalPage)

            {

                str += "";

            }

            else

            {

                if (this._totalPage <= this._pageSize * 10)

                {

                    if (this.curretPage == 0)

                        str += "<span class='disabled'> < 

</span>";

                    else

                        str += "<a href='?page=" + (curretPage - 

1) + this.query + "'> < </a>";

                    for (int i = 0; i < myTotalPage; i++)

                    {

                        if (curretPage == i)

                            str += "<span class='current'>" 

+ (i + 1) + "</span>";

                        else

                            str += "<a href='?page=" + i + 

this.query + "'>" + (i + 1) + "</a>";

                    }

                    if (this.curretPage < myTotalPage - 1)

                        str += "<a href='?page=" + (curretPage + 

1) + this.query + "'> > </a>";

                    else

                        str += "<span class='disabled'> > 

</span>";

                }

                else

                {

                    if (this.curretPage == 0)

                        str += "<span class='disabled'> < 

</span>";

                    else

                        str += "<a href='?page=" + (curretPage - 

1) + this.query + "'> < </a>";

                    if (this.curretPage < 4)

                    {

                        for (int i = 0; i < 5; i++)

                        {

                            if (curretPage == i)

                                str += "<span 

class='current'>" + (i + 1) + "</span>";

                            else

                                str += "<a href='?page=" + 

i + this.query + "'>" + (i + 1) + "</a>";

                        }

                        str += "<a href='?page=" + myTotalPage + 

this.query + "'>" + myTotalPage + "</a>";

                    }

                    else if (this.curretPage >= 4 && 

this.curretPage < myTotalPage - 6)

                    {

                        str += "<a href='?page=1" + this.query + 

"'>1</a>";

                        for (int i = -2; i < 3; i++)

                        {

                            if (i == 0)

                                str += "<span 

class='current'>" + (this.curretPage + 1) + "</span>";

                            else

                                str += "<a href='?page=" + 

(this.curretPage + i) + this.query + "'>" + (this.curretPage + 1 + i) + "</a>";

                        }

                        str += "<a href='?page=" + (myTotalPage - 

1) + this.query + "'>" + myTotalPage + "</a>";

                    }

                    else if (curretPage > myTotalPage + 1)

                    {

                        Context.Response.Redirect(Regex.Replace

(Context.Request.Url.ToString(), @"page=\d+", "page=" + (myTotalPage - 1)));

                    }

                    else

                    {

                        str += "<a href='?page=1" + this.query + 

"'>1</a>";

                        for (int i = 6; i > 0; i--)

                        {

                            if (curretPage == myTotalPage - i)

                                str += "<span 

class='current'>" + (myTotalPage - i + 1) + "</span>";

                            else

                                str += "<a href='?page=" + 

(myTotalPage - i) + this.query + "'>" + (myTotalPage - i + 1) + "</a>";

                        }

                    }

                    if (this.curretPage < myTotalPage - 1)

                        str += "<a href='?page=" + (curretPage + 

1) + this.query + "'> > </a>";

                    else

                        str += "<span class='disabled'> > 

</span>";

                }

            }

            str += "</div>";

            writer.Write(str);

        }

    }

}

你可能感兴趣的:(.net,技术,分析,文章,主题)