关于何种情况下使用DataGrid、DataList或Repeater的一些讨论(2)

[ DataGrid 控件 ]

在三种控件当中, DataGrid 是迄今为止功能最为丰富的,但也是最不灵活的控件。这种在输出 HTML 时不够灵活的特点是因为它最初就是被设计成以表格的形式输出数据。每一条记录输出时会建立一对

 1<tr> 标签,而每个字段的值输出时则建立一对  <td> 标签。 
 2
 3DataGrid  含有几个属性可以提高其可用性。如,通过设置  DataGrid  的  AllowSorting  属性为  true  ,并加入少量代码,  DataGrid  就具备了按不同字段排序的功能。此外,设定相关属性来实现分页以及单条记录编辑的功能更加增强了  DataGrid  的可用性。 
 4
 5除了在可用性方面的支持以外,  DataGrid  同时也相当节省开发时间。使用  DataGrid  在  WEB  页面上显示数据只需要两行代码。一行用来设定与  DataGrid  绑定的数据源(  DataSource  ),另一条则用来执行绑定命令(  DataBind()  )。当然,在  Repeater  中实现这样的功能并非不可能,只是,相比较使用  DataGrid  而言,你需要花费相当多的时间和精力来实现这些功能。 
 6
 7尽管  DataGrid  有这样那样令人印象深刻的优点,它的两个缺点也同样不能忽视。首先,如前所述,  DataGrid  在个性化输出数据方面功能有限。当然,你可以定制字体、颜色以及线条宽度等等,但它始终只能是  HTML  表格。 
 8
 9每个在  DataGrid  中的列都是  DataGridColumn  类的一个实例。有五种  DataGrid  列的形式: 
10
11·  BoundColumn 
12
13·  ButtonColumn 
14
15·  EditColumn 
16
17·  HyperLinkColumn 
18
19·  TemplateColumn 
20
21每种类型都会以一种方式允许页面访问与  DataGrid  进行交互。例如,  BoundColumn  将  DataSource  的字段值显示为纯文本;而  HyperLinkColumn  则将之显示为一个超级链接。另外,开发者可以通过写一个继承自  DataGridColumn  的自定义类来定制  DataGrid  列的样式。 
22
23尽管  DataGrid  具有这么多的增强可用性的属性,却仍然显得死板而不够灵活。这是因为,不论什么样的属性,都需要对  DataGrid  所生成的表格进行相关的设置而生效。这无疑会使表格变得臃肿而失去灵活性。例如,  DataGridColumn  的设置会对表格的每一行的相应列生效。  DataGrid  的这种局限性阻碍了更有创意地显示数据。比如,你希望每五条记录被显示在一行,或根本不想要表格来显示数据,你将不得不放弃使用  DataGrid  。 
24
25DataGrid  的第二个缺陷是它的性能。在三种数据控件中,  DataGrid  是相对性能最差的。由  DataGrid  所生成的  ViewState  将会相当庞大,特别是在  DataGrid  含有较多的行时。当然,你也可以关闭  ViewState  功能,但代价是你将不能使用排序、分页以及记录编辑等功能。 
26
27为了测量  DataGrid  的性能,我使用了微软的  Web Application Stress Tool (WAST)  。精确的测试条件设定以及测试用代码将会在本文的结尾给出。 
28
29WAST  将会对  WEB  服务器发出对一个特定  URL  的请求。每个测试将会针对一个  URL  在一分钟之内连续不断地请求。  WAST  将会一个代表性能的数值,代表  WEB  服务器将会在一秒钟内执行  ASP.Net  页面多少次。 
30
31两个测试将显示一个仅仅显示数据的  DataGrid  。  DataGrid  将会显示  Northwinds  数据库中的  Customers  表的  4  个字段的内容(总计  91  条记录)。  DataGrid  的  AutoGenerateColumns  属性将会被设为  True  。第一个测试将  DataGrid  置于一个  Form  中,第二个则不置于  Form  中。将控件置于  Form  中而不指定其  EnableViewState  为  False  ,则控件将会一直使用  ViewState  来维持其状态。对  ViewState  的设定是为了有一个耗时的处理过程,来看一下它对于每秒种的页面请求有什么样的影响。测试结果见图  1  。 
32
33![](http://dev.csdn.net/Develop/ArticleImages/27/27435/CSDN_Dev_Image_2004-5-3122440.gif)
34
35图  1  :对  DataGrid  的每秒请求次数 
36
37在下面我们要讨论并测试的  DataList  和  Repeater  中,我们会看到它们的性能将优于  DataGrid  。</td></tr>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus