DataTable分页控件设计(适用于Gridview和Repeater)
插播个广告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(" ");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> 回复 <%# 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)相关推荐
- 适用于ASP.NET的自定义分页控件
前段时间的项目中需要使用到分页控件,在网上找了不少,最终还是自己动手写一个,比较简单,后续功能以后再实现,现把代码及思路写下来,望大家批评指正.分页控件的分页形式大多分三种,一种是用URL传值,通过给 ...
- java datatable用法_Java中实现DataTable工具类,并利用其实现简单分页控件。
具体工具类代码,请见我上一个博客. 一.工具类的使用 1.1 DataTable工具类的使用 1.1.1DataTable简单解析 顾名思义,DataTable其实就是一张虚拟数据表,用于存储由数据库 ...
- Winform分页控件之纯分页显示处理
在之前介绍的Winform分页控件中,都以分页控件+显示表格控件作为一个整体性的控件,不可分开,这样做的目的是可以实现更多的操作,集成更多丰富的特性,减少我们开发的工作量,这种情况虽然适用于大多数的情 ...
- 【开源】我的分页控件正式命名为QuickPager ASP.NET2.0分页控件
分页控件正式命名为 QuickPager ASP.NET2.0分页控件 . 版本号:2.0.0.1 Framework:.net2.0 分页方式:PostBack .URL (暂时没有实现URL的分页 ...
- Repeater使用 AspNetPager分页控件
一.AspNetPager分页控件 分页是Web应用程序中最常用到的功能之一,在ASP.NET中,虽然自带了一个可以分页的DataGrid(asp.net 1.1)和GridView(asp.net ...
- 【开源】QuickPager ASP.NET2.0分页控件V2.0.0.3 【增加了使用说明】
================================ 欢迎转载,但是请注明出处.本文出自博客园 .谢谢合作! ================================ 最新版本:V ...
- AspNetPager分页控件
http://files.cnblogs.com/zhangweiguo3984/AspNetPager433.rar 分页是Web应用程序中最常用到的功能之一,在ASP.NET中,虽然自带了一个可以 ...
- asp.net分页控件使用详解【附实例下载】
本篇文章主要对asp.net创建事务的方法进行实例介绍,具有很好的参考价值,需要的朋友一起来看下吧 一.说明 AspNetPager.dll这个分页控件主要用于asp.net webform网站,现将 ...
- 也发一个自定义分页控件
分页控件有页面选择10 20 50显示,跳转到第几页,上页,下页功能.如图 代码为: using System; using System.Web.UI; using System.Web.UI.We ...
最新文章
- 防止电脑自动休眠小妙招
- java如何记录查看记录_Java如何检查消息是否可记录?
- Pygame - Python游戏编程入门(1)
- oracle undo段的作用,Oracle数据库中Undo数据段的作用及类型
- 师弟新作 | NBT:王运浩、区健辉等综述纳米孔测序技术
- hive随机查询若干条结果
- 全球最年轻的Python程序员;13 岁创建 RISC-V 内核,后浪程序员有多恐怖?
- 区块链基础语言(二十)——Go语言结构体
- STM32F407 硬件IIC驱动MCP4017 数字电位器
- c语言编程定积分sinx,C语言用辛普森公式求sinx在0到π上的定积分的源程序
- 什么是cs架构和bs架构
- 安科瑞 【节能学院】电气火灾监控系统在太焦铁路博爱站房项目的应用
- 曼哈顿算法公式_最小曼哈顿距离算法
- 日利息用计算机怎么算,日利率计算器在线计算
- 新款 MacBook Pro 评测:更好的性能、免费的刘海和更好的显示器
- 科大讯飞离线语音命令词识别的使用说明
- 使用pymysql报错RuntimeError ‘cryptography‘ package is required for sha256_password or caching_sha2_passw
- imac打开terminal终端器
- 交易市场中的测不准原理
- com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `x`
热门文章
- 棉花糖主机送mysql_mysql操作
- vuejs和html语言一样么,vue和vue.js有区别吗?
- springboot+mybatis+sqlserver导出数据库数据并实现下载到excel
- 第十六届全国大学生智能汽车竞赛总决赛 AI视觉组线上赛细则草案 - 初步版本
- 突然Windows系统声音没有,怎么修复?
- c++编译器里的字体_从C的for和Python的for聊起
- python中实例方法分类_python方法的分类(实例方法、类方法、静态方法)
- 更新不了_一个作者在起点中文网写小说,半年更新38万字,还是没签约成功
- mysql每秒支持多少并发_如何设计一个高并发系统?
- dijkstra 算法_最短路径问题Dijkstra算法详解