У меня есть элемент управления ListView, и я добавил элемент управления DataBound (не знаю, является ли это правильным) для элемента управления.
Я хочу получить доступ к данным, связанным с этим конкретным ItemTemplate из этого события, возможно?
У меня есть элемент управления ListView, и я добавил элемент управления DataBound (не знаю, является ли это правильным) для элемента управления.
Я хочу получить доступ к данным, связанным с этим конкретным ItemTemplate из этого события, возможно?
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.
Нашел обходной путь, я создал метод для форматирования данных, как мне нужно, и вызвал его из разметки, используя:
<%# doFormatting(Convert.ToInt32(Eval("Points")))%>
Данные, которые используются для текущего элемента, можно найти в 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;
}
}