明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

對(duì)于何種情況下使用DataGrid、DataList或Repeater的一些討論(4)

[摘要][Repeater控件]   Repeater控件是三種數(shù)據(jù)控件中在HTML輸出方面最為靈活的控件。Repeater會(huì)按照你所要求的樣式嚴(yán)格地輸出數(shù)據(jù)記錄。所以,如果你不想以表格方式或者簡(jiǎn)單的<...
[Repeater控件]



  Repeater控件是三種數(shù)據(jù)控件中在HTML輸出方面最為靈活的控件。Repeater會(huì)按照你所要求的樣式嚴(yán)格地輸出數(shù)據(jù)記錄。所以,如果你不想以表格方式或者簡(jiǎn)單的<span>輸出數(shù)據(jù),那么最好使用Repeater。

  與DataList一樣,Repeater使用模板來指定輸出樣式。Repeater支持如下五種模板:

  ·AlternatingItemTemplate

  ·FooterTemplate

  ·HeaderTemplate

  ·ItemTemplate

  ·SeparatorTemplate

  HederTemplate和FooterTemplate指定在真正的記錄輸出之前或之后應(yīng)處理的HTML內(nèi)容。AlternatingItemTemplate和ItemTemplate則指定實(shí)際的每條輸出記錄的HTML樣式。如,你需要綁定一個(gè)包含雇員信息的DataSet到一個(gè)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類的,這一點(diǎn)與DataGrid和DataList不同。所以,Repeater沒有樣式方面的屬性可供設(shè)定。也就是說,如果你想格式化輸出Repeater的數(shù)據(jù)記錄,你必須使用HTML標(biāo)簽來設(shè)定樣式。如,在一例中,如果我們想將雇員名字顯示成粗體,我們必須在ItemTemplate設(shè)置相應(yīng)的HTML標(biāo)簽:



  <ItemTemplate>

    <li><b><%# DataBinder.Eval(Container.DataItem, "EmployeeName")%></b></li>

  </ItemTemplate>



  而如果使用DataGrid或DataList,我們只通過設(shè)定ItemStyle-Font-Bold屬性為True即可實(shí)現(xiàn)。

  Repeater在格式化設(shè)定上的欠缺,直接反映到開發(fā)時(shí)間的延長上來。對(duì)輸出數(shù)據(jù)樣式上的越多要求,就越會(huì)導(dǎo)致開發(fā)周期的延長。這些在模板中規(guī)定樣式的HTML標(biāo)簽也越發(fā)得顯得混亂,而且,在將來頁面更改時(shí)會(huì)更加困難,特別是當(dāng)一個(gè)新的開發(fā)人員接替工作時(shí)。而使用DataGrid或DataList你盡可以只設(shè)定樣式屬性,而不使用模板。而且,如果使用Visual Studio.Net或ASP.Net Web Matrix工作時(shí),這些屬性更可以被直接設(shè)定而無需編碼。

  因?yàn)镽epeater開發(fā)時(shí)間的延長,其在內(nèi)建功能(分頁、排序及編輯)上的支持也顯得不足。因此在可用性方面,Repeater有著明顯的缺陷。當(dāng)然,<b>如果</b>用戶對(duì)于如何顯示數(shù)據(jù)無所謂的話,這也算不了什么大問題。我之所以強(qiáng)調(diào)這個(gè)“如果”,是因?yàn)楸M管用戶有時(shí)在設(shè)計(jì)時(shí)并不要求能夠分頁、排序或編輯記錄,但這樣的要求往往會(huì)在開發(fā)后期,或在他們能看到顯示出來的記錄后產(chǎn)生。

  Repeater唯一優(yōu)于DataGrid和DataList的特點(diǎn)是它的性能,尤其明顯優(yōu)于DataGrid。圖3說明了這一點(diǎn)。






圖3:對(duì)Repeater的每秒請(qǐng)求次數(shù)



[結(jié)論]



  在ASP.Net頁面上顯示數(shù)據(jù)時(shí),多數(shù)的程序員會(huì)選擇他們所熟悉的控件來使用,特別是DataGrid。然而,這樣盲目的選擇在沒有“最好的通用控件”的情況下是不明智的。在選擇控件來顯示數(shù)據(jù)前,不妨問自己幾個(gè)問題來幫助決策:是否允許用戶對(duì)記錄排序?是不是記錄需要顯示在非表格的情況下?頁面是否會(huì)被高頻度地訪問,因此應(yīng)多考慮性能?

  DataGrid提供了最多的功能,如允許訪問者對(duì)記錄編輯、排序或分頁。同時(shí)它也是最容易使用的,甚至于簡(jiǎn)單到只需要將之添加到頁面中而不必額外編寫代碼。不過這些易用性是以性能的損失為代價(jià)的。DataGrid在三種控件中是效率最低的,特別是在使用Web Form的情況下。

  通過使用模板,DataList提供了比DataGrid更加優(yōu)秀的界面效果。不過這需要以犧牲一定的開發(fā)時(shí)間為代價(jià)。為了添加排序、分頁和編輯功能,程序員不得不花費(fèi)比使用DataGrid更多的精力來進(jìn)行編碼,雖然它的性能要優(yōu)于DataGrid。

  最后,Repeater允許對(duì)數(shù)據(jù)記錄作最大限度的HTML定制。通常,使用Repeater來顯示數(shù)據(jù)記錄比使用DataGrid和DataList要耗費(fèi)更長的開發(fā)時(shí)間。另外,它不支持內(nèi)建的編輯、排序和分頁功能。所幸的是,Repeater在性能上要優(yōu)于其它兩種控件,特別是明顯優(yōu)于DataGrid。



[附錄]



WAST測(cè)試設(shè)定

  測(cè)試是在運(yùn)行Microsoft Windows 2003 Server操作系統(tǒng)的筆記本電腦上完成的;九渲萌缦拢篒ntel P4 2.4G CPU;512 MB RAM;30GB Ultra ATA Hard drive;網(wǎng)頁服務(wù)器使用IIS 6.0;ASP.Net版本為1.1。此測(cè)試中的WAST被設(shè)置成使用單線程,每個(gè)測(cè)試時(shí)間為一分鐘。

  測(cè)試代碼http://download.microsoft.com/download/9/e/9/9e97b2f8-b317-4751-9ac1-2e34eebec26a/DataControlsPerfTest_Setup.