HOW TO:在執行階段中自訂 DataList 項目
更新:2007 年 11 月
在分頁處理期間,DataList 控制項會建立呈現在頁面上的個別項目。為了讓您能夠在建立項目時進行自訂,DataList 控制項會引發兩個事件:
ItemCreated 事件是在 DataList 控制項建立各項目、替代項目、頁首和頁尾 (Footer) 等等時所引發。
ItemDataBound 事件則是在某一項目中的控制項完成資料繫結後才引發的。您可以使用事件參數來存取已用於資料繫結的資料。如果自訂是視資料而定,請使用這個事件。
您可藉由回應這些事件來變更項目。常見的用法是依據其中顯示的資料來變更項目外觀。例如,如果從資料庫讀取的數值是負值,那麼您可能會將項目的背景色彩設為紅色。
若要使用 ItemCreated 事件在執行階段時自訂項目
為 DataList 控制項的 ItemCreated 事件建立事件處理常式。
在事件處理常式中,使用 Item 物件來從 e 事件引數物件取得目前項目。目前項目的索引可透過 Item 物件的 ItemIndex 屬性取得,而其型別則是透過 ItemType 屬性 (這是使用 ListItemType 列舉型別所定義的) 取得。
注意事項: ItemIndex 屬性會傳回正值的只有 Item、AlternatingItem 和 SelectedItem 物件。頁首、頁尾及分隔符號項目的索引值都是 -1。
以下範例將顯示如何根據條件修改項目的背景色彩。這個範例使用 ItemType 屬性和 ListItemType 列舉型別來設定項目的背景色彩。範例中會將項目設定為 LightGoldenrodYellow,將替代項目設定為 DarkGoldenrod,並將選取項目設定為 Yellow。
Protected Sub DataList1_ItemCreated(ByVal sender As Object, _ ByVal e As EventArgs) Select Case e.Item.ItemType Case ListItemType.Item e.Item.BackColor = _ System.Drawing.Color.LightGoldenrodYellow Case ListItemType.AlternatingItem e.Item.BackColor = System.Drawing.Color.DarkGoldenrod Case ListItemType.SelectedItem e.Item.BackColor = System.Drawing.Color.Yellow Case Else ' Add code here to hand the header, footer, and ' separator templates. End Select End Sub
protected void DataList1_ItemCreated(object sender, EventArgs e) { switch (e.Item.ItemType) { case ListItemType.Item : e.Item.BackColor = System.Drawing.Color.LightGoldenrodYellow; break; case ListItemType.AlternatingItem : e.Item.BackColor = System.Drawing.Color.DarkGoldenrod; break; case ListItemType.SelectedItem : e.Item.BackColor = System.Drawing.Color.Yellow; break; default : // Add code here to handle the header, footer, and // separator templates. break; } }
引發 ItemCreated 事件時,樣板中的個別控制項尚未繫結到資料。不過您可在 ItemDataBound 事件中取得資料。
若要使用 ItemDataBound 事件在執行階段時自訂項目
為 DataList 控制項的 ItemDataBound 事件建立事件處理常式。
在事件處理常式中,測試您是否正在使用 Item、AlternatingItem 或 EditItem,而且沒有使用頁首或頁尾。
使用 DataItem 屬性來測試將繫結至控制項的資料,並以它為基礎來進行比較。
以下範例將顯示如何依據資料來進行條件式測試。範例將事件引數的 DataItem 屬性轉換成 DataRowView 物件。然後從目前的 DataItem 擷取名為 Quantity 的欄位。如果數量少於 10,則 DataList 控制項中的項目會以紅色顯示。
Protected Sub DataList1_ItemDataBound(ByVal sender As Object, _ ByVal e As DataListItemEventArgs) If e.Item.ItemType = ListItemType.Item Or _ e.Item.ItemType = ListItemType.AlternatingItem Then Dim drv As System.Data.DataRowView = _ CType(e.Item.DataItem, System.Data.DataRowView) Dim quantity As Integer = _ Integer.Parse(drv.Row("Quantity").ToString()) If (quantity < 10) Then e.Item.BackColor = System.Drawing.Color.Red End If End If End Sub
protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e) { if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { System.Data.DataRowView drv = (System.Data.DataRowView)(e.Item.DataItem); int quantity = int.Parse(drv.Row["Quantity"].ToString()); if (quantity < 10) { e.Item.BackColor = Color.Red; } } }