快速业务通道

ASP.NET控件开发基础(16)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
Template = new ArticleDefaultTemplate();
       _itemTemplate.InstantiateIn(this);
     }

(3)页面代码

下面实现效果跟2.2的定义的模板控件效果一样,这里只为说明默认模板的使用方法

void Page_Load()
   {
     ArticleWithDefault1.Title = "Creating Templated Databound Controls";
     ArticleWithDefault1.Author = "Stephen Walther";
     ArticleWithDefault1.Contents = "Blah, blah, blah, blah";
     ArticleWithDefault1.DataBind();
   }

   <custom:ArticleWithDefault
     id="ArticleWithDefault1"
     Runat="server" />

2.4实现自定义容器控件

上面我已经多次注明容器控件为默认自身控件,你可以通过自定义容器控件

GridView控件会自动把数据以表格形式呈现,DataList控件有DataListItem ,Repeater则有RepeaterItem.

这些控件实现数据绑定后,通常不是显示一条数据的,其控件都有一个Items属性,其表示项集合.

每项数据都在其Item里面,看一下DataList绑定数据以后的控件树

ASP.NET控件开发基础(16)

我们常常会需要在模板控件里以以下方式来获取模板内部控件

如在DataList控件中

protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
   {
     e.Item.FindControl("");
     DataList1.Items[0].BackColor = System.Drawing.Color.Red;
   }

通过此方法我们可以处理一些特殊的列和行.为实现上面效果,我们也可以为模板控件自定义容器控件

(1)自定义容器控件类

注意需要实现IDataItemContainer接口,就如DataList一样,其绑定的数据不可能是一条的.

public class ProductItem : WebControl, IDataItemContainer
   {
     private string _name;
     private decimal _price;

     public string Name
     {
       get { return _name; }
       set { _name = value; }
     }

     public decimal Price
     {
       get { return _price; }
       set { _price = value; }
     }

     public object DataItem
     {
       get
       {
         return this;
       }
     }

     public int DataItemIndex
     {
       get { return 0; }
     }

     public int DisplayIndex
     {
       get { return 0; }
     }
   }

然后在主控件中如下实现

private ProductItem _item;

     public string Name
     {
       get
       {
         EnsureChildControls();
         return _item.Name;
       }
       set
       {
         EnsureChildControls();
         _item.Name = value;
       }
     }

     public Decimal Price
     {
       get
       {
         EnsureChildControls();
         return _item.Price;
       }
       set
       {
         EnsureChildControls();
         _item.Price = value;
       }
     }

(2)用TemplateContainer与模板属性关联起来

[TemplateContainer(typeof(ProductItem))]
     [PersistenceMode(PersistenceMode.InnerProperty)]
     public ITemplate ItemTemplate
     {
       get { return _itemTemplate; }
       set { _itemTem

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号