【发布时间】:2009-05-13 13:40:32
【问题描述】:
我有一个 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 变得如此不同仍然让我感到困惑。不过肯定是有原因的。
【讨论】:
有点晚了,但我会尝试回答您的问题,因为我遇到了同样的问题并找到了解决方案。您必须将 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 方法的事件参数上的一个属性。
【讨论】:
找到了一种解决方法,我创建了一种方法来根据需要格式化数据并使用以下方法从标记中调用它:
<%# doFormatting(Convert.ToInt32(Eval("Points")))%>
【讨论】:
doFormatting 中,您应该检查null 或DBNull
用于当前项目的数据可以从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;
}
}
【讨论】: