第三讲 Web表单高级技巧

这部分讲得对初学者有点难,我觉得自定义控件,我要好好补上这一课!
DataGrid, DataList, Repeater
使用Template
自定义数据绑定
<ASP:TEMPLATECOLUMN HeaderText="Country">
 <ITEMTEMPLATE>
  <ASP:LABEL Runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Country") %>'></ASP:LABEL>
 </ITEMTEMPLATE>
 <EDITITEMTEMPLATE>
  <ASP:DROPDOWNLIST Runat="server" ID="lstCountries"></ASP:DROPDOWNLIST>
 </EDITITEMTEMPLATE>
</ASP:TEMPLATECOLUMN>

*自定义控件
派生的控件
用户控件
复合控件
自描绘控件
Designer

*自描绘控件
捕获按钮点击事件
IPostBackEventHandler
捕获提交来的数据
IPostBackDataHandler
使用客户端脚本

*Designer
ControlDesigner
TemplatedControlDesigner
UserControlDesigner
TextControlDesigner
……

*使用模板
ITemplate类型的Property表示一种模板
模板由框架自动实现

[TemplateContainer(typeof(MyContainer))]
public ITemplate ItemTemplate
{
  get { return itemTemplate; }
  set { itemTemplate=value; }
}

itemTemplate.InstantiateIn(this);

<MY:WEBCUSTOMCONTROL1 runat="server" Text="Hello world!" id="c1">
  <ITEMTEMPLATE>
    <ASP:BUTTON Runat="server" Text=" <%# Container.Text %>"></ASP:BUTTON>
  </ITEMTEMPLATE>
</MY:WEBCUSTOMCONTROL1>

private void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
{
  if(e.Item.ItemType==ListItemType.EditItem)
    {
 DropDownList lstCountries=(DropDownList)e.Item.FindControl("lstCountries");

 lstCountries.Items.Add("CN");
 lstCountries.Items.Add("US");
    }
}

*在数据绑定中使用模板
使用专门的 Container 定位数据行
处理 Postback 时没有数据源的情况
使用样式单
Bubble事件

网上也找到一些组件开发的资料
开心每一天,幸福每一刻
http://www.cnblogs.com/suiqirui19872005/category/109018.html

原文地址:https://www.cnblogs.com/iceberg2008/p/1410856.html