DataList控件入門介紹
DataList控件入門:呈現(xiàn)方式
DataList控件和DataGrid控件類似,也是在ASP.NET中用于控制顯示數(shù)據(jù)的Web控件。要學習DataGrid控件,首先需要了解,DataGrid 將呈現(xiàn)為 HTML
< table>
,每一個
DataSource
記錄作為一個表行(
< tr>
),每一個記錄字段作為一個表列(
< td>
)。 有時,您可能想更多地控制數(shù)據(jù)的顯示。 例如,您可能想把數(shù)據(jù)顯示在 HTML
< table>
中,但不是每行顯示一條記錄,而是每行顯示五條記錄。 或者,您根本不想把數(shù)據(jù)顯示在
< table>
標記中,而是想把每個元素顯示在一個
< span>
標記中。
DataList控件入門:與DataGrid之不同
DataList 放棄了 DataGrid 所采用的“列”概念。 相反,DataList 的顯示是通過模板 定義的。 利用模板,開發(fā)人員可以指定混合的 HTML 語法和數(shù)據(jù)綁定語法。 HTML 語法是標準的 HTML 標記;數(shù)據(jù)綁定語法是使用
< %#
和
%>
標記分隔的,用于從
DataSource
的記錄中產(chǎn)生用于構(gòu)造給定 DataList 項的內(nèi)容。 例如,下面的 ItemTemplate 將顯示
DataSource
的字段
CompanyName:
- < asp:DataList runat="server" id="myDataList">
- < ItemTemplate>
- < %# DataBinder.Eval(Container.DataItem, "CompanyName") %>
- < /ItemTemplate>
- < /asp:DataList>
除了數(shù)據(jù)綁定語法,模板也可以包含 HTML 標記。 通過更新上面的模板,可以使
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 的 DataSource 中的每一條記錄,都要計算 ItemTemplate 的數(shù)據(jù)綁定語法。 數(shù)據(jù)綁定語法的輸出與 HTML 標記一起指定了為 DataList 項呈現(xiàn)的 HTML。 DataList 還支持其他六個模板,包括 ItemTemplate在內(nèi)共有如下七個:
AlternatingItemTemplate
EditItemTemplate
FooterTemplate
HeaderTemplate
ItemTemplate
SelectedItemTemplate
SeparatorTemplate
注意,DataGrid 的 TemplateColumn 僅支持四個模板: ItemTemplate、HeaderTemplate、FooterTemplate 和 EditItemTemplate。
默認情況下,DataList 將每一項都顯示為 HTML
< table>
中的一行。 但是,通過設置
RepeatColumns
屬性,您可以指定表的每一行顯示多少個 DataList 項。 除了可以指定 HTML
< table>
的每一行顯示多少個 DataList 項之外,還可以指定 DataList 的內(nèi)容應該使用
< span>
標記顯示,而不是使用
< table>
標記。 DataList 的
RepeatLayout
屬性可以設置為 Table 或 Flow,表示 DataList 中的數(shù)據(jù)呈現(xiàn)在 HTML
< table>
中還是
< span>
標記中。
利用模板以及
RepeatColumns
和
RepeatLayout
屬性,很明顯 DataList 比 DataGrid 允許對呈現(xiàn)的 HTML 標記進行更多的自定義。 這種增強了的自定義使得使用 DataList 能夠產(chǎn)生更為友好的數(shù)據(jù)顯示,因為 DataGrid 的“每一條
DataSource
記錄占用一個表行的單 HTML
< table>
”模型不可能總是用于顯示信息的***選擇。 但是,只研究比 DataGrid 改進了的自定義并不足以確定 DataList 的可用性;我們還必須比較 DataGrid 和 DataList 的排序、分頁和編輯功能。
使用 EditItemIndex 模板以及 EditCommand、UpdateCommand 和 CancelCommand 事件,DataList 可以支持內(nèi)聯(lián)編輯。 但是,用 DataList 添加這樣的功能比用 DataGrid 花費的開發(fā)時間要長。 開發(fā)時間的差異是由于下面兩個原因:
通過 EditCommandColumn 列類型即可在 DataGrid 中創(chuàng)建的編輯/更新/取消按鈕,必須手動添加到 DataList 中,以及
DataGrid BoundColumn 列類型自動使用 TextBox Web 控件作為編輯接口,而使用 DataList 時必須通過 EditItemTemplate 為要編輯的項顯式指定的編輯接口。
雖然用 DataList 進行內(nèi)聯(lián)編輯不是很困難,但是 DataList 的數(shù)據(jù)排序、分頁和編輯卻很困難。 雖然一些靈活的編碼肯定能完成這樣的功能,但是向 DataList 中添加這樣的功能將花費相當多的開發(fā)時間。 因此,如果最終用戶能對數(shù)據(jù)進行排序和分頁是一個必需要求的話,那么***選擇 DataGrid 而不選擇 DataList。
DataList控件入門:性能比較
DataList 的性能比 DataGrid 的性能好,當 DataList 位于 Web 窗體內(nèi)時這一點更明顯。 圖 2 顯示了 Web Application Stress Tool 在 DataList 上的測試結(jié)果。
圖 2: DataList 的每秒請求數(shù)
正如圖 2 中的結(jié)果顯示的那樣,當 DataList 放置在 Web 窗體內(nèi)時(因此導致該 Web 控件生成它的 ViewState),該 Web 控件要遠勝于 DataGrid。
【編輯推薦】