Подтвердить что ты не робот

Получение данных, связанных с ListView в событии DataBound

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

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

4b9b3361

Ответ 1

Решение С#

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

Ответ 2

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

Ответ 3

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

<%# doFormatting(Convert.ToInt32(Eval("Points")))%>

Ответ 4

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