今天完成的自定义分页控件,支持AJAX.DLL的方式支持24种分页样式
来源:互联网 发布:澳洲建筑系排名知乎 编辑:程序博客网 时间:2024/06/07 01:03
分页控件,大家应该都比较熟悉了。但是一直以来分页控件都给我一个很郁闷的地方,几乎都是URL传值,让人很郁闷。
如果我的是高级查询,里面的值有很多,那写死个人。同时对系统的请求也是一个考验。于是我写了这个分页控件。同时支持24种分页样式。
代码如下:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Web.UI;using System.Web.UI.WebControls;using System.ComponentModel;using System.Web.UI.HtmlControls;namespace MyControl{ [DefaultProperty("Text")] [ToolboxData("<{0}:DataPager runat=server></{0}:DataPager>")] public class DataPager : WebControl, INamingContainer, IPostBackEventHandler { public event EventHandler PagerOnclick { add { Events.AddHandler(this, value); } remove { Events.RemoveHandler(this, value); } } protected void _PagerClick(object sender, EventArgs e) { EventHandler hd = (EventHandler)base.Events[this]; if (hd != null) { hd(sender, e); } } public void RaisePostBackEvent(string Index) { //Label lbl = (Label)this.FindControl("lbl"); //lbl.Text += "自己的事件:" + Index; } void btn_Click(object sender, EventArgs e) { try { int pageIndex = int.Parse(((sender) as LinkButton).Text); this.PageIndex = pageIndex; _PagerClick(sender, e); } catch (Exception) { } } /// <summary> /// 当前页数 /// </summary> public int PageIndex { get { return int.Parse(ViewState["PageIndex"] == null ? "1" : ViewState["PageIndex"].ToString()); } set { ViewState["PageIndex"] = value; CreateChildControls(); } } /// <summary> /// 总的页数 /// </summary> public int TotalPage { get { return int.Parse(ViewState["TotalPage"] == null ? "1" : ViewState["TotalPage"].ToString()); } set { ViewState["TotalPage"] = value; } } /// <summary> /// 总的记录数 /// </summary> public int TotalRecord { get { return int.Parse(ViewState["TotalRecord"] == null ? "0" : ViewState["TotalRecord"].ToString()); } set { ViewState["TotalRecord"] = value; } } /// <summary> /// 每页数据大小 /// </summary> public int PageSize { get { return int.Parse(ViewState["PageSize"] == null ? "0" : ViewState["PageSize"].ToString()); } set { ViewState["PageSize"] = value; } } /// <summary> /// 自定义说明 /// </summary> public string CustomText { get { return ViewState["CustomText"] == null ? "" : ViewState["CustomText"].ToString(); } set { ViewState["CustomText"] = value; } } void NextPager(object send, EventArgs e) { this.PageIndex = this.PageIndex + 10 > this.TotalPage ? this.TotalPage : this.PageIndex + 10; } void PrePager(object send, EventArgs e) { this.PageIndex = this.PageIndex-10 > 1 ? this.PageIndex - 10 : 1; } void MaxPager(object send, EventArgs e) { this.PageIndex = this.TotalPage; } protected override void CreateChildControls() { this.Controls.Clear(); HtmlGenericControl div = new HtmlGenericControl("div"); div.Attributes.Add("class", "pagingbar"); this.Controls.Add(div); HtmlGenericControl divbadoo = new HtmlGenericControl("div"); divbadoo.Attributes.Add("class", _displayStyle); div.Controls.Add(divbadoo); int StarDisplayPage = PageIndex-4; int EndDisplayPage = PageIndex+5; if (PageIndex <= 5) { StarDisplayPage = 1; EndDisplayPage = 10; } if (PageIndex>5) { LinkButton labPrev = new LinkButton(); labPrev.Text = "< Prev"; labPrev.Click += PrePager; labPrev.CssClass = "disabled"; divbadoo.Controls.Add(labPrev); LinkButton button = new LinkButton(); button.Click += btn_Click; button.Text = "1"; divbadoo.Controls.Add(button); Label labMore = new Label(); labMore.Text = "..."; divbadoo.Controls.Add(labMore); } if (PageIndex >= TotalPage-5) { StarDisplayPage = (TotalPage - 10 <= 0) ? 1:TotalPage - 10; EndDisplayPage = TotalPage; } for (int i = StarDisplayPage; i <= EndDisplayPage; i++) { if (i == PageIndex) { Label labCurrent = new Label(); labCurrent.Text = i.ToString(); labCurrent.CssClass = "current"; divbadoo.Controls.Add(labCurrent); } else { LinkButton button = new LinkButton(); button.Click += btn_Click; button.Text = i.ToString(); divbadoo.Controls.Add(button); } } if (PageIndex < TotalPage - 5) { Label labOmission = new Label(); labOmission.Text = "..."; divbadoo.Controls.Add(labOmission); LinkButton btnLastPage = new LinkButton(); btnLastPage.Text = this.TotalPage.ToString(); btnLastPage.Click += btn_Click; divbadoo.Controls.Add(btnLastPage); LinkButton btnNextPage = new LinkButton(); btnNextPage.Text = "Next >"; btnNextPage.Click += NextPager; divbadoo.Controls.Add(btnNextPage); } } protected override void Render(HtmlTextWriter output) { if ((base.Site != null) && base.Site.DesignMode) { StringBuilder sb = new StringBuilder(); sb.Append("<div id=\"pagingbar\" class=\"pagingbar\">"); sb.Append("<div class=\"badoo\">"); sb.Append("<span class=\"disabled\">< Prev </span>"); sb.Append("<span class=\"current\">1</span>"); sb.Append("<a>2</a>"); sb.Append("<a>3</a>"); sb.Append("<a>4</a>"); sb.Append("<a>5</a>"); sb.Append("<a>6</a>"); sb.Append("<a>7</a>"); sb.Append("<a>8</a>"); sb.Append("<a>9</a>"); sb.Append("..."); sb.Append("<a>n</a>"); sb.Append("<a> Next ></a>"); sb.Append("</div>"); sb.Append("</div>"); output.Write(sb.ToString()); } else { base.Render(output); } } private string _displayStyle { get { return ViewState["DisplayStyle"] == null ? "badoo" : ViewState["DisplayStyle"].ToString(); } } /// <summary> /// 设置的样式 /// </summary> public DisplayStyle SelectDisplayStyle { set { if (ViewState["DisplayStyle"]==null) { ViewState["DisplayStyle"] = value.ToString(); } } } public string SetDisplayStyle { set { ViewState["DisplayStyle"] = value; } } public enum DisplayStyle { digg, yahoo, meneame, flickr, sabrosus, pagination, scott, quotes, black, black2, blackRed, grayr, yellow, jogger, starcraft2, tres, megas512, technorati, youtube, msdn, badoo, greenBlack, viciao, yahoo2, } }}
你可以选择手动或者自动输入样式,当两个样式都有的时候使用手动设置的样式。
同时,点击页数的事件 直接赋值 或者点击写都可以
前台调用代码如下:
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> <ContentTemplate> <cc1:DataPager ID="DataPager2" runat="server" SelectDisplayStyle="flickr" OnPagerOnclick="DataPager1_PagerOnclick1" /> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> </ContentTemplate> </asp:UpdatePanel>
CS代码:
protected void Page_Load(object sender, EventArgs e) { if(!IsPostBack) { //this.PagingBar1 = new MyControl.PagingBar(); this.DataPager1.PageIndex = 5; this.DataPager1.PageSize = 20; this.DataPager1.TotalPage = 30; this.DataPager1.TotalRecord = 500; this.DataPager2.PageIndex = 5; this.DataPager2.PageSize = 20; this.DataPager2.TotalPage = 30; this.DataPager2.TotalRecord = 500; //this.DataPager1. } } protected void DataPager1_PagerOnclick1(object sender, EventArgs e) { //int PageIndex = this.DataPager1.PageIndex; int strthisPage = DataPager2.PageIndex; //Convert.ToInt32(((sender) as LinkButton).Text); // this.DataPager1.PageIndex = strthisPage; Label1.Text = strthisPage.ToString(); }对了,24种样式的命名我改了下。有几个样式带横线,我把横线去掉了。
- 今天完成的自定义分页控件,支持AJAX.DLL的方式支持24种分页样式
- 自己实现的数据表格控件(dataTable),支持自定义样式和标题数据、ajax等各种自定义设置以及分页自定义
- CI支持AJAX分页
- 自定义的分页控件
- Lucene的深度分页支持
- AspNetPager分页控件的样式
- GridView控件实现支持分页的自动编号代码
- 给AspNetPager控件和GridView的分页添加自定义样式
- Ajax模式List页面支持JS,JS支持页面分页的AjaxList.js
- 手写的ajax分页控件
- AspNetPager自定义分页控件样式
- dede分页样式修改(支持bootstrap分页样式)
- mssql 支持的分页+sqlite + mysql 的分页语句
- 自定义分页控件(四)完善设计时支持和增加分页模式
- 超长字符的智能分页-支持HTM
- 超长字符的智能分页-支持HTML
- GridView支持分页的自动编号代码
- GridView支持分页的自动编号代码
- 从B树、B+树、B*树谈到R 树
- Windows7 64位系统安装PLSQL Developer
- 25个实用的jQuery技巧和解决方案(转自www.jqueryba.com)
- OnPaint()函数的作用原理
- 开始学习Cocos2d-x进行2D的跨平台游戏开发!
- 今天完成的自定义分页控件,支持AJAX.DLL的方式支持24种分页样式
- 关于math类库
- Android:捕捉触摸屏手势
- MySQL索引背后的数据结构及算法原理
- 更新外键失败
- 我将从程序员的成长角度来进行:程序员如何进行自我超越
- Sublime Text 常用插件和设置
- mysql 批量插入 方法
- properties文件读写 自己写的几个方法