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

[ Repeater 控件 ]

Repeater 控件是三种数据控件中在 HTML 输出方面最为灵活的控件。 Repeater 会按照你所要求的样式严格地输出数据记录。所以,如果你不想以表格方式或者简单的

 1<span> 输出数据,那么最好使用  Repeater  。 
 2
 3与  DataList  一样,  Repeater  使用模板来指定输出样式。  Repeater  支持如下五种模板  : 
 4
 5·  AlternatingItemTemplate 
 6
 7·  FooterTemplate 
 8
 9·  HeaderTemplate 
10
11·  ItemTemplate 
12
13·  SeparatorTemplate 
14
15HederTemplate  和  FooterTemplate  指定在真正的记录输出之前或之后应处理的  HTML  内容。  AlternatingItemTemplate  和  ItemTemplate  则指定实际的每条输出记录的  HTML  样式。如,你需要绑定一个包含雇员信息的  DataSet  到一个  Repeater  ,字段名为  EmployeeName  。如果你想在页面中不排序地显示这些记录,你可以使用如下的语句: 
16
17<asp:repeater id="rptEmployees" runat="server">
18<headertemplate>
19<ul>
20</ul></headertemplate>
21<itemtemplate>
22<li>```
23# DataBinder.Eval(Container.DataItem, "EmployeeName") 
24```</li>
25</itemtemplate>
26<footertemplate>
27
28</footertemplate>
29</asp:repeater>
30
31Repeater  类不是继承自  WebControl  类的,这一点与  DataGrid  和  DataList  不同。所以,  Repeater  没有样式方面的属性可供设定。也就是说,如果你想格式化输出  Repeater  的数据记录,你必须使用  HTML  标签来设定样式。如,在一例中,如果我们想将雇员名字显示成粗体,我们必须在  ItemTemplate  设置相应的  HTML  标签: 
32
33<itemtemplate>
34<li><b>```
35# DataBinder.Eval(Container.DataItem, "EmployeeName")
36```</b></li>
37</itemtemplate>
38
39而如果使用  DataGrid  或  DataList  ,我们只通过设定  ItemStyle-Font-Bold  属性为  True  即可实现。 
40
41Repeater  在格式化设定上的欠缺,直接反映到开发时间的延长上来。对输出数据样式上的越多要求,就越会导致开发周期的延长。这些在模板中规定样式的  HTML  标签也越发得显得混乱,而且,在将来页面更改时会更加困难,特别是当一个新的开发人员接替工作时。而使用  DataGrid  或  DataList  你尽可以只设定样式属性,而不使用模板。而且,如果使用  Visual Studio.Net  或  ASP.Net Web Matrix  工作时,这些属性更可以被直接设定而无需编码。 
42
43因为  Repeater  开发时间的延长,其在内建功能(分页、排序及编辑)上的支持也显得不足。因此在可用性方面,  Repeater  有着明显的缺陷。当然,  <b> 如果  </b> 用户对于如何显示数据无所谓的话,这也算不了什么大问题。我之所以强调这个“如果”,是因为尽管用户有时在设计时并不要求能够分页、排序或编辑记录,但这样的要求往往会在开发后期,或在他们能看到显示出来的记录后产生。 
44
45Repeater  唯一优于  DataGrid  和  DataList  的特点是它的性能,尤其明显优于  DataGrid  。图  3  说明了这一点。 
46
47![](http://dev.csdn.net/Develop/ArticleImages/27/27437/CSDN_Dev_Image_2004-5-3127040.gif)
48
49图  3  :对  Repeater  的每秒请求次数 
50
51[结论] 
52
53在  ASP.Net  页面上显示数据时,多数的程序员会选择他们所熟悉的控件来使用,特别是  DataGrid  。然而,这样盲目的选择在没有“最好的通用控件”的情况下是不明智的。在选择控件来显示数据前,不妨问自己几个问题来帮助决策:是否允许用户对记录排序?是不是记录需要显示在非表格的情况下?页面是否会被高频度地访问,因此应多考虑性能? 
54
55DataGrid  提供了最多的功能,如允许访问者对记录编辑、排序或分页。同时它也是最容易使用的,甚至于简单到只需要将之添加到页面中而不必额外编写代码。不过这些易用性是以性能的损失为代价的。  DataGrid  在三种控件中是效率最低的,特别是在使用  Web Form  的情况下。 
56
57通过使用模板,  DataList  提供了比  DataGrid  更加优秀的界面效果。不过这需要以牺牲一定的开发时间为代价。为了添加排序、分页和编辑功能,程序员不得不花费比使用  DataGrid  更多的精力来进行编码,虽然它的性能要优于  DataGrid  。 
58
59最后,  Repeater  允许对数据记录作最大限度的  HTML  定制。通常,使用  Repeater  来显示数据记录比使用  DataGrid  和  DataList  要耗费更长的开发时间。另外,它不支持内建的编辑、排序和分页功能。所幸的是,  Repeater  在性能上要优于其它两种控件,特别是明显优于  DataGrid  。 
60
61[附录] 
62
63WAST  测试设定 
64
65测试是在运行  Microsoft Windows 2003 Server  操作系统的笔记本电脑上完成的。基本配置如下:  Intel P4 2.4G CPU  ;  512 MB RAM  ;  30GB Ultra ATA Hard drive  ;网页服务器使用  IIS 6.0  ;  ASP.Net  版本为  1.1  。此测试中的  WAST  被设置成使用单线程,每个测试时间为一分钟。 
66
67测试代码  http://download.microsoft.com/download/9/e/9/9e97b2f8-b317-4751-9ac1-2e34eebec26a/DataControlsPerfTest_Setup.msi  点击此处下载</span>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus