自定义控件(模板+数据绑定)

自定义控件(模板+数据绑定)

先说说模板

1<asp:datagrid id="mydg" runat="server">
2<columns>
3<asp:button id="Button1" runat="server">
4</asp:button></columns>
5</asp:datagrid>

这个

  1<columns>就是个模板标记,在自定义控件中可以自己任意设置这个<columns>,可以是<overred>...   
  2开始:   
  3新建个类   
  4MyItemTemPlateC.cs   
  5using System;   
  6using System.Collections;   
  7using System.ComponentModel;   
  8using System.Data;   
  9using System.Drawing;   
 10using System.Web;   
 11using System.Web.SessionState;   
 12using System.Web.UI;   
 13using System.Web.UI.WebControls;   
 14using System.Web.UI.HtmlControls; 
 15
 16  
 17namespace WebApp3   
 18{   
 19/// <summary>   
 20/// MyTemplateC 的摘要说明。   
 21/// </summary>   
 22[ParseChildren(true)]   
 23public class MyTemplateC: Control,INamingContainer   
 24{   
 25  
 26private ITemplate itemPlate;   
 27[TemplateContainer(typeof(MyContainer))]   
 28public ITemplate ItemTemplate   
 29{   
 30get{return itemPlate;}   
 31set{itemPlate=value;}   
 32} 
 33
 34// private string text;   
 35// public string Text   
 36// {   
 37// get{return text;}   
 38// set{text=value;}   
 39// }   
 40private IEnumerable dataSource;   
 41public IEnumerable DaTaSource   
 42{   
 43get{return this.dataSource;}   
 44set{this.dataSource=value;}   
 45} 
 46
 47protected override void OnDataBinding(EventArgs e)   
 48{   
 49HasCreatDataSource();   
 50//this.EnsureChildControls();//确定是否包含子控件,否则创建   
 51/// <summary>   
 52/// 为确保直到再次发生数据绑定时才创建子控件,在创建对象并将它添加到控件的   
 53///ControlCollection 对象之后,将 ChildControlsCreated 属性设置为 true。   
 54/// </summary>   
 55this.ChildControlsCreated=true;   
 56base.OnDataBinding (e);   
 57} 
 58
 59  
 60protected override void CreateChildControls()   
 61{   
 62if(itemPlate!=null)   
 63{ 
 64
 65int itemCount=(int)ViewState["_itemCount"];   
 66for(int i=0;i<itemcount;i++) <summary="" else="" itemplate.instantiatein(mycontainer);="" literalcontrol("="" mycontainer="new" mycontainer();="" no="" template"));="" this.controls.add(mycontainer);="" this.controls.add(new="" {="" }="" 当由类实现时,创建子控件对象="">   
 67/// 方法HasCreatDataSource作用是记录子控件的数目以及实例化子控件   
 68///    
 69private void HasCreatDataSource()   
 70{   
 71if(itemPlate!=null)   
 72{   
 73int itemCount=0;//记录共创建多少个子控件   
 74foreach(string s in dataSource)   
 75{   
 76MyContainer myContainer=new MyContainer();   
 77myContainer.MyText(s);   
 78itemPlate.InstantiateIn(myContainer);//当由类实现时,创建子控件对象   
 79this.Controls.Add(myContainer);   
 80itemCount++;   
 81}   
 82ViewState["_itemCount"]=itemCount;   
 83}   
 84else   
 85{   
 86this.Controls.Add(new LiteralControl(" NO TEMPLATE"));   
 87}   
 88  
 89}   
 90} 
 91
 92  
 93public class MyContainer:Control,INamingContainer   
 94{   
 95private string text;   
 96public string Text   
 97{   
 98get{return text;}   
 99set{text=value;}   
100} 
101
102public MyContainer()   
103{   
104//this.text=msg;   
105}   
106public string MyText(string msg)   
107{   
108this.text=msg;   
109return this.text;   
110  
111}   
112  
113} 
114
115}</itemcount;i++)></overred></columns></columns>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus