返回“ASP.NET 2.0數據教程目錄”
導言
在前面的教程裡我們學習了DataList提供了一些風格樣式的屬性. 而且我們還學習了如何定義HeadStyle, ItemStyle, AlternatingItemStyle, 和 SelectedItemStyle等屬性的默認CSS.除了這四個屬性外,DataList還提供了其它 屬性,比如Font, ForeColor, BackColor, 和BorderWidth.而Repeater沒有提供任 何這樣的屬性.如果你需要用Reperter來實現這些效果,你就需要在templates裡直接寫標記語言.
通常,數據需要怎樣的格式取決於數 據本身.比如,我們可能使用灰色的字體列出那些被停止使用的product,或者在 UnitsInStock等於0的時候顯示高亮.前面的教程裡我們已經學習了GridView, DetailsView, 和FormView 都提供了兩種截然不同的格式化數據的方 法.
DataBound 事件— 為DataBound 事件創建一個合適的event handler, 它在數據綁定到item的時候激發(對GridView來說是RowDataBound 事件 ;對 DataList 和Repeater來說是 ItemDataBound 事件). 在這些事件裡, 剛剛綁 定的數據可以被格式化. 參見基於數據的自定義格式化這章.
Templates 的格式化功能— 在DetailsView 或GridView 裡使用TemplateFields , 或 在FormView 裡使用template , 我們可以在ASP.NET page的code-behind class裡 或者BLL裡,或者任何其它web程序裡可以調用的類庫裡加格式化信息. 這種格式化 功能可以接收任意的輸入參數, 但是在template裡比如返回HTML . 格式化功能最 早在在GridView控件中使用TemplateField 這章裡談到過.
這兩種方法都 可以在DataList和Repeater裡使用.在本章裡我們將一步步用這兩種方法在這兩個 控件裡做示例.
使用ItemDataBound Event Handler
當數據綁定到 DataList時, 無論是使用數據源控件或者 直接在代碼裡使用DataSource和 DataBind() , DataList的DataBinding 事件都會被激發. DataList 為數據源的 每條記錄創建一個 DataListItem 對象,然後綁定到當前記錄. 在這個過程中 DataList 激發兩個事件:
ItemCreated — 在創建DataListItem 後 激發
ItemDataBound — 當前記錄綁定到DataListItem 後激發
下面列出了DataList數據綁定過程的大概步驟
DataList的 DataBinding event 被激發
DataList
對數據源的每條記 錄...
For each record in the data source…
創建一個 DataListItem 對象
激發ItemCreated event
綁定記錄到 DataListItem
激發ItemDataBound event
將DataListItem 添加到 Items collection
當數據綁定到Repeater時,和上面所說的情況一樣.唯一 的區別在於,DataListItem換成了RepeaterItem.
注意:細心的讀者可能注 意到了DataList和Repeater綁定到數據時的步驟順序和GridView有些許差別.在數 據綁定過程的後期,GridView會激發DataBound事件,而DataList和Repeater則都沒 有這個事件.
和GridView一樣,可以為ItemDataBound事件創建一個event handler 來格式化數據.這個event handler 可以處理剛剛綁定到DataListItem或 RepeaterItem的數據,來按照需要進行格式化.
對DataList來說,可以使用 風格樣式相關的屬性,如Font, ForeColor, BackColor, CssClass等,來格式化 item.而如果你想格式化Datalist裡的template裡的web控件,你需要編程去獲取這 些控件,然後來控制.我們在Custom Formatting Based Upon Data一章裡已經看過 怎樣做.和Repeater控件一樣,RepeaterItem類也沒有風格樣式相關的屬性,因此, 你需要在ItemDataBound event handler裡編程去實現.
由於在DataList和 Repeater裡使用ItemDataBound格式化技術從本質上來說是由於的,因此我們的示 例主要講DataList.