插播个广告ASP.NET相关技术交流群205914059

废话少说源码写的时候思路很乱还有在整理希望多提意见。

using System;
using System.Text;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Text.RegularExpressions;
using System.Data;
namespace PagerControls
{//首先解释一下这个类的继承规则,System.Web.UI.WebControls.WebControl就不说了;IPostBackEventHandler这个接口是用于点击翻页按钮时进行回发的。    public class DataPaging : System.Web.UI.WebControls.WebControl, IPostBackEventHandler{//定义翻页的按钮和相关标签        #region 子控件private System.Web.UI.WebControls.LinkButton Upbtn = new LinkButton();private System.Web.UI.WebControls.LinkButton NextBtn = new LinkButton();private System.Web.UI.WebControls.LinkButton Fristbtn = new LinkButton();private System.Web.UI.WebControls.LinkButton LastBtn = new LinkButton();private System.Web.UI.WebControls.Button GoBtn = new Button();private System.Web.UI.WebControls.TextBox LblSumPagestxt = new TextBox();private System.Web.UI.WebControls.Label LblPageInfo = new Label();//private System.Web.UI.WebControls.Label LblPageIndexstxt = new Label();//private System.Web.UI.WebControls.Label LblSumPages = new Label();//private System.Web.UI.WebControls.Label LblPageIndexs = new Label();
        #endregion//这个是用于外部设置的开发属性        #region 控件属性[Bindable(true)][Category("分页属性区")][Browsable(true)][Description("每页显示记录数")][DefaultValue("5")]public int PageSizes{get { return ViewState["PageSizes"] == null ? 5 : int.Parse(ViewState["PageSizes"].ToString()); }set { ViewState["PageSizes"] = value; }}[Bindable(true)][Category("分页属性区")][Browsable(true)][Description("DataTable数据集")]public DataTable DataSource{get { return ViewState["DataSource"] != null ? (DataTable)ViewState["DataSource"] : null; }set { ViewState["DataSource"] = value; }}private int PageIndexs{get{object o = ViewState["PageIndexs"];return o == null ? 0 : Convert.ToInt32(o);}set{ViewState["PageIndexs"] = value;}}private int SumPages{get{object o = ViewState["SumPages"];return o == null ? 0 : Convert.ToInt32(o);}set{ViewState["SumPages"] = value;}}        #endregion//这里面的委托方式我就用到了一个PagingClickHandler用于回调的         #region 委托public delegate void PagingClickHandler(object sender, EventArgs e);public delegate void UpbtnClickHandler(object sender, EventArgs e);public delegate void NextBtnClickHandler(object sender, EventArgs e);public delegate void FristbtnClickHandler(object sender, EventArgs e);public delegate void LastBtnClickHandler(object sender, EventArgs e);
        #endregion        #region 事件//用于回调的到页面的分页事件        public event PagingClickHandler PagingClick;protected virtual void OnPagingClick(object sender, EventArgs e){if (PagingClick != null){PagingClick(sender, e);}}//分页的按钮事件        protected virtual void FristbtnClick(object sender, EventArgs e){if (PagingClick != null){PageIndexs = 1;this.OnPagingClick(GetPagedTable(DataSource, PageIndexs, PageSizes), e);}}protected virtual void LastBtnClick(object sender, EventArgs e){if (PagingClick != null){PageIndexs = SumPages;this.OnPagingClick(GetPagedTable(DataSource, PageIndexs, PageSizes), e);}}//public event UpbtnClickHandler UpbtnClick;protected virtual void OnUpbtnClick(object sender, EventArgs e){if (PagingClick != null){if (PageIndexs - 1 >= 1){PageIndexs--;this.OnPagingClick(GetPagedTable(DataSource, PageIndexs, PageSizes), e);}}}//public event NextBtnClickHandler NextbtnClick;protected virtual void OnNextbtnClick(object sender, EventArgs e){if (PagingClick != null){if (PageIndexs + 1 <= SumPages){PageIndexs++;this.OnPagingClick(GetPagedTable(DataSource, PageIndexs, PageSizes), e);}}}        #endregion        #region 分页函数public DataTable GetPagedTable(DataTable dt, int PageIndex, int PageSize){if (PageIndex == 0) { return dt; }DataTable newdt = dt.Copy();newdt.Clear();int rowbegin = (PageIndex - 1) * PageSize;int rowend = PageIndex * PageSize;if (rowbegin >= dt.Rows.Count){ return newdt; }if (rowend > dt.Rows.Count){ rowend = dt.Rows.Count; }for (int i = rowbegin; i <= rowend - 1; i++){DataRow newdr = newdt.NewRow();DataRow dr = dt.Rows[i];foreach (DataColumn column in dt.Columns){newdr[column.ColumnName] = dr[column.ColumnName];}newdt.Rows.Add(newdr);}return newdt;}public int PageCount(int count, int pageye){int page = 0;int sesepage = pageye;if (count % sesepage == 0) { page = count / sesepage; }else { page = (count / sesepage) + 1; }if (page == 0) { page += 1; }return page;}        #endregion//初始化函数页面绑定数据源以后分页的结果集合在返回给页面        #region  初始化函数public DataTable DataBind(){return ContrlInit();}private DataTable ContrlInit(){this.PageIndexs = this.PageIndexs == 0 ? 1 : this.PageIndexs;this.SumPages = PageCount(this.DataSource.Rows.Count, PageSizes);//this.LblSumPages.Text = SumPages.ToString();//this.LblPageIndexs.Text = PageIndexs.ToString();return GetPagedTable(DataSource, PageIndexs, PageSizes);}//控件的呈现 4个按钮和1个文本 按钮回发的参数 0 ,1,-1,2        protected override void Render(HtmlTextWriter output){base.Render(output);output.Write("&nbsp;");this.Fristbtn.ID = "OnUpbtn" + base.ID;this.Fristbtn.Text = "首页 ";Fristbtn.Attributes.Add(HtmlTextWriterAttribute.Href.ToString(), this.Page.ClientScript.GetPostBackClientHyperlink(this, "0"));this.Fristbtn.RenderControl(output);this.Upbtn.ID = "OnUpbtn" + base.ID;this.Upbtn.Text = "上一页 ";Upbtn.Attributes.Add(HtmlTextWriterAttribute.Href.ToString(), this.Page.ClientScript.GetPostBackClientHyperlink(this, "-1"));this.Upbtn.RenderControl(output);this.NextBtn.ID = "NextBtn" + base.ID;this.NextBtn.Text = "下一页 ";this.NextBtn.Attributes.Add(HtmlTextWriterAttribute.Href.ToString(), this.Page.ClientScript.GetPostBackClientHyperlink(this, "1"));this.NextBtn.RenderControl(output);this.LastBtn.ID = "OnUpbtn" + base.ID;this.LastBtn.Text = "尾页";LastBtn.Attributes.Add(HtmlTextWriterAttribute.Href.ToString(), this.Page.ClientScript.GetPostBackClientHyperlink(this, "2"));this.LastBtn.RenderControl(output);this.LblPageInfo.ID = "LblPageIndexstxt" + base.ID;this.LblPageInfo.Text = "(第" + PageIndexs.ToString() + "页 共" + SumPages.ToString() + "页)";this.LblPageInfo.RenderControl(output);//this.LblPageIndexs.ID = "LblPageIndexs" + base.ID;//this.LblPageIndexs.Text = PageIndexs.ToString();//this.LblPageIndexs.RenderControl(output);//this.LblSumPagestxt.ID = "LblSumPagestxt" + base.ID;//this.LblSumPagestxt.Text = "总页数:";//this.LblSumPagestxt.RenderControl(output);//this.LblSumPages.ID = "LblSumPages" + base.ID;//this.LblSumPages.Text = SumPages.ToString();//this.LblSumPages.RenderControl(output);}
        #endregion//最主要的一个部分 来判断用户点击翻页时回发的是那个事件 我定义的按钮回发的参数 0 ,1,-1,2

        public void RaisePostBackEvent(string eventArgument){//string[] args = eventArgument.Split(Constant.ARGUMENT_SPLITTER);//if (args == null || args.Length < 1)//    return;switch (eventArgument){case "0":this.FristbtnClick(null, null);break;case "-1":this.OnUpbtnClick(null, null);break;case "1":this.OnNextbtnClick(null, null);break;case "2":this.LastBtnClick(null, null);break;default:this.OnUpbtnClick(null, null);break;}}}
}编译以后会在工具中看见这个控件 拖到页面上

页面
<asp:Repeater ID="Rpt" runat="server" ><HeaderTemplate><ul></HeaderTemplate><ItemTemplate><li><strong><%# Eval("dtdate")%> 留言:</strong><div class="cont"><p class="txt"><%# Eval("sMessage")%></p><div class="replay"><span class="repTea"><%# Eval("adminName")%></span> &nbsp;回复 <%# Eval("dtadmindate")%><p><%# Eval("AdminMessage")%></p></div></div></li></ItemTemplate><FooterTemplate></ul></FooterTemplate></asp:Repeater>

 <GS:DataPaging ID="DataPaging1" runat="server" PageSizes="3" onpagingclick="DataPaging1_PagingClick"></GS:DataPaging>设置好 每页记录数和分页之后的事件后台代码
protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){LoadPage();}}
private void LoadPage(){DataPaging1.DataSource = (new NoticeMessageLogic()).GetMessageInfos(StudentMessage.Text, dtStudentDate.Text, WebSession.AliasCode);Rpt.DataSource = DataPaging1.DataBind();Rpt.DataBind();}protected void DataPaging1_PagingClick(object sender, EventArgs e){//LoadPage();Rpt.DataSource = sender;Rpt.DataBind();}要源码的 我这里不知道怎么上传。
试试效果吧 ~~~兄弟也辛苦半天了,加我的吧  QQ群 205914059

转载于:https://www.cnblogs.com/zhaosazi77/archive/2012/11/02/2750690.html

DataTable分页控件设计(适用于Gridview和Repeater)相关推荐

  1. 适用于ASP.NET的自定义分页控件

    前段时间的项目中需要使用到分页控件,在网上找了不少,最终还是自己动手写一个,比较简单,后续功能以后再实现,现把代码及思路写下来,望大家批评指正.分页控件的分页形式大多分三种,一种是用URL传值,通过给 ...

  2. java datatable用法_Java中实现DataTable工具类,并利用其实现简单分页控件。

    具体工具类代码,请见我上一个博客. 一.工具类的使用 1.1 DataTable工具类的使用 1.1.1DataTable简单解析 顾名思义,DataTable其实就是一张虚拟数据表,用于存储由数据库 ...

  3. Winform分页控件之纯分页显示处理

    在之前介绍的Winform分页控件中,都以分页控件+显示表格控件作为一个整体性的控件,不可分开,这样做的目的是可以实现更多的操作,集成更多丰富的特性,减少我们开发的工作量,这种情况虽然适用于大多数的情 ...

  4. 【开源】我的分页控件正式命名为QuickPager ASP.NET2.0分页控件

    分页控件正式命名为 QuickPager ASP.NET2.0分页控件 . 版本号:2.0.0.1 Framework:.net2.0 分页方式:PostBack .URL (暂时没有实现URL的分页 ...

  5. Repeater使用 AspNetPager分页控件

    一.AspNetPager分页控件 分页是Web应用程序中最常用到的功能之一,在ASP.NET中,虽然自带了一个可以分页的DataGrid(asp.net 1.1)和GridView(asp.net ...

  6. 【开源】QuickPager ASP.NET2.0分页控件V2.0.0.3 【增加了使用说明】

    ================================ 欢迎转载,但是请注明出处.本文出自博客园 .谢谢合作! ================================ 最新版本:V ...

  7. AspNetPager分页控件

    http://files.cnblogs.com/zhangweiguo3984/AspNetPager433.rar 分页是Web应用程序中最常用到的功能之一,在ASP.NET中,虽然自带了一个可以 ...

  8. asp.net分页控件使用详解【附实例下载】

    本篇文章主要对asp.net创建事务的方法进行实例介绍,具有很好的参考价值,需要的朋友一起来看下吧 一.说明 AspNetPager.dll这个分页控件主要用于asp.net webform网站,现将 ...

  9. 也发一个自定义分页控件

    分页控件有页面选择10 20 50显示,跳转到第几页,上页,下页功能.如图 代码为: using System; using System.Web.UI; using System.Web.UI.We ...

最新文章

  1. 防止电脑自动休眠小妙招
  2. java如何记录查看记录_Java如何检查消息是否可记录?
  3. Pygame - Python游戏编程入门(1)
  4. oracle undo段的作用,Oracle数据库中Undo数据段的作用及类型
  5. 师弟新作 | NBT:王运浩、区健辉等综述纳米孔测序技术
  6. hive随机查询若干条结果
  7. 全球最年轻的Python程序员;13 岁创建 RISC-V 内核,后浪程序员有多恐怖?
  8. 区块链基础语言(二十)——Go语言结构体
  9. STM32F407 硬件IIC驱动MCP4017 数字电位器
  10. c语言编程定积分sinx,C语言用辛普森公式求sinx在0到π上的定积分的源程序
  11. 什么是cs架构和bs架构
  12. 安科瑞 【节能学院】电气火灾监控系统在太焦铁路博爱站房项目的应用
  13. 曼哈顿算法公式_最小曼哈顿距离算法
  14. 日利息用计算机怎么算,日利率计算器在线计算
  15. 新款 MacBook Pro 评测:更好的性能、免费的刘海和更好的显示器
  16. 科大讯飞离线语音命令词识别的使用说明
  17. 使用pymysql报错RuntimeError ‘cryptography‘ package is required for sha256_password or caching_sha2_passw
  18. imac打开terminal终端器
  19. 交易市场中的测不准原理
  20. com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `x`

热门文章

  1. 棉花糖主机送mysql_mysql操作
  2. vuejs和html语言一样么,vue和vue.js有区别吗?
  3. springboot+mybatis+sqlserver导出数据库数据并实现下载到excel
  4. 第十六届全国大学生智能汽车竞赛总决赛 AI视觉组线上赛细则草案 - 初步版本
  5. 突然Windows系统声音没有,怎么修复?
  6. c++编译器里的字体_从C的for和Python的for聊起
  7. python中实例方法分类_python方法的分类(实例方法、类方法、静态方法)
  8. 更新不了_一个作者在起点中文网写小说,半年更新38万字,还是没签约成功
  9. mysql每秒支持多少并发_如何设计一个高并发系统?
  10. dijkstra 算法_最短路径问题Dijkstra算法详解