如何:在运行时自定义 DataList 项
更新:2007 年 11 月
在页处理过程中,DataList 控件创建将呈现到该页的各项。为允许在创建时对项进行自定义,DataList 控件引发两个事件:
DataList 控件创建每个项、交替项、标头、脚注等都会引发 ItemCreated 事件。
ItemDataBound 事件在项中的控件完成数据绑定后引发。使用事件参数可以访问用于数据绑定的数据。如果根据数据进行自定义,则请使用此事件。
通过响应这些事件,可更改项。典型的用法是根据其中显示的数据更改项的外观。例如,如果从数据库读取的数值为负,则可以将该项的背景色设置为红色。
在运行时使用 ItemCreated 事件自定义项
为 DataList 控件的 ItemCreated 事件创建一个事件处理程序。
在该事件处理程序中,使用来自 e 事件参数对象的 Item 对象获取当前项。通过 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; } } }