datagrid、datalist、repeater的区别与使用方法

上传人:第*** 文档编号:32815306 上传时间:2018-02-12 格式:DOC 页数:7 大小:49.50KB
返回 下载 相关 举报
datagrid、datalist、repeater的区别与使用方法_第1页
第1页 / 共7页
datagrid、datalist、repeater的区别与使用方法_第2页
第2页 / 共7页
datagrid、datalist、repeater的区别与使用方法_第3页
第3页 / 共7页
datagrid、datalist、repeater的区别与使用方法_第4页
第4页 / 共7页
datagrid、datalist、repeater的区别与使用方法_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《datagrid、datalist、repeater的区别与使用方法》由会员分享,可在线阅读,更多相关《datagrid、datalist、repeater的区别与使用方法(7页珍藏版)》请在金锄头文库上搜索。

1、DataGrid、DataList、Repeater 的区别与使用方法WEB 开发自从有了基于脚本的 WEB 编程技术( 如 ASP)以来,经历了一个漫长的过程。通过使用微软的 ASP.Net 技术,传统的 ASP 中大量的、单调乏味的、重复性的编程工作成为了历史。例如,象大多数 ASP 程序员所知的,在ASP 中显示数据库内容所需要的过程: 建立数据库连接 用 SQL 查询装载 ADO 数据集 显示所需要的任何 HTML 代码 遍历数据集中的记录 输出记录字段值及相关的 HTML 移向下一条记录 循环 显示所需要的 HTML 代码 又如,为了在表格中显示记录集的内容,我们需要输出一个tabl

2、e标签,然后开始循环。在循环中,每输出一条记录,需要先输出一个tr标签以及若干对td标签和/tr标签。最后,以一个/table 标签结尾。 在传统的 ASP 中使用的这种方法有一个主要的缺点:HTML 代码与 ASP源代码不得不纠缠在一起。对于那些也许并不理解程序设计的页面设计者或图形艺术家来说,想要更改 HTML 内容无疑是一场灾难。另外,代码的产生量也是惊人的,因为我们不仅需要从数据库中取得数据,还需要使之可视化。 好在,ASP.Net 提供了三个数据控件,使得原本在 ASP 中繁杂的工作变得简单。这三个控件属于数据 Web 控件,分别是 DataGrid,DataList 和Repeat

3、er。如果你对 ASP.Net 数据库编程有所了解的话,你至少应该有使用其中一种控件的经验。大多数情况下,我们从学习使用 DataGrid 开始,因为它的功能相对完整(数据显示、分页、编辑)并相对简单。然而,DataGrid 并非总是正确的选择。 本文将分别论述每个数据控件不同于其它数据控件的特点,以及由此带来的优缺点。正因为每种数据控件都有其自身的缺陷,因此在程序设计中并不存在最完美的选择。你必须权衡三种控件的优缺点并决定哪一种更加适合你的程序。 为了帮助比较,在对每个控件进行论述时,我们会专注于三个特性:可用性(从页面访问者的角度) 、开发时间和性能。我们首先描述一下这三种控件的共性,然后

4、分别深入地讨论三种控件的特点,每种控件如何实现以及如何体现可用性、开发时间和性能。 数据控件(Data Web Controls)的共同点 在我们讨论三种控件各自特性之前,有必要先看一看它们之间的共同点。一般来说,从编程流程来看,最显著的共同点就是,这三种控件都是用来显示数据的。另一个共同点是需要一个数据绑定的代码来将数据与控件绑定。这个过程只需要两行代码: dataWebControlID.DataSource = someDataSource dataWebControlID.DataBind() 一般情况下,someDataSource 对象是指数据控件的数据源属性,可以是 DataSe

5、t,SqlDataReader,OleDbDataReader 或一组数据(如数组、数组列表或其它的属于 System.Collection 名空间的类) 。不过,任意实现 IEnumerable 接口的对象也可以被绑定在数据控件上。 DataBind() 方法遍历一个特定的 DataSource 中的记录,并对其中的每条记录,建立一个条目并对应数据控件的 Item 集。数据控件中的每个条目将成为一个类的实例。这个类因数据控件的不同而有所区别。例如,DataGrid 中的每个条目是 DataGridItem 类的一个实例,而 Repeater 中的条目则是 RepeaterItem 类的一个实

6、例。 之所以使用不同的类来实例化不同数据控件的条目,是因为不同的数据控件将会使用不同的方式显示数据及相应的 HTML 代码。例如,DataGridItem 类继承自 TableRow 类,也就是说,每个 DataGridItem 的实例或多或少地可以看成一个表格中的一行。这是因为 DataGrid 被设计成可以借助 HTML 中的table标签以表格的形式显示数据,因此每条记录就是一个表格行。而Repeater 则被设计成可以自由定义数据输出的方式。所以,RepeaterItem 并不继承自 TableRow 就不奇怪了。 另一个三种数据控件的相同点是每种控件都被允许使用模板来显示数据。Dat

7、aList 和 Repeater 控件必须使用模板来输出数据,而 DataGrid 则允许通过TemplateColumn 而只使用模板来显示一列(在 DataGrod 单元中详细论述)。 另一个不是十分值得比较的地方是:DataGrid 和 DataList 都是继承自WebControl 类,而 Repeater 则是继承自 Control 类。WebControl 类包含一些用于美化的属性,如:BackColor、ForeColor、CssClass、BorderStyle 等等。这说明在使用 DataGrid 或 DataList 时,你可以设定这些属性来个性化输出。Repeater

8、控件则不具有这些属性。我们会在 Repeater 单元讨论如何使用模板来美化 Repeater 的输出。 DataGrid 控件 在三种控件当中,DataGrid 是迄今为止功能最为丰富的,但也是最不灵活的控件。这种在输出 HTML 时不够灵活的特点是因为它最初就是被设计成以表格的形式输出数据。每一条记录输出时会建立一对tr标签,而每个字段的值输出时则建立一对td标签。 DataGrid 含有几个属性可以提高其可用性。如,通过设置 DataGrid 的AllowSorting 属性为 true,并加入少量代码,DataGrid 就具备了按不同字段排序的功能。此外,设定相关属性来实现分页以及单条

9、记录编辑的功能更加增强了DataGrid 的可用性。 除了在可用性方面的支持以外,DataGrid 同时也相当节省开发时间。使用DataGrid 在 WEB 页面上显示数据只需要两行代码。一行用来设定与 DataGrid绑定的数据源(DataSource),另一条则用来执行绑定命令 (DataBind()。当然,在Repeater 中实现这样的功能并非不可能,只是,相比较使用 DataGrid 而言,你需要花费相当多的时间和精力来实现这些功能。 尽管 DataGrid 有这样那样令人印象深刻的优点,它的两个缺点也同样不能忽视。首先,如前所述,DataGrid 在个性化输出数据方面功能有限。当然

10、,你可以定制字体、颜色以及线条宽度等等,但它始终只能是 HTML 表格。 每个在 DataGrid 中的列都是 DataGridColumn 类的一个实例。有五种DataGrid 列的形式: BoundColumn ButtonColumn EditColumn HyperLinkColumn TemplateColumn 每种类型都会以一种方式允许页面访问与 DataGrid 进行交互。例如,BoundColumn 将 DataSource 的字段值显示为纯文本;而 HyperLinkColumn 则将之显示为一个超级链接。另外,开发者可以通过写一个继承自DataGridColumn 的自定

11、义类来定制 DataGrid 列的样式。 尽管 DataGrid 具有这么多的增强可用性的属性,却仍然显得死板而不够灵活。这是因为,不论什么样的属性,都需要对 DataGrid 所生成的表格进行相关的设置而生效。这无疑会使表格变得臃肿而失去灵活性。例如,DataGridColumn 的设置会对表格的每一行的相应列生效。DataGrid 的这种局限性阻碍了更有创意地显示数据。比如,你希望每五条记录被显示在一行,或根本不想要表格来显示数据,你将不得不放弃使用 DataGrid。 DataGrid 的第二个缺陷是它的性能。在三种数据控件中,DataGrid 是相对性能最差的。由 DataGrid 所

12、生成的 ViewState 将会相当庞大,特别是在DataGrid 含有较多的行时。当然,你也可以关闭 ViewState 功能,但代价是你将不能使用排序、分页以及记录编辑等功能。 为了测量 DataGrid 的性能,我使用了微软的 Web Application Stress Tool (WAST)。精确的测试条件设定以及测试用代码将会在本文的结尾给出。 WAST 将会对 WEB 服务器发出对一个特定 URL 的请求。每个测试将会针对一个 URL 在一分钟之内连续不断地请求。WAST 将会一个代表性能的数值,代表 WEB 服务器将会在一秒钟内执行 ASP.Net 页面多少次。 两个测试将显示

13、一个仅仅显示数据的 DataGrid。DataGrid 将会显示Northwinds 数据库中的 Customers 表的 4 个字段的内容 (总计 91 条记录)。DataGrid 的 AutoGenerateColumns 属性将会被设为 True。第一个测试将DataGrid 置于一个 Form 中,第二个则不置于 Form 中。将控件置于 Form 中而不指定其 EnableViewState 为 False,则控件将会一直使用 ViewState 来维持其状态。对 ViewState 的设定是为了有一个耗时的处理过程,来看一下它对于每秒种的页面请求有什么样的影响。测试结果见图 1。

14、图 1:对 DataGrid 的每秒请求次数 在下面我们要讨论并测试的 DataList 和 Repeater 中,我们会看到它们的性能将优于 DataGrid。 DataList 控件 如前所述,DataGrid 使用表格来显示数据。你也许需要更进一步地控制数据的显示。例如,你想使数据在表格中显示,但不是每行只有一条记录,而是多条。又或者,你并不想使用表格来显示数据,而是只将它们显示在一系列span 标签中。 DataList 放弃了 DataGrid 中列表显示数据的概念,而是使用事先定义好的模板(Template)来定制显示。通过使用模板,可以同时使用 HTML 标签或数据绑定。这里的数

15、据绑定的形式为:%# % ,用来显示数据源中给定条目的数据记录。如下的 ItemTemplate 将会显示数据源中 CompanyName 字段: asp:DataList runat=server id=myDataList ItemTemplate %# DataBinder.Eval(Container.DataItem, CompanyName) % /ItemTemplate /asp:DataList 通过修改上面的模板,我们可以使 CompanyName 字段显示为粗体字,而ContactName 字段则以正常式样显示在 CompanyName 之下。 asp:DataList

16、runat=server id=myDataList ItemTemplate b %# DataBinder.Eval(Container.DataItem, CompanyName) % /b br / %# DataBinder.Eval(Container.DataItem, ContactName) % /ItemTemplate /asp:DataList 对于 DataList 数据源中的每一条记录,ItemTemplate 会通过定义 HTML 标签来以相同的样式显示数据。ItemTemplate 还支持其它其它 6 种模板: AlternatingItemTemplate EditItemTemplate FooterTemplate HeaderTemplate ItemTemplate SelectedItemTempl

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 工程造价

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号