天天看點

自己寫的一個ASP.NET伺服器控件Repeater和GridView分頁類

不墨迹,直接上代碼

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace CutPage
{
    //定義查詢方法的委托。pageindex查詢的頁碼;pagesize每一頁的資料量
    public delegate object GetList(int pageindex,int pagesize);
    public class SplitPage
    {
        public int CurrentPageIndex
        {
            get
            {
                return Convert.ToInt32(CurrentPage.Session["index"]);
            }
            set { }
           
        }//目前頁碼
        public int PageCount {get;set; }//頁面的數量
        public event GetList GetListHandle;//根據委托定義查詢事件
        public HtmlGenericControl HGC { get; set; }//容器(div)
        public int PageSize { get; set; }//每個頁面中資料的數量
        public Page CurrentPage { get; set; }//目前頁面
        public Repeater ReControl { get; set; }
        public GridView GvControl { get; set; }

        public LinkButton UpLb = new LinkButton { 
            Text=" 上一頁 ",ID="uplb"
        };//上一頁按鈕
        private LinkButton DownLb = new LinkButton { Text=" 下一頁 ",ID="downlb"};//下一頁按鈕

        private LinkButton DUpLb = new LinkButton { Text=" ... ",ID="DUpLb"};
        private LinkButton DDownLb = new LinkButton { Text=" ... ",ID="DDownLb"};

        private TextBox txtPage = new TextBox { ID = "txtPage" };
        private LinkButton lbGo = new LinkButton { Text=" Go ",ID="lbGo"};

        //構造方法,傳入目前頁面
        public SplitPage(Page page)
        {
           
            PageSize = 5;
            CurrentPage = page;
            HGC = new HtmlGenericControl();
           
            //判斷單簽頁面的session中是否有index這個項,如果沒有則加入其實為0
            if (CurrentPage.Session["index"] == null)
                CurrentPage.Session.Add("index", 0);
        }

        //綁定Repeater控件方法,傳回一個html容器(div)
        public HtmlGenericControl BindRepeater(Repeater re)
        {

            Procee();
            ReControl = re;
            re.DataSource = GetListHandle(CurrentPageIndex, PageSize);
            re.DataBind();
            return HGC;
        }

        public HtmlGenericControl BindGridView(GridView gv)
        {
            Procee();
            this.GvControl = gv;
            gv.DataSource = GetListHandle(CurrentPageIndex,PageSize);
            gv.DataBind();
            return HGC;
        }

        private void Procee()
        { 
            CreateControl();
            UpLb.Click += UpLb_Click;
            DownLb.Click += DownLb_Click;
            HGC.Controls.Add(UpLb);
            HGC.Controls.Add(DownLb);

            HGC.Controls.Add(txtPage);
            lbGo.Click += lbGo_Click;
            HGC.Controls.Add(lbGo);
        }

        //根據目前頁碼生成控件
        public void CreateControl()
        {
            
            int pages = CurrentPageIndex / 10 * 10;
            this.HGC.Controls.Clear();
            if (pages > 0)
            {
                DUpLb.Click += DUpLb_Click;
                this.HGC.Controls.Add(DUpLb);
            }
            for (int i = pages; i < pages + 10; i++)
            {
                if (i <= PageCount)
                {
                    LinkButton lb = new LinkButton();
                    if (i == CurrentPageIndex) lb.Enabled = false;
                    lb.Text = " " + i.ToString();
                    lb.ID = i.ToString();
                    lb.Click += lb_Click;
                    this.HGC.Controls.Add(lb);
                }
            }
            if (pages+10 <= this.PageCount)
            {
                DDownLb.Click += DDownLb_Click;
                this.HGC.Controls.Add(DDownLb);
            }
           
        }

        private void lbGo_Click(object sender, EventArgs e)
        {
            int goIndex = 0;
            if (Int32.TryParse(txtPage.Text,out goIndex))
            {
                if (goIndex <= PageCount&&goIndex>0)
                {
                    CurrentPage.Session["index"] = goIndex;
                    CreateControl();
                    IsNull();
                }
                else
                    CurrentPage.Response.
                        Write("<script>alert('索引超出範圍')</script>");

            }
                else 
                    CurrentPage.Response.
                        Write("<script>alert('請輸入正确的索引')</script>");

            
        }

        //頁碼的單擊事件
        private void lb_Click(object sender, EventArgs e)
        {
            LinkButton lb = sender as LinkButton;
            CurrentPage.Session["index"]=Convert.ToInt32(lb.Text);
            CreateControl();
            IsNull();

        }

        //判斷是綁定的控件
        private void IsNull()
        {
            if (ReControl != null)
                BindRepeater(ReControl);
            else
                BindGridView(GvControl);
        }

        //上一頁的單擊事件
        private void UpLb_Click(object sender, EventArgs e)
        {
            if (CurrentPageIndex >= 0)
            {
                CurrentPage.Session["index"] = --CurrentPageIndex;
                CreateControl();
                IsNull();
            }
        }

        //下一頁的單擊事件
        private void DownLb_Click(object sender, EventArgs e)
        {
            if (CurrentPageIndex < PageCount)
            {
                CurrentPage.Session["index"] = ++CurrentPageIndex;
                CreateControl();
                IsNull(); 
            }
        }

        private void DUpLb_Click(object sender, EventArgs e)
        {
            int pi = (CurrentPageIndex-10) / 10 * 10;
            CurrentPage.Session["index"] = pi;
            IsNull();
        }

        private void DDownLb_Click(object sender, EventArgs e)
        {
            int pi = (CurrentPageIndex + 10) / 10 * 10;
            CurrentPage.Session["index"] = pi;
            IsNull();
        }

    }
}      

使用方法

SplitPage sp = new SplitPage(this);
            sp.GetListHandle += bm.GetBooks;//分頁查詢資料庫的方法
            sp.PageCount = bm.BooksCount() / sp.PageSize ;//總頁數
            this.divOne.Controls.Add(sp.BindGridView(dvBookInfo));//把放回的div加入到設定好的divOne中,dvBookInfo是一個GridView控件,
//也可以是Repeater控件      

上面這個分頁類可以在類中添加相關代碼,支援其他ASP.NET伺服器控件綁定資料後的分頁

備注:菜鳥,求指點。

轉載于:https://www.cnblogs.com/caoxianbing/p/3486746.html