如何:在运行时自定义 DataList 项

更新:2007 年 11 月

在页处理过程中,DataList 控件创建将呈现到该页的各项。为允许在创建时对项进行自定义,DataList 控件引发两个事件:

  • DataList 控件创建每个项、交替项、标头、脚注等都会引发 ItemCreated 事件。

  • ItemDataBound 事件在项中的控件完成数据绑定后引发。使用事件参数可以访问用于数据绑定的数据。如果根据数据进行自定义,则请使用此事件。

通过响应这些事件,可更改项。典型的用法是根据其中显示的数据更改项的外观。例如,如果从数据库读取的数值为负,则可以将该项的背景色设置为红色。

在运行时使用 ItemCreated 事件自定义项

  1. DataList 控件的 ItemCreated 事件创建一个事件处理程序。

  2. 在该事件处理程序中,使用来自 e 事件参数对象的 Item 对象获取当前项。通过 Item 对象的 ItemIndex 属性可获得当前项的索引,通过其 ItemType 属性(该属性是使用 ListItemType 枚举定义的)可获得其类型。

    6y92e1ze.alert_note(zh-cn,VS.90).gif说明:

    ItemIndex 属性仅对 ItemAlternatingItemSelectedItem 对象返回正值。标头、脚注和分隔符项的索引值为 -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 事件自定义项

  1. DataList 控件的 ItemDataBound 事件创建一个事件处理程序。

  2. 在该事件处理程序中,测试使用的是 Item、AlternatingItem 或 EditItem,而不是标头或脚注。

  3. 使用 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;
           }
        }
    }
    

请参见

参考

DataList Web 服务器控件概述