Получить данные, привязанные к ListView по событию DataBound - PullRequest
12 голосов
/ 13 мая 2009

У меня есть элемент управления ListView, и я добавил событие DataBound (не знаю, является ли оно правильным) в элемент управления.

Я хочу получить доступ к данным, привязанным к этому конкретному ItemTemplate из этого события, возможно ли это?

Ответы [ 4 ]

19 голосов
/ 13 августа 2009

C # Solution

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, до сих пор меня удивляет. Хотя должна быть причина.

3 голосов
/ 30 июня 2009

Немного поздно, но я постараюсь ответить на ваш вопрос, так как у меня была такая же проблема и я нашел решение. Вы должны привести свойство 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.

1 голос
/ 13 мая 2009

Нашел обходной путь, я создал метод для форматирования данных так, как мне нужно, и вызвал их из разметки, используя:

<%# doFormatting(Convert.ToInt32(Eval("Points")))%>
0 голосов
/ 10 января 2016

Данные, используемые для текущего элемента, можно найти в 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...