Repeater Web 服务器控件概述

更新:2007 年 11 月

Repeater Web 服务器控件是一个数据绑定容器控件,用于生成各个项的列表。使用模板来定义网页上的各个项的布局。当该页运行时,该控件为数据源中的每个项重复此布局。

本主题包括:

  • 背景

  • 代码示例

  • 类参考

背景

Repeater Web 服务器控件是一个容器控件,它使您可以从页的任何可用数据中创建出自定义列表。Repeater 控件不具备内置的呈现功能,这表示用户必须通过创建模板为 Repeater 控件提供布局。当该页运行时,Repeater 控件依次通过数据源中的记录,并为每个记录呈现一个项。

由于 Repeater 控件没有默认的外观,因此可以使用该控件创建许多种列表,其中包括:

  • 表布局

  • 逗号分隔的列表(例如,a、b、c、d 等)

  • XML 格式的列表

配合模板使用 Repeater 控件

若要使用 Repeater 控件,请创建定义控件内容布局的模板。模板可以包含标记和控件的任意组合。如果未定义模板,或者如果模板都不包含元素,则当应用程序运行时,该控件不显示在页上。

下表描述了 Repeater 控件支持的模板。

模板属性

说明

ItemTemplate

包含要为数据源中每个数据项都要呈现一次的 HTML 元素和控件。

AlternatingItemTemplate

包含要为数据源中每个数据项都要呈现一次的 HTML 元素和控件。通常,可以使用此模板为交替项创建不同的外观,例如指定一种与在 ItemTemplate 中指定的颜色不同的背景色。

HeaderTemplateFooterTemplate

包含在列表的开始和结束处分别呈现的文本和控件。

SeparatorTemplate

包含在每项之间呈现的元素。典型的示例可能是一条直线(使用 hr 元素)。

有关更多信息,请参见 ASP.NET Web 服务器控件模板

将数据绑定到 Repeater 控件

必须将 Repeater 控件绑定到数据源。最常用的数据源是数据源控件,如 SqlDataSourceObjectDataSource 控件。或者,可以将 Repeater 控件绑定到任何实现 IEnumerable 接口的类,包括 ADO.NET 数据集(DataSet 类)、数据读取器(SqlDataReader 类或 OleDbDataReader 类)或大部分集合。

绑定数据时,您可以为 Repeater 控件整体指定一个数据源。向 Repeater 控件添加控件时(例如,向模板中添加 LabelTextBox 控件时),可以使用数据绑定语法将单个控件绑定到数据源返回的项的某个字段。下面的示例演示一个包含数据绑定 Label 控件的 ItemTemplate

<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
  <title>ASP.NET Repeater Example</title>
</head>
<body>
  <form id="form1" runat="server">
    <div>
      <asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1">
        <HeaderTemplate>
          <table>
            <tr>
              <th>
                Name</th>
              <th>
                Description</th>
            </tr>
        </HeaderTemplate>
        <ItemTemplate>
          <tr>
            <td style="background-color:#CCFFCC">
              <asp:Label runat="server" ID="Label1" Text='<%# Eval("CategoryName") %>' />
            </td>
            <td style="background-color:#CCFFCC">
              <asp:Label runat="server" ID="Label2" Text='<%# Eval("Description") %>' />
            </td>
          </tr>
        </ItemTemplate>
        <AlternatingItemTemplate>
          <tr>
            <td>
              <asp:Label runat="server" ID="Label3" Text='<%# Eval("CategoryName") %>' />
            </td>
            <td>
              <asp:Label runat="server" ID="Label4" Text='<%# Eval("Description") %>' />
            </td>
          </tr>
        </AlternatingItemTemplate>
        <FooterTemplate>
          </table>
        </FooterTemplate>
      </asp:Repeater>
      <asp:SqlDataSource ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
        ID="SqlDataSource1" runat="server" SelectCommand="SELECT [CategoryID], [CategoryName], 
            [Description] FROM [Categories]"></asp:SqlDataSource>
    </div>
  </form>
</body>
</html>
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
  <title>ASP.NET Repeater Example</title>
</head>
<body>
  <form id="form1" runat="server">
    <div>
      <asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1">
        <HeaderTemplate>
          <table>
            <tr>
              <th>
                Name</th>
              <th>
                Description</th>
            </tr>
        </HeaderTemplate>
        <ItemTemplate>
          <tr>
            <td style="background-color:#CCFFCC">
              <asp:Label runat="server" ID="Label1" Text='<%# Eval("CategoryName") %>' />
            </td>
            <td style="background-color:#CCFFCC">
              <asp:Label runat="server" ID="Label2" Text='<%# Eval("Description") %>' />
            </td>
          </tr>
        </ItemTemplate>
        <AlternatingItemTemplate>
          <tr>
            <td>
              <asp:Label runat="server" ID="Label3" Text='<%# Eval("CategoryName") %>' />
            </td>
            <td>
              <asp:Label runat="server" ID="Label4" Text='<%# Eval("Description") %>' />
            </td>
          </tr>
        </AlternatingItemTemplate>
        <FooterTemplate>
          </table>
        </FooterTemplate>
      </asp:Repeater>
      <asp:SqlDataSource ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
        ID="SqlDataSource1" runat="server" SelectCommand="SELECT [CategoryID], [CategoryName], 
              [Description] FROM [Categories]"></asp:SqlDataSource>
    </div>
  </form>
</body>
</html>
x8f2zez5.alert_note(zh-cn,VS.90).gif说明:

不能在页眉、页脚和分隔符模板中使用 Eval 数据绑定函数来绑定控件。如果这些模板中包含控件,则可以简单地静态定义这些控件的属性。

有关 Web 服务器控件中的数据绑定的概述,请参见演练:网页中的基本数据访问如何:向 Web 窗体页添加 Repeater Web 服务器控件

Repeater 控件支持的事件

Repeater 控件支持多种事件。其中的 ItemCreated 事件可让您在运行时自定义项的创建过程。ItemDataBound 事件还为您提供了自定义 Repeater 控件的能力,但需要在数据可用于检查之后。例如,如果您正使用 Repeater 控件显示任务列表,则可以用红色文本显示过期项,以黑色文本显示已完成项,以绿色文本显示其他任务。这两个事件都可用于重写来自模板定义的格式设置。

ItemCommand 事件在响应各个项中的按钮单击时引发。此事件被设计为允许您在项模板中嵌入 ButtonLinkButtonImageButton Web 服务器控件,并在发生按钮单击时得到通知。当用户单击按钮时,此事件便会被发送到按钮的容器,即 Repeater 控件。ItemCommand 事件的最常见用途是对 Repeater 控件的更新和删除行为编程。由于每个按钮单击都引发相同的 ItemCommand 事件,因此可以将每个按钮的 CommandName 属性设置为唯一的字符串值,以此来确定单击了哪个按钮。RepeaterCommandEventArgs 参数的 CommandSource 属性包含被单击按钮的 CommandName 属性。

有关更多信息,请参见如何:响应 DataList 或 Repeater 项中的按钮事件

返回页首

代码示例

如何:向 Web 窗体页添加 Repeater Web 服务器控件

返回页首

类参考

下表列出了与 Repeater 控件相关的关键类。

成员

说明

Repeater

控件的主类。

返回页首

请参见

参考

DataList Web 服务器控件概述