2024年4月27日发(作者:)

对中三个数据控件DataGrid,DataList和Repeater的比较

提供了三个数据控件,使得在ASP中繁杂的工作变得简单。这三个

控件属于数据Web控件,分别是DataGrid,DataList和Repeater。本文将分别论述

每个数据控件不同于其它数据控件的特点,以及由此带来的优缺点。

一、三种数据控件的共同点

三种控件都是用来显示数据的,同时都需要一个数据绑定的代码来将数据与

控件绑定。这个过程只需要两行代码:

urce=someDataSource

nd( )

另外,每种控件都被允许使用模板来显示数据。DataList和Repeater控件必须

使用模板来输出数据,而DataGrid则允许通过TemplateColumn而只使用模板来显

示一列。

二、DataGrid控件

DataGrid的功能最丰富,但也是最不灵活的控件。这是因为它最初就是被设

计成以表格的形式输出数据:每一条记录输出时会建立一对标签,而每个字段的值

输出时则建立一对标签。

DataGrid含有几个属性可以提高其可用性,如通过设置DataGrid的

AllowSorting属性为true,并加入少量代码,DataGrid就具备了按不同字段排序的功

能。此外,设定相关属性来实现分页以及单条记录编辑的功能更加增强了DataGrid

的可用性。

除了在可用性方面的支持以外,DataGrid同时也相当节省开发时间。使用

DataGrid在WEB页面上显示数据只需要两行代码。一行用来设定与DataGrid绑

定的数据源(DataSource),另一条则用来执行绑定命令(DataBind())。当然,在

Repeater中实现这样的功能并非不可能,只是,相比使用DataGrid而言,需要花费更

多的时间和精力来实现。

尽管DataGrid有这样那样令人印象深刻的优点,它的两个缺点也同样不能忽

视。首先,如前所述,DataGrid在个性化输出数据方面功能有限。当然,你可以定制

字体、颜色以及线条宽度等等,但它始终只能是HTML表格。

尽管DataGrid具有许多增强可用性的属性,却仍然显得死板而不够灵活。这

是因为,不论什么样的属性,都需要对DataGrid所生成的表格进行相关的设置而生

效。这无疑会使表格变得臃肿而失去灵活性。例如,DataGridColumn的设置会对

表格的每一行的相应列生效。DataGrid的这种局限性阻碍了更有创意地显示数

据。比如,希望每五条记录被显示在一行,或根本不想要表格来显示数据,将不得不

放弃使用DataGrid。

三、DataList控件

DataList放弃了DataGrid中列表显示数据的概念,而是使用事先定义好的模

板(Template)来定制显示。通过使用模板,可以同时使用HTML标签或数据绑定。

这里的数据绑定的形式为:,用来显示数据源中给定条目的数据记录。

默认情况下DataList会将记录显示在HTML表格中。然而,通過设定

RepeatColumn属性,可以设置在一行中显示多少条记录。甚至可以指定DatList

的内容不显示在表格中,而是标签中。这可以通过设定RepearLayout属性来实现。

通过模板、RepeatColumn和RepeatLayout属性,DataList在定制数据输出样

式方面较DataGrid更具灵活性,使得用户界面设计可以更加友好。

通过EditItemIndex模板和EditCommand,UpdateCommand以及

CancelCommand事件,DataList将支持记录编辑的功能。不过,比较DataGrid而言,

这需要耗费更多的开发时间来实现。这种开发时间上的不一致主要有两个原因:

编辑/更新/删除按钮在DataGrid中可以通过设定EditCommandColumn来自

动添加;而在DataList中则需要手动添加。

DataGrid的BoundColumn列样式自动使用文本框控件来显示记录编辑界面。

而在DataList中,必须通过EditItemTemplate明确地指定使用什么样的编辑界面。

实现DataList中的分页、排序功能同记录编辑功能情况一样,并不算非常复

杂。这些功能可以通过巧妙的编程加以实现,只是耗费一些开发时间。所以,如果

需要用户对数据记录进行排序或编辑的话,使用DataGrid要比使用DataList方便

得多。

四、Repeater控件

Repeater控件是三种数据控件中在HTML输出方面最为灵活的控件。

Repeater会按照所要求的样式严格地输出数据记录。所以,如果不想以表格方式或

者简单的输出数据,那么最好使用Repeater。

与DataList一样,Repeater使用模板来指定输出样式。

Repeater类不是继承自WebControl类的,这一点与DataGrid和DataList不同。

所以,Repeater没有样式方面的属性可供设定。也就是说,如果想格式化输出

Repeater的数据记录,必须使用HTML标签来设定样式。而如果使用DataGrid或

DataList,只要通过设定ItemStyle-Font-Bold属性为True即可实现。

Repeater在格式化设定上的欠缺,直接反映到开发时间的延长上来。对输出数

据样式上的越多要求,就越会导致开发周期的延长。这些在模板中规定样式的

HTML标签也越发的显得混乱,而且,在将来页面更改时会更加困难,特别是当一

个新的开发人员接替工作时。而使用DataGrid或DataList你尽可以只设定样式

属性,而不使用模板。而且,如果使用Visual 或 Web Matrix工作

时,这些属性更可以被直接设定而无需编码。

因为Repeater开发时间的延长,其在内建功能(分页、排序及编辑)上的支持也

显得不足。因此在可用性方面,Repeater有着明显的缺陷。当然,如果用户对于如

何显示数据无所谓的话,这也算不了什么大问题。我之所以强调这个“如果”,是因

为尽管用户有时在设计时并不要求能够分页、排序或编辑记录,但这样的要求往

往会在开发后期,或在他们能看到显示出来的记录后产生。

五、结论

在页面上显示数据时,多数的程序员会选择他们所熟悉的控件来使

用,特别是DataGrid。然而,这样盲目的选择在没有“最好的通用控件”的情况下是

不明智的。

DataGrid提供了最多的功能,如允许访问者对记录编辑、排序或分页。同时

它也是最容易使用的,甚至于简单到只需要将之添加到页面中而不必额外编写代

码。不过这些易用性是以性能的损失为代价的。DataGrid在三种控件中是效率最

低的,特别是在使用Web Form的情况下。

通过使用模板,DataList提供了比DataGrid更加优秀的界面效果。不过这需

要以牺牲一定的开发时间为代价。为了添加排序、分页和编辑功能,程序员不得

不花费比使用DataGrid更多的精力来进行编码,虽然它的性能要优于DataGrid。

最后,Repeater允许对数据记录作最大限度的HTML定制。通常,使用Repeater

来显示数据记录比使用DataGrid和DataList要耗费更长的开发时间。另外,它不

支持内建的编辑、排序和分页功能。所幸的是,Repeater在性能上要优于其它两种

控件,特别是明显优于DataGrid。