Получить данные, связанные с 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")))%>
Другие вопросы по тегам