如果你正在使用ASP.NET,你一定对DataGrid控件非常熟悉。DataGrid控件提供了各种特性,通过这些特性可以很容易地在一个Web页面上以列表形式显示数据。但是,如果你不想使用HTML表格形式呢?此时,可以使用一个DataGrid的一个鲜为人知的兄弟控件,即Repeater控件。Repeater控件提供显示你所需要数据的灵活性。
Repeater控件是什么?
Repeater是一个可重复操作的控件,也就是说,它通过使用模板显示一个数据源的内容,而你可以很容易地配置这些模板。Repeater包含如标题和页脚这样的数据,它可以遍历所有的数据选项并应用到模板中。
与DataGrid和DataList控件不同,Repeater控件并不是由WebControl类派生而来。所以,它不包括一些通用的格式属性,比如控制字体,颜色,等等。然而,使用Repeater控件,HTML(或者一个样式表)或者ASP.NET类可以处理这些属性。
HTML在哪里?
Repeater控件与DataGrid (以及DataList)控件的主要区别是在于如何处理HTML。ASP.NET建立HTML代码以显示DataGrid控件,但Repeater允许开发人员决定如何显示数据。所以,你可以选择将数据显示在一个HTML表格中或者一个顺序列表中。这主要取决于你的选择,但你必须将正确的HTML插入到ASP.NET页面中。
模板与DataList一样,Repeater控件只支持模板。以下的模板可供选择:
AlternatingItemTemplate: 指定如何显示每一其它选项。
ItemTemplate: 指定如何显示选项。(AlternatingItemTemplate可以覆盖这一模板。)
HeaderTemplate: 建立如何显示标题。
FooterTemplate: 建立如何显示页脚。
SeparatorTemplate: 指定如何显示不同选项之间的分隔符。
你可以使用这些模板来显示你希望的数据。唯一具有强制性的模板是ItemTemplate,所有其它的模板都是具有选择性的。
数据
对于处理一个数据源,Repeater控件具有与DataGrid与DataList相同的属性:
DataMember:获得或者设置与 Repeater 控件绑定的相应DataSource属性的表格。
DataSource:获得或者设置为 Repeater 显示提供数据的数据源。
除此之外,还有一个Items属性,你可以通过这一属性编程访问Repeater数据中单一选项。它返回一个RepeaterItemCollection对象,为一组RepeaterItem对象的集合,代表 Repeater 数据的每一行。
ASP.NET Web数据控件还有其它一个共性:它们都使用DataBind方法来生成用户界面。调用这一方法可以返回并显示数据(假设DataSource和DataMember属性设置正确)。在查看DataBind方法之前,我们先看看如何在一个Web页面中使用一个Repeater控件。
使用Repeater控件
使用Repeater控件的第一步骤是决定我们将要使用的数据源和字段。例如,我们将要使用SQL Server Northwind数据库中的Employees列表。Web页面将显示职工的完整名字,地址,以及电话号码。HTML将使用DIV标记,用 Repeater 模板来分隔内容。下面是 Web 页面的 HTML 内容:
1

<%
@ Page language="c#" %> 2

<%
@ Import Namespace="System.Data" %> 3

<%
@ Import Namespace="System.Data.SqlClient" %> 4
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > 5
<html><head> 6
<title>Builder.com Repeater Example</title> 7
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1"> 8
<meta name="CODE_LANGUAGE" Content="C#"> 9

<style>
10

.alternate {
}{ 11
FONT-WEIGHT: bold; 12
COLOR: black; 13
FONT-FAMILY: Verdana, 'Times New Roman'; 14
BACKGROUND-COLOR: yellow 15
} 16

.row {
}{ 17
FONT-WEIGHT: bold; 18
COLOR: black; 19
FONT-FAMILY: Verdana, 'Times New Roman'; 20
BACKGROUND-COLOR: white 21
} 22

.footer {
}{ 23
FONT-WEIGHT: bold; 24
COLOR: red; 25
FONT-FAMILY: Verdana, 'Times New Roman'; 26
BACKGROUND-COLOR: gray 27
} 28

.header {
}{ 29
FONT-WEIGHT: bold; 30
COLOR: yellow; 31
FONT-FAMILY: Verdana, 'Times New Roman'; 32
BACKGROUND-COLOR: gray 33
} 34

.box {
}{ 35
BORDER-RIGHT: blue groove; 36
BORDER-TOP: blue groove; 37
DISPLAY: block; 38
VERTICAL-ALIGN: baseline; 39
OVERFLOW: auto; 40
BORDER-LEFT: blue groove; 41
CURSOR: wait; 42
BORDER-BOTTOM: blue groove; 43
FONT-FAMILY: verdana; 44
TEXT-ALIGN: center 45
} 46

body {
}{ 47
background: #333; 48
} 49
</style> 50

<script language="C#" runat="server">
51

private void Page_Load(object sender, System.EventArgs e)
{ 52

if (!IsPostBack)
{ 53
DataSet dset = new DataSet(); 54
string conn = "server=(local);Initial Catalog=Northwind;UID=ctester;PWD=password"; 55
string qry = "SELECT firstname, lastname, address, city, region, postalcode, 56
homephone FROM employees"; 57
SqlDataAdapter sda = new SqlDataAdapter(qry, conn); 58
sda.Fill(dset); 59
Repeater1.DataSource = dset.Tables[0].DefaultView; 60
Repeater1.DataBind(); 61
} } 62
</script></head> 63
<body MS_POSITIONING="GridLayout" bgColor="#00cc99"> 64
<form id="Form1" method="post" runat="server"> 65
<div class="box"> 66
<asp:Repeater id="Repeater1" runat="server"> 67
<HeaderTemplate> 68
<div class="header" id="header">Northwind Employees</div> 69
</HeaderTemplate> 70
<SeparatorTemplate><hr /></SeparatorTemplate> 71
<ItemTemplate><div class="row"> 72

<%
# ((DataRowView)Container.DataItem)["FirstName"] %> 73

<%
# ((DataRowView)Container.DataItem)["LastName"] %><br> 74

<%
# ((DataRowView)Container.DataItem)["Address"] %><br> 75

<%
# ((DataRowView)Container.DataItem)["City"] %>, 76

<%
# ((DataRowView)Container.DataItem)["Region"] %> 77

<%
# ((DataRowView)Container.DataItem)["PostalCode"] %><br> 78

<%
# ((DataRowView)Container.DataItem)["HomePhone"] %> 79
</div></ItemTemplate> 80
<AlternatingItemTemplate><div class="alternate"> 81

<%
# ((DataRowView)Container.DataItem)["FirstName"] %> 82

<%
# ((DataRowView)Container.DataItem)["LastName"] %><br> 83

<%
# ((DataRowView)Container.DataItem)["Address"] %><br> 84

<%
# ((DataRowView)Container.DataItem)["City"] %>, 85

<%
# ((DataRowView)Container.DataItem)["Region"] %> 86

<%
# ((DataRowView)Container.DataItem)["PostalCode"] %><br> 87

<%
# ((DataRowView)Container.DataItem)["HomePhone"] %> 88
</div></AlternatingItemTemplate> 89
<FooterTemplate><div class="footer"> 90

<%
# ((DataView)Repeater1.DataSource).Count + " employees found." %> 91
</div></FooterTemplate> 92
</asp:Repeater></div></form></body></html> 93

94

可以注意到,每个 Repeater 行中样式表控制着文字的外观。除此之外,在网页内容中还添加了一个文本框。嵌入式 C# 代码从 Repeater 的数据源中获取相应的列。每个数据项都被转换成一个DataRowView对象以便显示。
这一页面并不是使用ASP.NET的“后台代码”性质。由于这一原因,页面引用了两个System.Data和System.Data.SqlClient空间名称。这对于使用DataRowView对象和与 SQL Server 交互访问是必需的。
当调用页面时就会触发Page_Load事件。此时会把数据源连接到 Repeater 控件上,并查询数据库。每一Repeater行的代码从潜在数据源中载入数据,并且Web页面显示这些数据。
这一设计使用了样式表(以及 HTML div 标记),所以更改外观只需要更改必要的样式表代码。为了进一步地将数据和显示分离,你可以在一个独立文件中存储样式表,并以一个HTML LINK标记来引用它们。
一个很好的选择
当与其他 ASP.NET 开发者交流时,开发人员对 Repeater 控件知之甚少,这真让我感到惊讶。虽然它不如DataGrid功能强大,但它在许多场合中仍然提供了出色的灵活性。Repeater 控件缺少编辑和排序功能,但可以通过进一步编程而实现。
注:引用自http://www.dwww.cn/new/20064161310261633.html
来源:https://www.cnblogs.com/QQQQXSH/archive/2006/07/20/455512.html