對于何種情況下使用DataGrid、DataList或Repeater的一些討論(4)
發表時間:2023-07-14 來源:明輝站整理相關軟件相關文章人氣:
[摘要][Repeater控件] Repeater控件是三種數據控件中在HTML輸出方面最為靈活的控件。Repeater會按照你所要求的樣式嚴格地輸出數據記錄。所以,如果你不想以表格方式或者簡單的<...
[Repeater控件]
Repeater控件是三種數據控件中在HTML輸出方面最為靈活的控件。Repeater會按照你所要求的樣式嚴格地輸出數據記錄。所以,如果你不想以表格方式或者簡單的<span>輸出數據,那么最好使用Repeater。
與DataList一樣,Repeater使用模板來指定輸出樣式。Repeater支持如下五種模板:
·AlternatingItemTemplate
·FooterTemplate
·HeaderTemplate
·ItemTemplate
·SeparatorTemplate
HederTemplate和FooterTemplate指定在真正的記錄輸出之前或之后應處理的HTML內容。AlternatingItemTemplate和ItemTemplate則指定實際的每條輸出記錄的HTML樣式。如,你需要綁定一個包含雇員信息的DataSet到一個Repeater,字段名為EmployeeName。如果你想在頁面中不排序地顯示這些記錄,你可以使用如下的語句:
<asp:Repeater runat="server" id="rptEmployees">
<HeaderTemplate>
<ul>
</HeaderTemplate>
<ItemTemplate>
<li><%# DataBinder.Eval(Container.DataItem, "EmployeeName") %></li>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
Repeater類不是繼承自WebControl類的,這一點與DataGrid和DataList不同。所以,Repeater沒有樣式方面的屬性可供設定。也就是說,如果你想格式化輸出Repeater的數據記錄,你必須使用HTML標簽來設定樣式。如,在一例中,如果我們想將雇員名字顯示成粗體,我們必須在ItemTemplate設置相應的HTML標簽:
<ItemTemplate>
<li><b><%# DataBinder.Eval(Container.DataItem, "EmployeeName")%></b></li>
</ItemTemplate>
而如果使用DataGrid或DataList,我們只通過設定ItemStyle-Font-Bold屬性為True即可實現。
Repeater在格式化設定上的欠缺,直接反映到開發時間的延長上來。對輸出數據樣式上的越多要求,就越會導致開發周期的延長。這些在模板中規定樣式的HTML標簽也越發得顯得混亂,而且,在將來頁面更改時會更加困難,特別是當一個新的開發人員接替工作時。而使用DataGrid或DataList你盡可以只設定樣式屬性,而不使用模板。而且,如果使用Visual Studio.Net或ASP.Net Web Matrix工作時,這些屬性更可以被直接設定而無需編碼。
因為Repeater開發時間的延長,其在內建功能(分頁、排序及編輯)上的支持也顯得不足。因此在可用性方面,Repeater有著明顯的缺陷。當然,<b>如果</b>用戶對于如何顯示數據無所謂的話,這也算不了什么大問題。我之所以強調這個“如果”,是因為盡管用戶有時在設計時并不要求能夠分頁、排序或編輯記錄,但這樣的要求往往會在開發后期,或在他們能看到顯示出來的記錄后產生。
Repeater唯一優于DataGrid和DataList的特點是它的性能,尤其明顯優于DataGrid。圖3說明了這一點。
圖3:對Repeater的每秒請求次數
[結論]
在ASP.Net頁面上顯示數據時,多數的程序員會選擇他們所熟悉的控件來使用,特別是DataGrid。然而,這樣盲目的選擇在沒有“最好的通用控件”的情況下是不明智的。在選擇控件來顯示數據前,不妨問自己幾個問題來幫助決策:是否允許用戶對記錄排序?是不是記錄需要顯示在非表格的情況下?頁面是否會被高頻度地訪問,因此應多考慮性能?
DataGrid提供了最多的功能,如允許訪問者對記錄編輯、排序或分頁。同時它也是最容易使用的,甚至于簡單到只需要將之添加到頁面中而不必額外編寫代碼。不過這些易用性是以性能的損失為代價的。DataGrid在三種控件中是效率最低的,特別是在使用Web Form的情況下。
通過使用模板,DataList提供了比DataGrid更加優秀的界面效果。不過這需要以犧牲一定的開發時間為代價。為了添加排序、分頁和編輯功能,程序員不得不花費比使用DataGrid更多的精力來進行編碼,雖然它的性能要優于DataGrid。
最后,Repeater允許對數據記錄作最大限度的HTML定制。通常,使用Repeater來顯示數據記錄比使用DataGrid和DataList要耗費更長的開發時間。另外,它不支持內建的編輯、排序和分頁功能。所幸的是,Repeater在性能上要優于其它兩種控件,特別是明顯優于DataGrid。
[附錄]
WAST測試設定
測試是在運行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被設置成使用單線程,每個測試時間為一分鐘。
測試代碼http://download.microsoft.com/download/9/e/9/9e97b2f8-b317-4751-9ac1-2e34eebec26a/DataControlsPerfTest_Setup.