關于何種情況下使用DataGrid、DataList或Repeater的一些討論(3)
2024-07-21 02:16:30
供稿:網(wǎng)友
datalist控件]
如前所述,datagrid使用表格來顯示數(shù)據(jù)。你也許需要更進一步地控制數(shù)據(jù)的顯示。例如,你想使數(shù)據(jù)在表格中顯示,但不是每行只有一條記錄,而是多條。又或者,你并不想使用表格來顯示數(shù)據(jù),而是只將它們顯示在一系列<span>標簽中。
datalist放棄了datagrid中列表顯示數(shù)據(jù)的概念,而是使用事先定義好的模板(template)來定制顯示。通過使用模板,可以同時使用html標簽或數(shù)據(jù)綁定。這里的數(shù)據(jù)綁定的形式為:<%# … %>,用來顯示數(shù)據(jù)源中給定條目的數(shù)據(jù)記錄。如下的itemtemplate將會顯示數(shù)據(jù)源中companyname字段:
<asp:datalist runat="server" id="mydatalist">
<itemtemplate>
<%# databinder.eval(container.dataitem, "companyname") %>
</itemtemplate>
</asp:datalist
通過修改上面的模板,我們可以使companyname字段顯示為粗體字,而contactname字段則以正常式樣顯示在companyname之下。
<asp:datalist runat="server" id="mydatalist">
<itemtemplate>
<b><%# databinder.eval(container.dataitem, "companyname") %></b>
<br />
<%# databinder.eval(container.dataitem, "contactname") %>
</itemtemplate>
</asp:datalist>
對于datalist數(shù)據(jù)源中的每一條記錄,itemtemplate會通過定義html標簽來以相同的樣式顯示數(shù)據(jù)。itemtemplate還支持其它其它6種模板:
·alternatingitemtemplate
·edititemtemplate
·footertemplate
·headertemplate
·itemtemplate
·selecteditemtemplate
·separatortemplate
默認情況下datalist會將記錄顯示在html表格中。然而,通過設定repeatcolumn屬性,你可以設置在一行中顯示多少條記錄。更進一步,你甚至可以指定datlist的內(nèi)容不顯示在表格中,而是<span>標簽中。這可以通過設定repearlayout屬性來實現(xiàn)。
通過模板、repeatcolumn和repeatlayout屬性,很明顯datalist在定制數(shù)據(jù)輸出樣式方面較datagrid更具靈活性,使得用戶界面設計可以更加友好。當然,我們還需要進行功能性的對比,如分頁、排序、記錄編輯等等。
通過edititemindex模板和editcommand,updatecommand以及cancelcommand事件,datalist將支持記錄編輯的功能。不過,比較datagrid而言,這需要耗費更多的開發(fā)時間來實現(xiàn)。這種開發(fā)時間上的不一致主要有兩個原因:
·編輯/更新/刪除按鈕在datagrid中可以通過設定editcommandcolumn來自動添加;而在datalist中則需要手動添加。
·datagrid的boundcolumn列樣式自動使用文本框控件來顯示記錄編輯界面。而在datalist中,你必須通過edititemtemplate明確地指定使用什么樣的編輯界面。
實現(xiàn)datalist中的分頁、排序功能同記錄編輯功能情況一樣,并不算非常復雜。這些功能可以通過巧妙的編程加以實現(xiàn),只是耗費一些開發(fā)時間。所以,如果需要用戶對數(shù)據(jù)記錄進行排序或編輯的話,使用datagrid要比使用datalist方便得多。
datalist的性能要比datagrid好一些,特別是當datalist被包含在form當中時。圖2顯示了wast對datalist的測試。
圖2:對datalist的每秒請求次數(shù)
可以看出,在被web form包含的情況下,datalist的性能要明顯好于datagrid。