2011-03-04 12 views
1

ItemEditing 이벤트의 listView에있는 DataItem을 어떻게 얻을 수 있습니까 ?? 리피터와 비슷하게 작동 할 것이라고 생각했지만 손실이 있습니다. 다음과 같이 처리해야합니다.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은 항상 null입니다. 감사!!

은 내가 사용 datakey에서 ID를 얻을 수 있습니다 참조 :

lvUsers.DataKeys[item.DataItemIndex].Value 

이 난 나머지 값을 얻을 수있는 DB를 쿼리하지만 이후 수도있을 것 같군요 바인딩 내가 그들을 얻을 수 있다고 생각 것 db 호출없이.

모든 속성을 datakeys에 설정해야합니까 ??

나는 또한 OnItemCommand 동일한 것을 사용해 보았습니다.

FindControl은 이러한 이벤트 중 하나에서 편집 템플릿의 드롭 다운을 찾지 못합니다.

ListView는 작동하기가 어렵거나 핵심 개념이 누락되었습니다.

답변

4

DataItem 객체는 AVA입니다 ...보기 데이터 바인딩 프로세스 동안 (ItemDataBound 이벤트) ilable. 그 후에는 더 이상 존재하지 않습니다. 이것이 코드에서 항상 null 인 이유입니다.

DataKeys에 정보를 포함하거나 (많은 양의 데이터는 권장되지 않음) FindItrol을 사용하여 EditItemTemplate의 컨트롤에서 값을 가져와야합니다.

FindControl이 작동하지 않는다고하셨습니다. 다음과 같은 방법으로 시도해 보셨습니까?

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

나는 한 동안의 ListView를 사용하지 않은,하지만이 도움이 될 수

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(); 
     } 

관련 문제