2011-08-17 4 views
1

gridview 및 데이터베이스에서 행을 삭제하고 싶습니다. 일부 코드를 작성하지만이 코드는 단지 내 gridview의 첫 번째 행을 삭제합니다! 도와주세요. Entity Framework 및 wpf C#을 사용했습니다.wpf에서 데이터베이스 및 gridview에서 행 삭제

using (AccountingEntities cntx = new AccountingEntities()) 
{ 
    Producer item = this.grdProducers.SelectedItem as Producer; 
    cntx.DeleteObject(cntx.Producers.First(x => x.ID == item.ID)); 
    cntx.SaveChanges(); 
    dataPager.Source = cntx.Producers.ToList(); 
} 
+0

선택한 항목을 삭제 한 후 첫 번째 항목을 선택하는 것과 같은 요구 사항이 있습니까? – Bathineni

+0

기본적으로 항목을 삭제 한 후 첫 번째 항목이 선택됩니다. 나는 이것이 gridview의 기본 동작이라고 생각합니다. –

+0

키 코드가 * cntx.DeleteObject (cntx.Producers.First (x => x.ID == item.ID) * –

답변

0

나는 해결책을 찾을 : 내가 삭제 작업을 확인하는 대화 상자를 열 때 선택 항목이 변경되었습니다. 대화 상자를 열기 전에 entityId를 선택해야합니다. 아래 코드는이를 수행하는 방법을 보여줍니다.

  int unitTypeId = (this.grdUnitTypes.SelectedItem as UnitType).ID; 
      ConfirmWindowResult result = Helpers.ShowConfirm(this, SR.GlobalMessages.AreYouSureToDelete, SR.GlobalMessages.Warning); 
      if (result == ConfirmWindowResult.Yes) 
      { 
       using (AccountingEntities cntx = new AccountingEntities()) 
       { 
        try 
        { 
         cntx.UnitTypes.DeleteObject(cntx.UnitTypes.First(x => x.ID == unitTypeId)); 
         cntx.SaveChanges(); 
         dataPager.Source = cntx.UnitTypes.ToList(); 
         MessageBox.Show("Success"); 
        } 
        catch (Exception ex) 
        { 
         MessageBox.Show("Error"); 
        } 
        finally 
        { 
         cntx.Dispose(); 
        } 
       } 
      } 
0

어쩌면 당신은해야 간단한 시도 :

cntx.DeleteObject(cntx.Producers.where(x => x.ID == item.ID)); 

// if you get my .where() code to return the entity's index you'll should be fine 

이것은 appropiate 람다/LINQ를 호출해야합니다. 당신이 사용하기 때문에 "where"는 표현이 일치하는 모든 "프로듀서"-entity x에 적용되는 item.ID

UPDATE : MSDN에서

:

데이터에서 지정된 인덱스의 기록을 삭제합니다 출처.

DeleteObject(int rowIndex) 

음이 많이 설명합니다. 이것이 의미하는 바로는, 당신은 단순히 잘못된 주장을 전달하는 것입니다. foreach 또는 for를 사용하여 전체 Grid를 반복하고 deleteObject를 사용하여 각 엔티티를 삭제하고 객체의 id가 item.ID와 일치하는지 먼저 확인해야합니다.

나는 이것이 Lambda/LINQ를 사용하면 더 쉬울 것이라고 확신하지만, 현재 이것이 어떻게 다르게 수행 될 수 있는지 전혀 알지 못합니다.

또한 매우 흥미 롭습니다. "삭제"까지 아래로 스크롤해야합니다. 예제는 데이터베이스 용이지만 여전히 그리드를 버퍼로 사용하므로 유사한 문제 여야합니다.

http://www.asp.net-crawler.com/articles/LINQ/Insert-retrieve-update-delete-through-gridview-using-LINQ-to-SQL.aspx

+0

이기 때문에 LINQ + 문제라고 생각할 수 있습니다. 엔티티는 없지만 오류는 없지만 엔티티는 삭제되지 않습니다! 정말 피곤합니다. –

+0

@ mze666 정말 이상합니다. 왜냐하면 코드 뒤에있는 논리가 결과로 원하는 것을 정확히 수행해야하기 때문입니다. –