我有一个ListView控件,我已经向控件添加了一个DataBound事件(不知道这是不正确的)。
我想要从这个事件中访问绑定到特定ItemTemplate的数据,这可能吗?
答案 0 :(得分:19)
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如此不同仍然让我感到困惑。但是必须有一个理由。
答案 1 :(得分:3)
有点晚了,但我会尝试回答你的问题,因为我有同样的问题,并找到了解决方案。您必须将ListViewItemEventArgs的Item属性转换为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方法的事件参数的属性。
答案 2 :(得分:1)
找到了一种解决方法,我创建了一种方法来格式化我需要的数据,并使用以下方法从标记中调用它:
<%# doFormatting(Convert.ToInt32(Eval("Points")))%>
答案 3 :(得分:0)
可以从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;
}
}