ASP.NET控件开发基础(19)2011-01-08Clingingboy上两篇讨论了基本数据绑定控件的实现步骤,基本上我们按着步骤来就可以做出简单的数据绑定控件了。过年前在看DataGrid的实现,本来想写这个的,但2.0出了GridView了,再说表格控件实现比较复杂,所以先放着。我们一起打开MSDN来看点别的,当然主题还是离不开数据绑定控件。一.数据绑定控件的模板打开MSDN一看,我们会发现DataList和DataGrid都不是直接继承自WebControl类的,而是继承自一个叫BaseDataList的类。唯独Repeater是直接继承自WebControl类的,Repeater的简单也就代表定义样式的灵活。DataList和DataGrid则是规规矩矩的经过加工的列表控件。再看看BaseDataList,其是一个抽象类。其为数据列表控件提供了公共的列表样式,属性,布局。并定义了两个抽象方法CreateControlHierarchy方法和PrepareControlHierarchy方法,留给子类实现,这两个方法上两篇,我们都认识过了。主要是因为定义了不同模板和样式。可以说是一个典型的模板类

如果你也需要写一个基于表格的数据绑定控件,可以跳过从WebControl继承,优先考虑从BaseDataList开始。如果这个抽象类无法满足需求,那你便放弃他。自己定义一个抽象类,定义公共的属性,方法等,这样对以后的扩展有利。当然一般情况下,我们的需求就够用了。这里我们可以结合设计模式的学习得出的一个结论:把公用的成员抽象出来说到这里,我们漏掉了一个数据绑定控件的一个大话题,列表绑定控件,如DropDownList,ListBox,CheckBoxList等下面来看看Repeater版本的DropDownList
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
SelectCommand="SELECT top 3 [ProductID], [ProductName] FROM [Alphabetical list of products]">
</asp:SqlDataSource>
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1">
<HeaderTemplate>
<select id="Select1">
</HeaderTemplate>
<ItemTemplate>
<option><%# Eval("ProductName")%></option>
</ItemTemplate>
<FooterTemplate>
</select>
</FooterTemplate>
</asp:Repeater>
<asp:DropDownList ID="DropDownList2"
DataTextField="ProductName"
runat="server" DataSourceID="SqlDataSource1">
</asp:DropDownList>其实现效果和DropDownList一模一样。Repeater灵活,但这种做法并不优雅。列表控件也有一个抽象类ListControl。列表控件从此类派生。2.0新加了一个控件BulletedList.相信大家对这几个控件是绝对的很熟悉,常与其打交道,我们就一起来看看他们是怎么实现的。
System.Web.UI.WebControls.ListControl
System.Web.UI.WebControls.BulletedList
System.Web.UI.WebControls.CheckBoxList
System.Web.UI.WebControls.DropDownList
System.Web.UI.WebControls.ListBox
System.Web.UI.WebControls.RadioButtonList