Asp.net
在ItemDataBound期間如何訪問被數據綁定的項目?
我想在 asp:repeater 的 ItemDataBound 事件期間獲取正在數據綁定的項目。
我嘗試了以下方法(這是stackoverflow 問題中不被接受的答案):
protected void myRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e) { Object dataItem = e.Item.DataItem; ... }但
e.Item.DataItem為空。如何在名為 ItemDataBound 的事件期間訪問正在綁定數據的項目。我假設 ItemDataBound 事件發生在項目被數據綁定時。
我想了解該對象,以便我可以採取措施控制它的顯示方式,此外,該對象可能具有其他有用的屬性,可以讓我豐富它的顯示方式。
回答
工具有正確的答案。答案是
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; ... }
馬上我不得不猜測你需要這個:
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { //Put stuff here }畢竟,項目本身可能代表頁眉或頁腳行。
我只是想補充一點,我確實通過執行以下操作完成了這一點:
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 } } }