Asp.net

在ItemDataBound期間如何訪問被數據綁定的項目?

  • December 22, 2017

我想在 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
       }
     }
   }

引用自:https://stackoverflow.com/questions/344047