获取DataBound事件上绑定到ListView的数据

时间:2009-05-13 13:40:32

标签: asp.net listview

我有一个ListView控件,我已经向控件添加了一个DataBound事件(不知道这是不正确的)。

我想要从这个事件中访问绑定到特定ItemTemplate的数据,这可能吗?

4 个答案:

答案 0 :(得分:19)

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如此不同仍然让我感到困惑。但是必须有一个理由。

答案 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;
    }
}
相关问题