zoukankan      html  css  js  c++  java
  • 自己写的一个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服务器控件绑定数据后的分页

    备注:菜鸟,求指点。

  • 相关阅读:
    APB协议
    AHB总线协议(一)
    C++内存机制中内存溢出、内存泄露、内存越界和栈溢出的区别和联系
    深入理解C++内存管理机制
    c/c++内存机制(一)(转)
    与临时对象的斗争(下)
    与临时对象的斗争(上)ZZ
    C++异常处理解析: 异常的引发(throw), 捕获(try catch)、异常安全
    qt5信息提示框QMessageBox用法
    红黑树
  • 原文地址:https://www.cnblogs.com/caoxianbing/p/3486746.html
Copyright © 2011-2022 走看看