在 DataBound 事件上获取绑定到 ListView 的数据
Posted
技术标签:
【中文标题】在 DataBound 事件上获取绑定到 ListView 的数据【英文标题】:Get data being bound to ListView on DataBound event 【发布时间】:2009-05-13 13:40:32 【问题描述】:我有一个 ListView 控件,并在控件中添加了一个 DataBound 事件(不知道这是否正确)。
我想从此事件中访问绑定到特定 ItemTemplate 的数据,这可能吗?
【问题讨论】:
【参考方案1】: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 变得如此不同仍然让我感到困惑。不过肯定是有原因的。
【讨论】:
【参考方案2】:有点晚了,但我会尝试回答您的问题,因为我遇到了同样的问题并找到了解决方案。您必须将 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 方法的事件参数上的一个属性。
【讨论】:
【参考方案3】:找到了一种解决方法,我创建了一种方法来根据需要格式化数据并使用以下方法从标记中调用它:
<%# doFormatting(Convert.ToInt32(Eval("Points")))%>
【讨论】:
我更喜欢这个解决方案,而不是在 ItemDataBound 事件中捕获它。唯一的建议是在您的方法doFormatting
中,您应该检查null
或DBNull
【参考方案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;
【讨论】:
以上是关于在 DataBound 事件上获取绑定到 ListView 的数据的主要内容,如果未能解决你的问题,请参考以下文章
Angular 2 Grid dataBound 事件的 Kendo UI
为 DataBound DropDownList 中的空白/默认 ListItem 禁用 PostBack
每次页面更改和排序都会触发 Kendo 网格的 dataBound 事件
子网格的 Kendo Grid Fluent API DataBound 事件以显示无项目文本?