Практическое руководство. Настройка элементов DataList во время выполнения

Visual Studio 2010

Обновлен: Ноябрь 2007

Во время обработки страницы элемент управления DataList создает отдельные элементы, которыми будет заполняться страница. Чтобы обеспечить настройку элементов по мере их создания, элемент управления DataList вызывает два события:

  • Событие ItemCreated возникает, когда элемент управления DataList создает каждый элемент, чередующийся элемент, заголовок, нижний колонтитул и т. д.

  • Событие ItemDataBound возникает после того, как элементы управления данного элемента были связаны с данными. Параметры события можно использовать для доступа к данным, используемым для привязки данных. Это событие используется в случае, если настройка зависит от данных.

Реагируя на эти события, можно изменять элементы. Обычной практикой считается изменение внешнего вида элемента на основании отображаемых в нем данных. Например, если считываемое из базы данных числовое значение меньше нуля, можно изменить цвет фона этого элемента на красный.

Настройка элементов во время выполнения с использованием события ItemCreated

  1. Создайте обработчик для события ItemCreated элемента управления DataList.

  2. В обработчике событий вычислите текущий элемент, используя объект Item из объекта аргументов события e. Индекс текущего элемента доступен через свойство ItemIndex объекта Item, а его тип — через свойство ItemType (которое определяется при помощи перечисления ListItemType).

    6y92e1ze.alert_note(ru-ru,VS.100).gifПримечание.

    Свойство 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

  1. Создайте обработчик для события ItemDataBound элемента управления DataList.

  2. В обработчике событий проверьте, что вы работаете с Item,AlternatingItem или EditItem, а не с заголовком или нижним колонтитулом.

  3. Используя свойство DataItem, проверьте данные, которые будут привязаны к элементу управления, и постройте на основе этого сравнение .

    Следующий пример демонстрирует, как можно провести условную проверку, опираясь на данные. В данном примере свойство аргумента события DataItem приводится к объекту DataRowView. Затем оно извлекает значение поля «Quantity» из текущего объекта 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;
           }
        }
    }
    
Показ: