Получить данные, связанные с ListView на событие DataBound
У меня есть элемент управления ListView, и я добавил событие DataBound (не знаю, является ли оно правильным) для элемента управления.
Я хочу получить доступ к данным, привязанным к конкретному ItemTemplate из этого события, возможно ли это?
4 ответа
Решение C#
protected void listView_ItemDataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem)
{
ListViewDataItem dataItem = (ListViewDataItem)e.Item;
// you would use your actual data item type here, not "object"
object o = (object)dataItem.DataItem;
}
}
Почему они сделали это настолько отличным для ListView, все еще меня озадачивает. Там должна быть причина, хотя.
Немного поздно, но я постараюсь ответить на ваш вопрос, так как у меня была такая же проблема и я нашел решение. Вы должны привести свойство Item объекта ListViewItemEventArgs к ListViewDataItem, а затем получить доступ к свойству DataItem этого объекта, например так:
Private Sub listView_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewItemEventArgs) Handles productsList.ItemDataBound
If e.Item.ItemType = ListViewItemType.DataItem Then
Dim dataItem As Object = DirectCast(e.Item, ListViewDataItem).DataItem
...
End Sub
Затем вы можете привести объект dataItem к тому типу, которым был ваш связанный объект. Это отличается от того, как работают другие элементы управления с привязкой к данным, такие как повторитель, где DataItem является свойством для аргументов события для метода DataBound.
Данные, которые используются для текущего элемента, можно найти в EventArgs
,
Так из RepeaterItemEventArgs e
мы можем получить доступ к текущему элементу, посмотрев в e.Item.DataItem
,
protected void listView_ItemDataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem)
{
var currentItem = e.Item.DataItem;
}
}
Найдя обходной путь, я создал метод для форматирования данных так, как мне нужно, и вызвал их из разметки, используя:
<%# doFormatting(Convert.ToInt32(Eval("Points")))%>