快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
aBind();
   }

通过Container数据绑定表达式获取容器对象属性,此处容器对象为默认的Article

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

如下实现

<custom:Article
     id="Article1"
     Runat="server">
     <ItemTemplate>
     <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
     <%# Container.Title%><br />
     <%# Container.Author %><br />
     <%# Container.Contents %><br />
     </ItemTemplate>
   </custom:Article>

好了,到这里你就实现了一个简单的动态模板控件了.

2.3 实现默认模板

在购书网站上我们常常看到由于图书太多的情况下,管理人员未能将图书封面发布到网站上,这时此书可能出现默认的图片"尚为此书添加图书封面"

在一个具有模板的控件里,如果你未为控件添加模板属性的话,你可以通过实现默认模板来实现默认效果.

(1)那你第一步要做的就是定义一个自定义模板.此模板需要实现ITemplate接口,实现InstantiateIn方法.看一下典型实现,如下代码

public class ArticleDefaultTemplate : ITemplate
   {
     public void InstantiateIn(Control container)
     {
       Label lblTitle = new Label();
       lblTitle.DataBinding += new EventHandler(lblTitle_DataBinding);

       Label lblAuthor = new Label();
       lblAuthor.DataBinding += new EventHandler(lblAuthor_DataBinding);

       Label lblContents = new Label();
       lblContents.DataBinding += new EventHandler(lblContents_DataBinding);

       container.Controls.Add(lblTitle);
       container.Controls.Add(new LiteralControl("<br />"));
       container.Controls.Add(lblAuthor);
       container.Controls.Add(new LiteralControl("<br />"));
       container.Controls.Add(lblContents);
     }

     void lblTitle_DataBinding(object sender, EventArgs e)
     {
       Label lblTitle = (Label)sender;
       ArticleWithDefault container = (ArticleWithDefault)lblTitle.NamingContainer;
       lblTitle.Text = container.Title;
     }

     void lblAuthor_DataBinding(object sender, EventArgs e)
     {
       Label lblAuthor = (Label)sender;
       ArticleWithDefault container = (ArticleWithDefault)lblAuthor.NamingContainer;
       lblAuthor.Text = container.Author;
     }

     void lblContents_DataBinding(object sender, EventArgs e)
     {
       Label lblContents = (Label)sender;
       ArticleWithDefault container = (ArticleWithDefault)lblContents.NamingContainer;
       lblContents.Text = container.Contents;
     }

   }

在InstantiateIn方法中,定义了默认控件,并实现了默认绑定.在各自的数据绑定事件里通过容器控件(默认容器控件为ArticleWithDefault,此处还是没自定义容器控件,下面会介绍)的NamingContainer属性获取控件ID值.然后对控件进行赋值.

(2)重写CreateChildControls方法

当未定义模板属性时,则实现默认模板

protected override void CreateChildControls()
     {
       if (_itemTemplate == null)
         _item

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号