不墨迹,直接上代码

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 = ;
CurrentPage = page;
HGC = new HtmlGenericControl(); //判断单签页面的session中是否有index这个项,如果没有则加入其实为0
if (CurrentPage.Session["index"] == null)
CurrentPage.Session.Add("index", );
} //绑定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 / * ;
this.HGC.Controls.Clear();
if (pages > )
{
DUpLb.Click += DUpLb_Click;
this.HGC.Controls.Add(DUpLb);
}
for (int i = pages; i < pages + ; 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+ <= this.PageCount)
{
DDownLb.Click += DDownLb_Click;
this.HGC.Controls.Add(DDownLb);
} } private void lbGo_Click(object sender, EventArgs e)
{
int goIndex = ;
if (Int32.TryParse(txtPage.Text,out goIndex))
{
if (goIndex <= PageCount&&goIndex>)
{
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 >= )
{
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-) / * ;
CurrentPage.Session["index"] = pi;
IsNull();
} private void DDownLb_Click(object sender, EventArgs e)
{
int pi = (CurrentPageIndex + ) / * ;
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服务器控件绑定数据后的分页

备注:菜鸟,求指点。

自己写的一个ASP.NET服务器控件Repeater和GridView分页类的更多相关文章

  1. 多年前写的一个ASP.NET网站管理系统,到现在有些公司在用

    多年前写的一个ASP.NET网站管理系统,到现在有些公司在用 今早上接到一个电话,自已多年前写的一个ASP.NET网站管理系统,一个公司在用,出了点问题, 第一点是惊奇,5,6年前的东东,手机号码换了 ...

  2. 这两天自己模仿写的一个Asp.Net的显示分页方法 附加实体转换和存储过程

    之前自己一直用Aspnetpager控件来显示项目中的分页,但是每次都要拖一个aspnetpager的控件进去,感觉很不舒服,因为现在自己写的webform都不用服务器控件了,所以自己仿照aspnet ...

  3. 小白写的一个ASP.NET分页控件,仅供娱乐

    无聊,第一次写博客,自己动手写了一个分页控件.由于我是新手,有很多地方写得不够好,希望各位大牛多多指正.哈哈哈 /// <summary> /// 分页控件 /// </summar ...

  4. asp.net 中Repeater和Gridview的区别

             Griview:              优点:1.GridView是从WebControl派生出来的,拥有WebControl样式属性,自身会被解析为table,其中的每一行会被 ...

  5. 分享最近抽空写的一个代码生成器,集成EasyDBUtility数据库访问帮助类

    一直想写一个自己的代码生成器,但是因为工作事情多,一直搁置下来,最近下决心终于利用下班时间写完了,现在分享给有需要的朋友,代码生成器集成EasyDBUtility数据库访问帮助类,暂时只支持sqlse ...

  6. asp.net c# repeater或gridview导出EXCEL的详细代码。

    Response.Clear(); Response.Charset = "GB2312"; Response.ContentEncoding = System.Text.Enco ...

  7. C# 写的一个生成随机汉语名字的小程序

    最近因为要做数据库相关的测试,频繁使用到测试数据,手动添加太过于麻烦,而且复用性太差,因此干脆花了点时间写了一个生成随机姓名和相关数据的类,贴在这里,有需用的同志们可以参考一下.代码本身质量不好,也不 ...

  8. sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)

    sql server 关于表中只增标识问题   由于我们系统时间用的过长,数据量大,设计是采用自增ID 我们插入数据的时候把ID也写进去,我们可以采用 关闭和开启自增标识 没有关闭的时候 ,提示一下错 ...

  9. 从零写一个Asp.net core手脚架(模型验证)

    一个asp.net core项目,一定包含了各种的实体,在RESTful api里面,有很多的参数传递,不建立实体则大量的参数需要自定验证正确性,并且Action上面会写的密密麻麻的参数 在asp.n ...

随机推荐

  1. 下载tomcat安装版

    1.我们首先在浏览器的地址栏中输入下载地址,如下: Tomcat下载网站链接:http://tomcat.apache.org/ 大家注意:以上下载链接中以zip或gz结尾的都是免安装版的,我们要下载 ...

  2. HTTP状态详解

    1**:请求收到,继续处理2**:操作成功收到,分析.接受3**:完成此请求必须进一步处理4**:请求包含一个错误语法或不能完成5**:服务器执行一个完全有效请求失败 100——客户必须继续发出请求1 ...

  3. IFC标准是为了满足建筑行业的信息交互与共享而产生的统一数据标准,是建 筑行业事实上的数据交换与共享标准。本文概要介绍了IFC标准的产生及发展 历程,IFC的整体框架结构,简要说明了IFC标准的实现方法和过程,描述了 当前的应用以及我们应该更加积极地利用IFC标准为建筑软件行业服务。

  4. zookeeper 面试题 有用

    .zookeeper是什么框架? zookeeper是一个开源的分布式协调服务框架. 2.有哪些应用场景? 应用场景:分布式通知/协调.负载均衡.配置中心.分布式锁.分布式队列等. 3.使用什么协议? ...

  5. launchpad, jira, github

    一.简介 http://segmentfault.com/q/1010000000165115

  6. Hibernate-Criteria

    Hibernate Criteria简介 一.Criteria接口的用途: 设计上可以灵活的根据criteria的特点进行查询条件的组装. CriteriaSpecification 接口是 Crit ...

  7. 登录xdebug

    1.配置 2.先不打断点,调至登录页面 3.在登录必经过处打断点,访问页面输入账号密码点击登录,进入代码追踪模式

  8. linux安装JDK后发现系统带有openjdk的处理

    1.JDK下载. 官网下载网址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html ...

  9. 何为软件的Alpha、Beta、RC和GA发布版本?

    简介 一个软件或者一个功能在发布时,通常会有Beta版这么一说.我很熟悉,差不多知道是什么意思,但没去深究,感觉上就是一个可以用但不保证功能稳定的版本. 直到昨天我看到了 MariaDB 数据库发布标 ...

  10. DataAnnotationsModelValidator-基于数据注解方式的model验证器

    http://www.cnblogs.com/artech/archive/2012/04/10/how-mvc-works.html http://www.cnblogs.com/artech/ar ...