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

ASP.NET
使用函数传递参数来执行相应的数据库操作
如何实现在窗体和窗体之间进行传递数据
ASP.NET中文显示之两种解决方法
ASP.NET、JSP及PHP之间的抉择
ASP.NET 2.0发送电子邮件中存在的问题
谈谈HtmlControl与WebControl的区别与用途
从ASP.NET 1.1升级到ASP.NET 2.0要考虑的Cookie问题
通过系统配置来提高ASP.NET应用程序的稳定性
妙用ASP2.0中的URL映射改变网址
AJAX实现web页面中级联菜单的设计
ASP.NET跨页面传值技巧总结
再议ASP.NET DataGrid控件中的“添加新行”功能
Geometry 对象浅析
重构CollapsibleSplitter
如何利用.NET Framework使用RSS feed
ASP.NET获取IP与MAC地址的方法
在ASP.NET 2.0中使用样式、主题和皮肤
ASP.NET中为GridView添加删除提示框
ASP.NET 2.0,无刷新页面新境界
看看一个.net版对话框控件

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 71 ::
收藏到网摘: 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控件缺少编辑和排序功能,但可以通过进一步编程而实现。