程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> KCMT開源控件之--方便簡潔的分頁控件

KCMT開源控件之--方便簡潔的分頁控件

編輯:關於ASP.NET

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);

        }

    }

}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved