【发布时间】:2010-09-25 12:50:48
【问题描述】:
我想在 asp:repeater 的 ItemDataBound 事件期间获取正在数据绑定的项目。
我尝试了以下方法(这是 stackoverflow question 中未接受的答案):
protected void myRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
Object dataItem = e.Item.DataItem;
...
}
但e.Item.DataItem 为空。
如何在名为 ItemDataBound 的事件期间访问正在数据绑定的项目。我假设 ItemDataBound 事件发生在项目被数据绑定时。
我想了解该对象,以便我可以采取措施控制它的显示方式,此外,该对象可能具有其他有用的属性,可以让我丰富它的显示方式。
回答
Tool 有正确的答案。答案是e.Item.Data 仅在e.Item.ItemType 为(Item, AlternatingItem)时有效。其他时候它是无效的。就我而言,我在没有 DataItem 的页眉(或页脚)行期间收到了 ItemDataBound 事件:
protected void myRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
// if the data bound item is an item or alternating item (not the header etc)
if (e.Item.ItemType != ListItemType.Item &&
e.Item.ItemType != ListItemType.AlternatingItem)
{
return;
}
Object dataItem = e.Item.DataItem;
...
}
【问题讨论】:
-
我相信事件是在项目被数据绑定之后触发的。我想我曾经在 PreRender 事件中访问数据。不过需要检查一些旧代码
-
我个人更喜欢按照答案的方式来做,因为它比随机返回退出更容易理解,尤其是在 ItemDataBound 之类的 void 方法上。我的公正意见