HOW TO:在執行階段中自訂 DataList 項目

更新:2007 年 11 月

在分頁處理期間,DataList 控制項會建立呈現在頁面上的個別項目。為了讓您能夠在建立項目時進行自訂,DataList 控制項會引發兩個事件:

  • ItemCreated 事件是在 DataList 控制項建立各項目、替代項目、頁首和頁尾 (Footer) 等等時所引發。

  • ItemDataBound 事件則是在某一項目中的控制項完成資料繫結後才引發的。您可以使用事件參數來存取已用於資料繫結的資料。如果自訂是視資料而定,請使用這個事件。

您可藉由回應這些事件來變更項目。常見的用法是依據其中顯示的資料來變更項目外觀。例如,如果從資料庫讀取的數值是負值,那麼您可能會將項目的背景色彩設為紅色。

若要使用 ItemCreated 事件在執行階段時自訂項目

  1. DataList 控制項的 ItemCreated 事件建立事件處理常式。

  2. 在事件處理常式中,使用 Item 物件來從 e 事件引數物件取得目前項目。目前項目的索引可透過 Item 物件的 ItemIndex 屬性取得,而其型別則是透過 ItemType 屬性 (這是使用 ListItemType 列舉型別所定義的) 取得。

    注意事項:

    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 伺服器控制項概觀