關于何種情況下使用DataGrid、DataList或Repeater的一些討論(4)
2024-07-21 02:16:30
供稿:網(wǎng)友
 
[repeater控件]
 
  repeater控件是三種數(shù)據(jù)控件中在html輸出方面最為靈活的控件。repeater會按照你所要求的樣式嚴格地輸出數(shù)據(jù)記錄。所以,如果你不想以表格方式或者簡單的<span>輸出數(shù)據(jù),那么最好使用repeater。
  與datalist一樣,repeater使用模板來指定輸出樣式。repeater支持如下五種模板:
  ·alternatingitemtemplate 
  ·footertemplate 
  ·headertemplate 
  ·itemtemplate 
  ·separatortemplate 
  hedertemplate和footertemplate指定在真正的記錄輸出之前或之后應處理的html內(nèi)容。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的數(shù)據(jù)記錄,你必須使用html標簽來設定樣式。如,在一例中,如果我們想將雇員名字顯示成粗體,我們必須在itemtemplate設置相應的html標簽:
 
  <itemtemplate>
    <li><b><%# databinder.eval(container.dataitem, "employeename")%></b></li>
  </itemtemplate>
 
  而如果使用datagrid或datalist,我們只通過設定itemstyle-font-bold屬性為true即可實現(xiàn)。
  repeater在格式化設定上的欠缺,直接反映到開發(fā)時間的延長上來。對輸出數(shù)據(jù)樣式上的越多要求,就越會導致開發(fā)周期的延長。這些在模板中規(guī)定樣式的html標簽也越發(fā)得顯得混亂,而且,在將來頁面更改時會更加困難,特別是當一個新的開發(fā)人員接替工作時。而使用datagrid或datalist你盡可以只設定樣式屬性,而不使用模板。而且,如果使用visual studio.net或asp.net web matrix工作時,這些屬性更可以被直接設定而無需編碼。
  因為repeater開發(fā)時間的延長,其在內(nèi)建功能(分頁、排序及編輯)上的支持也顯得不足。因此在可用性方面,repeater有著明顯的缺陷。當然,<b>如果</b>用戶對于如何顯示數(shù)據(jù)無所謂的話,這也算不了什么大問題。我之所以強調(diào)這個“如果”,是因為盡管用戶有時在設計時并不要求能夠分頁、排序或編輯記錄,但這樣的要求往往會在開發(fā)后期,或在他們能看到顯示出來的記錄后產(chǎn)生。
  repeater唯一優(yōu)于datagrid和datalist的特點是它的性能,尤其明顯優(yōu)于datagrid。圖3說明了這一點。
 
 
圖3:對repeater的每秒請求次數(shù)
 
[結(jié)論]
 
  在asp.net頁面上顯示數(shù)據(jù)時,多數(shù)的程序員會選擇他們所熟悉的控件來使用,特別是datagrid。然而,這樣盲目的選擇在沒有“最好的通用控件”的情況下是不明智的。在選擇控件來顯示數(shù)據(jù)前,不妨問自己幾個問題來幫助決策:是否允許用戶對記錄排序?是不是記錄需要顯示在非表格的情況下?頁面是否會被高頻度地訪問,因此應多考慮性能?
  datagrid提供了最多的功能,如允許訪問者對記錄編輯、排序或分頁。同時它也是最容易使用的,甚至于簡單到只需要將之添加到頁面中而不必額外編寫代碼。不過這些易用性是以性能的損失為代價的。datagrid在三種控件中是效率最低的,特別是在使用web form的情況下。
  通過使用模板,datalist提供了比datagrid更加優(yōu)秀的界面效果。不過這需要以犧牲一定的開發(fā)時間為代價。為了添加排序、分頁和編輯功能,程序員不得不花費比使用datagrid更多的精力來進行編碼,雖然它的性能要優(yōu)于datagrid。
  最后,repeater允許對數(shù)據(jù)記錄作最大限度的html定制。通常,使用repeater來顯示數(shù)據(jù)記錄比使用datagrid和datalist要耗費更長的開發(fā)時間。另外,它不支持內(nèi)建的編輯、排序和分頁功能。所幸的是,repeater在性能上要優(yōu)于其它兩種控件,特別是明顯優(yōu)于datagrid。
 
[附錄]
 
wast測試設定
  測試是在運行microsoft windows 2003 server操作系統(tǒng)的筆記本電腦上完成的。基本配置如下:intel p4 2.4g cpu;512 mb ram;30gb ultra ata hard drive;網(wǎng)頁服務器使用iis 6.0;asp.net版本為1.1。此測試中的wast被設置成使用單線程,每個測試時間為一分鐘。
  測試代碼http://download.microsoft.com/download/9/e/9/9e97b2f8-b317-4751-9ac1-2e34eebec26a/datacontrolsperftest_setup.msi點擊此處下載注冊會員,創(chuàng)建你的web開發(fā)資料庫,