[ 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
34
35图 1 :对 DataGrid 的每秒请求次数
36
37在下面我们要讨论并测试的 DataList 和 Repeater 中,我们会看到它们的性能将优于 DataGrid 。</td></tr>