我希望在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)时有效。其他时候它无效。在我的情况下,我在标题(或页脚)行期间收到ItemDataBound事件,其中没有DataItem:
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;
...
}
答案 0 :(得分:17)
我不得不猜测你需要这个:
if (e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.AlternatingItem)
{
//Put stuff here
}
毕竟,项目本身可能代表页眉或页脚行。
答案 1 :(得分:11)
我只想补充一点,我通过以下方式完成了这项工作:
protected void rpt_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
//determine if the row type is an Item
if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
{
DataRowView row = (DataRowView)e.Item.DataItem;
if (row["RowName"].ToString() == "value")
{
//INSERT CODE HERE
}
}
}
答案 2 :(得分:3)
对于转发器
if (e.Item.ItemType != ListItemType.Item && e.Item.ItemType...
可以修改为:
if (e.Item.DataItem != null) ...
答案 3 :(得分:1)
使用 动态
dynamic item = e.Item.DataItem;
string style = item.Style;
答案 4 :(得分:0)
如果您正在处理asp:ListView,您可以执行以下操作:
protected void myLV_ItemDataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType != ListViewItemType.DataItem)
return;
object dataItem = ((ListViewDataItem)e.Item).DataItem;
}
(问题的标题没有提到asp:repeater ..所以我认为发布asp:listview的代码可能会有所帮助)