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

http://tech.ddvip.com   2007年09月02日    社区交流

内容摘要:ASP.NET控件开发基础

  然后在主控件中如下实现

   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 { _itemTemplate = value; }
    }

  (3)重写CreateChildControls方法

  注意了,此处模板的InstantiateIn方法不再是this了,而是自定义容器控件了,再用数据绑定表达式访问的将是ProductItem的数据(即自定义容器控件的数据)

    protected override void CreateChildControls()
    {
      _item = new ProductItem();
      _itemTemplate.InstantiateIn(_item);
      Controls.Add(_item);
    }

  (4)页面代码

  void Page_Load()
  {
    Product1.Name = "Laptop Computer";
    Product1.Price = 1254.12m;
    Product1.DataBind();
  }
  
  <custom:Product
    id="Product1"
    Runat="Server">
    <ItemTemplate>
   
    Name: <%# Eval("Name") %>
    <br />
    Price: <%# Eval("Price", "{0:c}") %>
    </ItemTemplate>  
  </custom:Product>

  上面以Eval来绑定数据,也可以用Container表达式,如下图,其类型为ProductItem

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

  注意:当不是数据绑定控件时,则不能用Eval绑定语法,如上面的几个例子.大家可以测试一下.

  好了本次该讲的我想也讲完了,以上代码多为asp.net2.0揭密的例子

  本来上面代码完全可以在一个控件中实现的,但我把其分开来讨论,这样理解的更加深刻.上面都是模板控件基础.将为以后实现复杂效果打下基础.本次未涉及到数据绑定,下次我们继续讨论.希望对你有帮助,错误之处还请提出.

责编:豆豆技术应用

正在加载评论...