深入研究Repeater控件:最大的靈活性
Repeater控件在三個(gè)ASP.NET數(shù)據(jù)Web控件中提供了***的靈活性:它呈現(xiàn)的HTML標(biāo)記是可以指定的。DataGrid 或 DataList 會(huì)在預(yù)設(shè)的 HTML 標(biāo)記中自動(dòng)包含開(kāi)發(fā)人員指定的內(nèi)容。與它們不同的是,Repeater 在呈現(xiàn)的時(shí)候?qū)?yán)格生成指定的 HTML 標(biāo)記。 因此,如果不想用 HTML
< table>
或者一系列
< span>
標(biāo)記顯示數(shù)據(jù),而希望以其他方式顯示數(shù)據(jù),就必須使用 Repeater 控件。
就像 DataList 一樣,使用Repeater控件時(shí)要用模板指定標(biāo)記。 Repeater 包含下列五個(gè)模板:
AlternatingItemTemplate
FooterTemplate
HeaderTemplate
ItemTemplate
SeparatorTemplate
HeaderTemplate 和 FooterTemplate 指定出現(xiàn)在綁定到 Repeater 的數(shù)據(jù)之前和之后的 HTML 標(biāo)記。AlternatingItemTemplate 和 ItemTemplate 指定用于呈現(xiàn) Repeater 的
DataSource
中的每條記錄的 HTML 標(biāo)記和數(shù)據(jù)綁定語(yǔ)法。 例如,假設(shè)您要把包含雇員信息的數(shù)據(jù)集綁定到 Repeater,該數(shù)據(jù)集的其中一個(gè)字段是
EmployeeName
。 如果要在 Web 頁(yè)上以無(wú)序列表的形式顯示雇員列表,則可以使用如下 Repeater 語(yǔ)法:
- < asp:Repeater runat="server" id="rptEmployees">
- < HeaderTemplate>
- < ul>
- < /HeaderTemplate>
- < ItemTemplate>
- < li>< %# DataBinder.Eval(Container.DataItem, "EmployeeName") %>< /li>
- < /ItemTemplate>
- < FooterTemplate>
- < /ul>
- < /FooterTemplate>
- < /asp:Repeater>
與 DataGrid 和 DataList 不同,Repeater 類不是從
WebControl
類派生的。 因此,Repeater 缺少 DataGrid 和 DataList 二者共有的樣式屬性。 這一點(diǎn)歸結(jié)起來(lái)無(wú)非是說(shuō),如果想對(duì) Repeater 中所顯示數(shù)據(jù)進(jìn)行格式設(shè)置,則必須在 HTML 標(biāo)記中進(jìn)行這樣的操作。 例如,在上面的例子中,如果想用粗體顯示雇員的姓名,則必須更改 ItemTemplate 以包含 HTML 粗體標(biāo)記,就像下面這樣:
- < ItemTemplate>
- < li>< b>< %# DataBinder.Eval(Container.DataItem, "EmployeeName")
- %>< /b>< /li>
- < /ItemTemplate>
然而對(duì)于 DataGrid 或 DataList,通過(guò)把控件的
ItemStyle-Font-Bold
屬性設(shè)置為 True,就能用粗體顯示文本了。
Repeater控件 缺少樣式屬性會(huì)大大增加開(kāi)發(fā)的時(shí)間指標(biāo)。 例如,假設(shè)決定使用 Repeater 顯示數(shù)據(jù),這些數(shù)據(jù)需要以粗體、中間對(duì)齊且?guī)в刑囟ū尘吧奶囟ㄗ煮w顯示。 所有這些都要用幾個(gè) HTML 標(biāo)記指定,這些標(biāo)記很快就會(huì)使 Repeater 的模板變得凌亂不堪。 這種凌亂會(huì)使以后對(duì)外觀進(jìn)行更改變得困難得多,尤其是當(dāng)其他人對(duì)該項(xiàng)目進(jìn)行操作時(shí),則不得不查看大量 HTML 語(yǔ)法。 將這一點(diǎn)與為 DataGrid 或 DataList 指定格式進(jìn)行比較。 對(duì)于這兩個(gè)控件中的任何一個(gè),都可以通過(guò)指定 DataGrid 或 DataList 的樣式屬性來(lái)使模板免于凌亂。 此外,可以用一些工具來(lái)自動(dòng)設(shè)置 DataGrid 和 DataList 的樣式屬性,例如 Microsoft Visual Studio .NET 或 ASP.NET Web Matrix。
除了延長(zhǎng)開(kāi)發(fā)時(shí)間之外,Repeater 還缺少有助于支持分頁(yè)、編輯或數(shù)據(jù)編輯的內(nèi)置功能。 由于缺少這些功能支持,Repeater 在可用性的評(píng)定中得分很低。 當(dāng)然,如果 所有您感興趣的只是顯示數(shù)據(jù),而不用帶任何別致的鈴聲或口哨聲,那么 Repeater 的功能匱乏就不是主要缺點(diǎn)了。 我之所以強(qiáng)調(diào)“如果”一詞是因?yàn)椋ǔ?,Web 應(yīng)用程序一旦進(jìn)行了部署,用戶就會(huì)發(fā)現(xiàn)他們需要附加的功能,例如排序、分頁(yè)和編輯。
Repeater 有一個(gè)彌補(bǔ)性的品質(zhì)(這并不令人吃驚),那就是性能。 Repeater 的性能比 DataList 的性能稍微好一點(diǎn),比 DataGrid 的性能要好很多。圖 3 顯示了Repeater 每秒能處理的請(qǐng)求數(shù),并與 DataGrid 和 DataList 進(jìn)行了對(duì)比。
圖 3: Repeater 的每秒請(qǐng)求數(shù)
【編輯推薦】