《2022年自定义控件,c#分页控件可用 .pdf》由会员分享,可在线阅读,更多相关《2022年自定义控件,c#分页控件可用 .pdf(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、自定义控件, c# 分页控件相信大多数程序员最开始都想写一些自定义的控件,而我们最常用的到就是分页控件,所以我希望在这里将自己的一点心得与大家分享,讲讲分页控件的原理。起始自定义控件最终仍然是一个类,即是object,那我们如果使用它呢,因为微软框架的自定义空间接口是System.Web.UI.WebControls.WebControl,所有的自定义控件都要继承与这个类,所以 我们先声明一个类Page01 ,让这个类继承System.Web.UI.WebControls.WebControl,而由于分页控件需要在点击翻页的按钮时触发数据的回传,所以还必须实现接口IPostBackEventH
2、andler,所以我们新建一个类,代码如下:DefaultProperty(),ToolboxData() public class Page01 : System.Web.UI.WebControls.WebControl,IPostBackEventHandler . 这里我们呆会要写类具体的属性,字段和方法其中最桑面一行DefaultProperty(),ToolboxData()为自定义属性,这里指明了我们在前台调用时的语法格式。一个分页控件不要的属性,每页显示的记录数,总记录数,当前页数,总页数,这里我再加上控件占用的宽度private int record_Count;/总记录数p
3、rivate int page_Count;/ 总页数private int page_Size = 2;/ 每页显示记录数private int page_Current = 1;/ 当前页数private int page_width = 700;/宽度private string page_Index = ; Bindable(true), Category(Appearance), DefaultValue() 最后一句用于制定该空间可以用于绑定等信息。为微软底层提供的框架。申明完字段,我们声明属性为字段赋值和读取指public int Page_Width get return pa
4、ge_width; set page_width = value; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 11 页 - - - - - - - - - public int Record_Count get return record_Count; set record_Count = value; public int Page_Count get return page_Count; set page_Count = value; public int Pa
5、ge_Size get return page_Size; set page_Size = value; public int Page_Current get return page_Current; set page_Current = value; public string Page_Index get return page_Index; set page_Index = value; 由于自定义控件继承与webcontrols ,所以我们可以重载Render 方法重新绘制页面的输出,这个 Render 有个类型为HtmlTextWriter 的参数,调用该实例的Write 方法就可
6、像页面输出指定字符串。protected override void Render(HtmlTextWriter writer) writer.Write(/n); writer.Write( 记录数 :); writer.Write(record_Count); writer.Write( 总页数 :); writer.Write(page_Count + ); if (page_Current != 1) writer.Write(); for (int i = 1; i = page_Count; i+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - -
7、- - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 11 页 - - - - - - - - - if (i = page_Current) writer.Write(); else writer.Write(); if (page_Current != page_Count) writer.Write(); writer.Write(/n); 其中的逻辑思路笔者可自定义,如当为第一页时不显示上一页,或让第一页的按钮为不可点击状态等等。我们还要定义一个委托和事件,让某些具体的事件发生时触发,这里就是翻页事件/ / 定义委托,实现翻页时触发事件/ / 发送通
8、知的对象 / 包含所有接受者需要的附件信息 public delegate void ItemPageIndexChanged(object sender, PageEventArgs args); / / 定义执行的事件/ public event ItemPageIndexChanged PageChangeIndex; 最后我们就要调用继承于IPostBackEventHandler 这个类的方法RaisePostBackEvent来处理数据回传时我们要做的操作public void RaisePostBackEvent(string eventArgument) 名师资料总结 - -
9、-精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 11 页 - - - - - - - - - try this.Page_Current = Int32.Parse(eventArgument); catch this.page_Current = 1; PageEventArgs e = new PageEventArgs(); e.NewPageIndex = page_Current; PageChangeIndex(this, e); 此时这个 eventArgument 参数就是我们
10、回传的页数。方法里我们将当前页重新赋值,并声明要 改 变 状 态 的PageEventArgs 对 象 实 例 , 将 它 的NewPageIndex 设 置 为 当 前 页 数 ,PageEventArgs类声明如下public class PageEventArgs : EventArgs / / 最新页面/ private int newpageindex; / / 属性设置最新页面的页码值/ public int NewPageIndex get return newpageindex; set newpageindex = value; 即是我们在触发时间时要传递的对象。这样我们就定
11、义完了一个自定义控件,那我们在使用的时候需按照如下格式,在需要用到控件 的 前 台 页 面 最 上 面 声 明 格 式 , 在 需 要 放 置 控 件 的 地 方 调 用 其中 Assembly 为程序集名称,Namespace 为命名空间名称,TagPrefix为用户自己定义的控件前缀,在调用处 即完成了控件的调用,那后台实现名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 11 页 - - - - - - - - - 翻页事件,this.Page1.PageChange
12、Index += new Page01.ItemPageIndexChanged(Page1_PageChangeIndex); void Page1_PageChangeIndex(object sender, DBUtility.PageEventArgs args) this.Page1.Page_Current = args.NewPageIndex; SetValue(); 这里的 SetValue()就是翻页完成后用户根据需要定义的方法。那完整的代码如下:文件 Page01.cs类using System; using System.Collections.Generic; usi
13、ng System.Linq; using System.Text; using System.ComponentModel; using System.Web.UI; using System.Web; using System.Web.UI.WebControls; namespace DBUtility DefaultProperty(),ToolboxData() public class Page01 : System.Web.UI.WebControls.WebControl,IPostBackEventHandler private int record_Count;/总记录数p
14、rivate int page_Count;/ 总页数private int page_Size = 2;/ 每页显示记录数private int page_Current = 1;/ 当前页数private int page_width = 700;/宽度private string page_Index = ; Bindable(true), Category(Appearance), DefaultValue() public int Page_Width get return page_width; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - -
15、- - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 11 页 - - - - - - - - - set page_width = value; public int Record_Count get return record_Count; set record_Count = value; public int Page_Count get return page_Count; set page_Count = value; public int Page_Size get return page_Size; set page_Size = value;
16、public int Page_Current get return page_Current; set page_Current = value; public string Page_Index get return page_Index; set page_Index = value; protected override void Render(HtmlTextWriter writer) writer.Write(/n); writer.Write( 记录数 :); writer.Write(record_Count); writer.Write( 总页数 :); writer.Wr
17、ite(page_Count + ); if (page_Current != 1) writer.Write(); for (int i = 1; i = page_Count; i+) if (i = page_Current) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 11 页 - - - - - - - - - writer.Write(); else writer.Write(); if (page_Current != page_Count) write
18、r.Write(); writer.Write(/n); public static List PostBackCount; public void RaisePostBackEvent(string eventArgument) try this.Page_Current = Int32.Parse(eventArgument); catch this.page_Current = 1; PageEventArgs e = new PageEventArgs(); e.NewPageIndex = page_Current; PageChangeIndex(this, e); / / 定义委
19、托,实现翻页时触发事件/ / 发送通知的对象 / 包含所有接受者需要的附件信息 public delegate void ItemPageIndexChanged(object sender, PageEventArgs args); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 11 页 - - - - - - - - - / / 定义执行的事件/ public event ItemPageIndexChanged PageChangeIndex; 前台调用页面Def
20、ault.aspx 无标题页 后台代码default.aspx.cs using System; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 11 页 - - - - - - - - - using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using
21、 System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; using DBUtility; using System.Collections.Generic; namespace WebCrm public partial class Default : System.Web.UI.Page protected void Page_Load(object se
22、nder, EventArgs e) if (!IsPostBack) SetValue(); this.Page1.PageChangeIndex += new Page01.ItemPageIndexChanged(Page1_PageChangeIndex); /this.Page1.PageChangeIndex+=new EventHandler(Page1_PageChangeIndex); void Page1_PageChangeIndex(object sender, DBUtility.PageEventArgs args) this.Page1.Page_Current
23、= args.NewPageIndex; SetValue(); private void SetValue() int _records=0; string sql = string.Format(select USERNAME from TBASEUSER); IEnumerable rosList = DbHelperSQL.Query(sql, 15, this.Page1.Page_Current, out _records); test.DataSource = DbHelperSQL.Query(sql,2,this.Page1.Page_Current, out _record
24、s); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 11 页 - - - - - - - - - test.ItemDataBound += new RepeaterItemEventHandler(test_ItemDataBound); test.DataBind(); this.Page1.SetPage(2, _records); void test_ItemDataBound(object sender, RepeaterItemEventArgs e) i
25、f (e.Item.ItemType = ListItemType.AlternatingItem | e.Item.ItemType = ListItemType.Item) DataRow row = e.Item.DataItem as DataRow; Literal wtitle = e.Item.FindControl(wtitle) as Literal; wtitle.Text = rowUSERNAME.ToString(); 再补上我们之前说的保存数据的对象PageEventArgs .cs using System; using System.Collections.Ge
26、neric; using System.Linq; using System.Text; namespace DBUtility public class PageEventArgs : EventArgs / / 最新页面/ private int newpageindex; / / 属性设置最新页面的页码值/ public int NewPageIndex get return newpageindex; set newpageindex = value; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 11 页 - - - - - - - - - 这样我们就完成了自定义分页控件的制作,很简单吧,希望大家多多指点。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 11 页 - - - - - - - - -