一个ASP.NET的分页控件
2012-04-24 10:19
393 查看
public class ucDataPager:CompositeControl,INamingContainer { private LinkButton lkbtnFirstLevel; private LinkButton lkbtnPreLevel; private LinkButton lkbtnLastLevel; private LinkButton lkbtnNextLevel;private List<LinkButton> lstPages; /// <summary> /// the key of the Button Click event /// </summary> private static readonly object ButtonPageClickObject = new object(); /// <summary> /// /// </summary> public ucDataPager() { } /// <summary> /// /// </summary> /// <param name="pageCount"></param> /// <param name="pageSize"></param> public ucDataPager(int pageCount, int pageSize) { PageSize = pageSize; ViewState["PageCount"] = pageCount; } /// <summary> /// the current page index /// </summary> public int PageIndex { set { if (value < 0) { return; } if (value > PageCount - 1) { ViewState["PageIndex"] = PageCount - 1; return; } ViewState["PageIndex"] = value; } get { return ViewState["PageIndex"] == null ? 0 : Convert.ToInt32(ViewState["PageIndex"]); } } /// <summary> /// The page count of the records /// </summary> public int PageCount { set { if (value < 0) { return; } ViewState["PageCount"] = value; if (value < PageIndex + 1) { PageIndex = value - 1; } } get { return ViewState["PageCount"] == null ? -1 : Convert.ToInt32(ViewState["PageCount"]); } } /// <summary> /// the count of the button to show /// </summary> public int PageSize { set { if (value <= 0) { return; } ViewState["PageSize"] = value; } get { return ViewState["PageSize"] == null ? 10 : Convert.ToInt32(ViewState["PageSize"]); } } /// <summary> /// Create child controls /// </summary> protected override void CreateChildControls() { this.Controls.Clear(); if (PageCount <= 0) { return; } lkbtnFirstLevel = new LinkButton(); lkbtnFirstLevel.CausesValidation = false; lkbtnFirstLevel.Text = "<<"; lkbtnFirstLevel.CommandName = "First"; this.Controls.Add(lkbtnFirstLevel); lkbtnLastLevel = new LinkButton(); lkbtnLastLevel.CausesValidation = false; lkbtnLastLevel.Text = ">>"; lkbtnLastLevel.CommandName = "Last"; this.Controls.Add(lkbtnLastLevel); lkbtnPreLevel = new LinkButton(); lkbtnPreLevel.CausesValidation = false; lkbtnPreLevel.Text = "..."; lkbtnPreLevel.CommandName = "Pre"; this.Controls.Add(lkbtnPreLevel); lkbtnNextLevel = new LinkButton(); lkbtnNextLevel.CausesValidation = false; lkbtnNextLevel.Text = "..."; lkbtnNextLevel.CommandName = "Next"; this.Controls.Add(lkbtnNextLevel); lstPages = new List<LinkButton>(); for (int i =(PageIndex/PageSize)*PageSize + 1; i <= PageCount && i <= (PageIndex/PageSize)*PageSize+PageSize; i++) { LinkButton lkbtnPage = new LinkButton(); lkbtnPage.CausesValidation = false; lkbtnPage.Text = i.ToString(); lkbtnPage.CommandName = "NewPage"; lstPages.Add(lkbtnPage); this.Controls.Add(lkbtnPage); } } /// <summary> /// Render controls /// </summary> /// <param name="writer"></param> protected override void Render(System.Web.UI.HtmlTextWriter writer) { if (lstPages == null) { CreateChildControls(); } if (lstPages == null) { return; } if (lstPages.Count <= 1 && PageIndex == 0) { return; } writer.AddAttribute(HtmlTextWriterAttribute.Id, this.ClientID); writer.AddAttribute(HtmlTextWriterAttribute.Name, this.UniqueID); writer.RenderBeginTag(HtmlTextWriterTag.Table); writer.RenderBeginTag(HtmlTextWriterTag.Tr); if (PageIndex / PageSize == 0) { lkbtnFirstLevel.Visible = false; lkbtnPreLevel.Visible = false; } else { writer.RenderBeginTag(HtmlTextWriterTag.Td); lkbtnFirstLevel.RenderControl(writer); writer.RenderEndTag(); writer.RenderBeginTag(HtmlTextWriterTag.Td); lkbtnPreLevel.RenderControl(writer); writer.RenderEndTag(); } foreach (LinkButton lkbtn in lstPages) { writer.RenderBeginTag(HtmlTextWriterTag.Td); if (lkbtn.Text == (PageIndex + 1).ToString()) { lkbtn.Enabled = false; } lkbtn.RenderControl(writer); writer.RenderEndTag(); } if (PageIndex/PageSize == (PageCount - 1)/PageSize) { lkbtnLastLevel.Visible = false; lkbtnNextLevel.Visible = false; } else { writer.RenderBeginTag(HtmlTextWriterTag.Td); lkbtnNextLevel.RenderControl(writer); writer.RenderEndTag(); writer.RenderBeginTag(HtmlTextWriterTag.Td); lkbtnLastLevel.RenderControl(writer); writer.RenderEndTag(); } writer.RenderEndTag(); writer.RenderEndTag(); } /// <summary> /// raise command /// </summary> /// <param name="source"></param> /// <param name="args"></param> /// <returns></returns> protected override bool OnBubbleEvent(object source, EventArgs args) { bool handled = false; if (args is CommandEventArgs) { CommandEventArgs e = (CommandEventArgs)args; if (e.CommandName == "First") { PageIndex = 0; MyDataPagerEventArgs myArgs = new MyDataPagerEventArgs(PageIndex); OnButtonPageClick(myArgs); CreateChildControls(); handled = true; } if (e.CommandName == "Last") { PageIndex = ((PageCount - 1)/PageSize)*PageSize; MyDataPagerEventArgs myArgs = new MyDataPagerEventArgs(PageIndex); OnButtonPageClick(myArgs); CreateChildControls(); handled = true; } if (e.CommandName == "Pre") { PageIndex = (PageIndex / PageSize - 1) * PageSize; MyDataPagerEventArgs myArgs = new MyDataPagerEventArgs(PageIndex); OnButtonPageClick(myArgs); CreateChildControls(); handled = true; } if (e.CommandName == "Next") { PageIndex = (PageIndex / PageSize + 1) * PageSize; MyDataPagerEventArgs myArgs = new MyDataPagerEventArgs(PageIndex); OnButtonPageClick(myArgs); CreateChildControls(); handled = true; } if (e.CommandName == "NewPage") { int pageIndex = Convert.ToInt32(((LinkButton)source).Text) - 1; PageIndex = pageIndex; CreateChildControls(); MyDataPagerEventArgs myArgs = new MyDataPagerEventArgs(PageIndex); OnButtonPageClick(myArgs); handled = true; } } this.RaiseBubbleEvent(source, args); return handled; } /// <summary> /// /// </summary> public event MyDataPagerEventHandler ButtonPageClick { add { base.Events.AddHandler(ButtonPageClickObject, value); } remove { base.Events.RemoveHandler(ButtonPageClickObject, value); } } /// <summary> /// /// </summary> /// <param name="e"></param> protected virtual void OnButtonPageClick(MyDataPagerEventArgs e) { MyDataPagerEventHandler ButtonPageClickHandler = (MyDataPagerEventHandler)Events[ButtonPageClickObject]; if (ButtonPageClickHandler != null) { ButtonPageClickHandler(this, e); } } } public delegate void MyDataPagerEventHandler(object sender,MyDataPagerEventArgs e); public class MyDataPagerEventArgs : EventArgs { public MyDataPagerEventArgs(int newPageIndex) { this.NewPageIndex = newPageIndex; } public int NewPageIndex { set; get; } }
用法如下,要与GridView配合使用
private void BindData() { DataTable dtResult = ..... if (dtResult.Rows.Count > 0) { gvResult.PageSize = 10; gvResult.DataSource = dtResult; gvResult.DataBind(); ucDataPagerHeader.PageCount = gvResult.PageCount; ucDataPagerHeader.PageIndex = gvResult.PageIndex; } }
protected void ucDataPagerHeader_ButtonPageClick(object sender, MyDataPagerEventArgs e) { try { gvResult.PageIndex = e.NewPageIndex; BindData(); } catch { } }
相关文章推荐
- 【分享】一个Asp.net mvc下的分页控件MvcPagerX
- 打造一个通用ASP.NET数据分页控件
- 【分享】一个Asp.net mvc下的分页控件MvcPagerX
- 打造一个通用ASP.NET数据分页控件
- 一个ASP.NET分页控件
- asp.net 一个页面放两个aspnetpager控件,同时分页时产生的问题
- 一个ASP.Net的DataGrid分页控件
- 分享一个asp.net pager分页控件
- asp.net中使用自定义控件的方式实现一个分页控件的代码
- asp.net中使用自定义控件的方式实现一个分页控件的代码
- [参考]一个ASP.Net的DataGrid分页控件,在Oracle数据库下,每次只取当前页的数据,不使用存储过程
- 分享一个asp.net pager分页控件
- asp.net mvc简单实现基于Razor的分页控件
- [转贴]创建用于ASP.NET的分页程序控件
- 一个"简单"的ASP.NET的服务器控件
- Asp.net 2.0 自定义控件开发[开发一个图表(WebChart)控件(柱状图示例)](示例代码下载)
- Pager Control for ASP.NET(asp.net分页控件例子)
- 不能使用ASP.NET验证控件---WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping。请添加一个名为 jquery (区分大小写)的 ScriptRes
- asp.net 分页-自己写分页控件
- 一个很好的ASP.NET控件资源站点