2011-03-04 50 views
1

如何在ItemEditing事件中獲得DataItemlistView?我認爲它會像中繼器一樣工作,但我不知所措。我需要它做這樣的事情:如何在ListView的OnItemEditing中獲取DataItem?

protected void lvUsers_ItemEditing(object sender, ListViewEditEventArgs e) 
    { 
     var item = lvUsers.Items[e.NewEditIndex];    
     var id = DataBinder.Eval(item.DataItem, "ID").ToString(); 
     var name = DataBinder.Eval(item.DataItem, "Name").ToString(); 
    } 

我在做什麼錯? item.DataItem始終爲空。謝謝!!

我看到,我可以用得到的datakey的ID:

lvUsers.DataKeys[item.DataItemIndex].Value 

我想我可以查詢數據庫得到的值的其餘部分,但因爲它是數據綁定我想我可以讓他們沒有數據庫調用。

我必須在datakeys中設置每個屬性嗎?

我也嘗試使用OnItemCommand同樣的事情。

FindControl對我來說不起作用,要麼在任何這些事件中找到編輯模板中的下拉列表。

ListView要麼很難使用,要麼我缺少一個關鍵概念。

回答

4

DataItem對象只AVA在數據綁定過程中可用(ItemDataBound事件)。之後,它不再存在。這就是爲什麼它在代碼中始終爲空。

您必須將信息包含在DataKeys中(不推薦,如果它是大量數據的話),或者使用FindControl從EditItemTemplate中的控件獲取值。

你說FindControl不適合你。你有沒有嘗試這樣做?

ListViewItem item = lvUsers.Items[e.NewEditIndex]; 
DropDownList ddl = item.FindControl("MyDDL") as DropDownList; 
0

我沒有使用列表視圖一段時間,但是這可能會幫助:

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listview.itemdatabound.aspx

它顯示了的ItemDataBound方法來訪問值的方式,但我認爲它可能是大致相同...

protected void ContactsListView_ItemDataBound(object sender, ListViewItemEventArgs e) 
    { 
     Label EmailAddressLabel; 
     if (e.Item.ItemType == ListViewItemType.DataItem) 
     { 
      // Display the e-mail address in italics. 
      EmailAddressLabel = (Label)e.Item.FindControl("EmailAddressLabel");  
      System.Data.DataRowView rowView = e.Item.DataItem as System.Data.DataRowView; 
      string currentEmailAddress = rowView["EmailAddress"].ToString(); 
     } 

看看是否有幫助,或者至少讓你更接近...

相關問題