您的位置:首页 > 编程语言 > ASP

一起谈.NET技术,asp.net控件开发基础(16)

2011-09-01 23:47 751 查看
  这次我们继续讨论.主题是模板控件,模板控件将是复杂控件的起步

  1.asp.net内置的模板控件,了解模板控件

  如下图,以下为asp.net内置的模板控件
//声明变量
private ITemplate _itemTemplate;

//属性
[Browsable(false)]
[TemplateContainer(typeof(Article))]
[PersistenceMode(PersistenceMode.InnerProperty)]
public ITemplate ItemTemplate
protected override void CreateChildControls()
<custom:Article
id="Article1"
Runat="server">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</ItemTemplate>
</custom:Article>
OK,你可以看一下效果了,当然你可以定义多个模板然后在多个不同模板内添加内容.我们来看下其控件树内容,如下图
void Page_Load()
<custom:Article
id="Article1"
Runat="server">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</ItemTemplate>
</custom:Article>
好了,到这里你就实现了一个简单的动态模板控件了.

  2.3实现默认模板

  在购书网站上我们常常看到由于图书太多的情况下,管理人员未能将图书封面发布到网站上,这时此书可能出现默认的图片"尚为此书添加图书封面"。在一个具有模板的控件里,如果你未为控件添加模板属性的话,你可以通过实现默认模板来实现默认效果。

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

public class ArticleDefaultTemplate : ITemplate
[/b] protected override void CreateChildControls()
[/b] 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绑定数据以后的控件树
protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
[TemplateContainer(typeof(ProductItem))]
[PersistenceMode(PersistenceMode.InnerProperty)]
public ITemplate ItemTemplate
protected override void CreateChildControls()
void Page_Load()

<custom:Product
id="Product1"
Runat="Server">
<ItemTemplate>

Name: <%# Eval("Name") %>
<br />
Price: <%# Eval("Price", "{0:c}") %>
</ItemTemplate>
</custom:Product>

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


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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: