当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 用Repeater控件显示数据

ASP.NET
C# Quoted-Printable编码、解码
asp.net Google的translate工具翻译 API
.NET读取所有目录下文件正则匹配文本电子邮件
asp.net 半角全角转化工具
AjaxControlToolKit 显示浏览者本地语言的方法
asp.net HTML文件上传标签
ASP.NET 绑定DataSet中的多个表
ASP.NET 重定向的几种方法小结
Asp.Net 重定向必须要知道的一些资料
ASP.NET 导出到Excel时保留换行的代码
Asp.Net Cache缓存使用代码
document.getElementsByName和document.getElementById 在IE与FF中不同实现
GridView单元格合并
asp.net 大文件上传控件
asp.net 日期函数 某月的第一天和最后一天的日期
asp.net 时间类 一周的周一和周末的日期
C# javaScript函数的相互调用
asp.net membership 密码重设
"虚拟路径"..."映射到另一个应用程序,这是不允许的!
如何传值在2个页面之间 要求不刷新父页面,并且不能用Querystring传值

ASP.NET 中的 用Repeater控件显示数据


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 237 ::
收藏到网摘: n/a

如果你正在使用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.NETWeb数据控件还有其它一个共性:它们都使用DataBind方法来生成用户界面。调用这一方法可以返回并显示数据(假设DataSource和DataMember属性设置正确)。在查看DataBind方法之前,我们先看看如何在一个Web页面中使用一个Repeater控件。

使用Repeater控件
使用Repeater控件的第一步骤是决定我们将要使用的数据源和字段。例如,我们将要使用SQLServerNorthwind数据库中的Employees列表。Web页面将显示职工的完整名字,地址,以及电话号码。HTML将使用DIV标记,用Repeater模板来分隔内容。下面是Web页面的HTML内容:

<%@Pagelanguage="c#"%>
<%@ImportNamespace="System.Data"%>
<%@ImportNamespace="System.Data.SqlClient"%>
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
<html><head>
<title>Builder.comRepeaterExample</title>
<metaname="GENERATOR"Content="MicrosoftVisualStudio.NET7.1">
<metaname="CODE_LANGUAGE"Content="C#">
<style>
.alternate{
FONT-WEIGHT:bold;
COLOR:black;
FONT-FAMILY:Verdana,'TimesNewRoman';
BACKGROUND-COLOR:yellow
}
.row{
FONT-WEIGHT:bold;
COLOR:black;
FONT-FAMILY:Verdana,'TimesNewRoman';
BACKGROUND-COLOR:white
}
.footer{
FONT-WEIGHT:bold;
COLOR:red;
FONT-FAMILY:Verdana,'TimesNewRoman';
BACKGROUND-COLOR:gray
}
.header{
FONT-WEIGHT:bold;
COLOR:yellow;
FONT-FAMILY:Verdana,'TimesNewRoman';
BACKGROUND-COLOR:gray
}
.box{
BORDER-RIGHT:bluegroove;
BORDER-TOP:bluegroove;
DISPLAY:block;
VERTICAL-ALIGN:baseline;
OVERFLOW:auto;
BORDER-LEFT:bluegroove;
CURSOR:wait;
BORDER-BOTTOM:bluegroove;
FONT-FAMILY:verdana;
TEXT-ALIGN:center
}
body{
background:#333;
}
</style>
<scriptlanguage="C#"runat="server">
privatevoidPage_Load(objectsender,System.EventArgse){
if(!IsPostBack){
DataSetdset=newDataSet();
stringconn="server=(local);InitialCatalog=Northwind;UID=ctester;PWD=password";
stringqry="SELECTfirstname,lastname,address,city,region,postalcode,
homephoneFROMemployees";
SqlDataAdaptersda=newSqlDataAdapter(qry,conn);
sda.Fill(dset);
Repeater1.DataSource=dset.Tables[0].DefaultView;
Repeater1.DataBind();
}}
</script></head>
<bodyMS_POSITIONING="GridLayout"bgColor="#00cc99">
<formid="Form1"method="post"runat="server">
<divclass="box">
<asp:Repeaterid="Repeater1"runat="server">
<HeaderTemplate>
<divclass="header"id="header">NorthwindEmployees</div>
</HeaderTemplate>
<SeparatorTemplate><hr/></SeparatorTemplate>
<ItemTemplate><divclass="row">
<%#((DataRowView)Container.DataItem)["FirstName"]%>
<%#((DataRowView)Container.DataItem)["LastName"]%><br>
<%#((DataRowView)Container.DataItem)["Address"]%><br>
<%#((DataRowView)Container.DataItem)["City"]%>,
<%#((DataRowView)Container.DataItem)["Region"]%>
<%#((DataRowView)Container.DataItem)["PostalCode"]%><br>
<%#((DataRowView)Container.DataItem)["HomePhone"]%>
</div></ItemTemplate>
<AlternatingItemTemplate><divclass="alternate">
<%#((DataRowView)Container.DataItem)["FirstName"]%>
<%#((DataRowView)Container.DataItem)["LastName"]%><br>
<%#((DataRowView)Container.DataItem)["Address"]%><br>
<%#((DataRowView)Container.DataItem)["City"]%>,
<%#((DataRowView)Container.DataItem)["Region"]%>
<%#((DataRowView)Container.DataItem)["PostalCode"]%><br>
<%#((DataRowView)Container.DataItem)["HomePhone"]%>
</div></AlternatingItemTemplate>
<FooterTemplate><divclass="footer">
<%#((DataView)Repeater1.DataSource).Count+"employeesfound."%>
</div></FooterTemplate>
</asp:Repeater></div></form></body></html>

可以注意到,每个Repeater行中样式表控制着文字的外观。除此之外,在网页内容中还添加了一个文本框。嵌入式C#代码从Repeater的数据源中获取相应的列。每个数据项都被转换成一个DataRowView对象以便显示。

这一页面并不是使用ASP.NET的“后台代码”性质。由于这一原因,页面引用了两个System.Data和System.Data.SqlClient空间名称。这对于使用DataRowView对象和与SQLServer交互访问是必需的。

当调用页面时就会触发Page_Load事件。此时会把数据源连接到Repeater控件上,并查询数据库。每一Repeater行的代码从潜在数据源中载入数据,并且Web页面显示这些数据。

这一设计使用了样式表(以及HTMLdiv标记),所以更改外观只需要更改必要的样式表代码。为了进一步地将数据和显示分离,你可以在一个独立文件中存储样式表,并以一个HTMLLINK标记来引用它们。

一个很好的选择
当与其他ASP.NET开发者交流时,开发人员对Repeater控件知之甚少,这真让我感到惊讶。虽然它不如DataGrid功能强大,但它在许多场合中仍然提供了出色的灵活性。Repeater控件缺少编辑和排序功能,但可以通过进一步编程而实现。