Практическое руководство. Настройка элементов DataList во время выполнения
Обновлен: Ноябрь 2007
Во время обработки страницы элемент управления DataList создает отдельные элементы, которыми будет заполняться страница. Чтобы обеспечить настройку элементов по мере их создания, элемент управления DataList вызывает два события:
Событие ItemCreated возникает, когда элемент управления DataList создает каждый элемент, чередующийся элемент, заголовок, нижний колонтитул и т. д.
Событие ItemDataBound возникает после того, как элементы управления данного элемента были связаны с данными. Параметры события можно использовать для доступа к данным, используемым для привязки данных. Это событие используется в случае, если настройка зависит от данных.
Реагируя на эти события, можно изменять элементы. Обычной практикой считается изменение внешнего вида элемента на основании отображаемых в нем данных. Например, если считываемое из базы данных числовое значение меньше нуля, можно изменить цвет фона этого элемента на красный.
Настройка элементов во время выполнения с использованием события ItemCreated
Создайте обработчик для события ItemCreated элемента управления DataList.
В обработчике событий вычислите текущий элемент, используя объект Item из объекта аргументов события e. Индекс текущего элемента доступен через свойство ItemIndex объекта Item, а его тип — через свойство 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
Создайте обработчик для события ItemDataBound элемента управления DataList.
В обработчике событий проверьте, что вы работаете с Item,AlternatingItem или EditItem, а не с заголовком или нижним колонтитулом.
Используя свойство 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; } } }