一起谈.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绑定语法,如上面的几个例子.大家可以测试一下。
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绑定语法,如上面的几个例子.大家可以测试一下。
相关文章推荐
- 一起谈.NET技术,asp.net控件开发基础(18)
- 一起谈.NET技术,asp.net控件开发基础(3)
- 一起谈.NET技术,asp.net控件开发基础(13)
- 一起谈.NET技术,asp.net控件开发基础(14)
- 一起谈.NET技术,asp.net控件开发基础(21)
- 一起谈.NET技术,asp.net控件开发基础(20)
- 一起谈.NET技术,asp.net控件开发基础(2)
- 一起谈.NET技术,asp.net控件开发基础(19)
- 一起谈.NET技术,asp.net控件开发基础(12)
- 一起谈.NET技术,asp.net控件开发基础(11)
- 一起谈.NET技术,asp.net控件开发基础(1)
- 一起谈.NET技术,asp.net控件开发基础(23)
- 一起谈.NET技术,asp.net控件开发基础(10)
- 一起谈.NET技术,asp.net控件开发基础(9)
- 一起谈.NET技术,asp.net控件开发基础(8)
- 一起谈.NET技术,asp.net控件开发基础(7)
- 一起谈.NET技术,asp.net控件开发基础(17)
- 一起谈.NET技术,asp.net控件开发基础(6)
- 一起谈.NET技术,asp.net控件开发基础(22)
- 一起谈.NET技术,asp.net控件开发基础(5)