虽然 DataGrid 服务器控件对许多适于采用网格样式数据表示形式的 Web 应用程序方案很适合,但许多情况下,数据表示形式需要丰富得多。ASP.NET 提供两个控件 DataList 和 Repeater,这两个控件为呈现列表样式的数据提供了更大的灵活性。这些控件基于模板,因此没有自己的默认呈现形式。数据的呈现方式完全取决于控件模板的实现,而控件模板描述如何表示数据项。
与 DataGrid 控件一样,DataList 和 Repeater 也支持 DataSource 属性,该属性可设置为任何 ICollection、IEnumerable 或 IListSource 类型。此 DataSource 中的数据通过其 DataBind 方法绑定到控件。绑定了数据后,每个数据项的格式都由模板描述。
ItemTemplate 属性控制 DataSource 集合中每一项的呈现形式。在 ItemTemplate 内,可以定义任何任意表示代码(HTML 或其他)。使用 ASP.NET 数据绑定语法,可以将数据绑定中的值插入 DataList 或 Repeater 控件,如下例所示。
<ASP:Repeater id="MyRepeater" runat="server"> <ItemTemplate> Hello <%# DataBinder.Eval(Container.DataItem, "name") %> ! </ItemTemplate> </ASP:Repeater>
Container 表示直接层次结构中支持 System.Web.UI.INamingContainer 标记接口的第一个控件。本例中,Container 解析为 System.Web.UI.WebControls.RepeaterItem 类型的对象,而该类型具有 DataItem 属性。当 Repeater 在 DataSource 集合上迭代时,DataItem 随之包含该集合的当前项。例如,如果将数据源设置为 Employee 对象的 ArrayList,则 DataItem 是 Employees 类型。当绑定到 DataView 时,DataItem 是 DataRowView 类型。