2012-06-20 2 views
0

DataTable에서 DataRow를 삭제하려고합니다. 삭제할 행은 데이터 이동 목록 "wantDelete"에 있습니다. 예외 상황으로 인해 내 코드를 수정하십시오 :DataTable에서 DataRow 삭제

foreach (DataRow dr in myTable.Rows) 
{ 
    if (wantDelete.Contains(dr)) 
    myTable.Rows.Remove(dr); 
} 

는 예외입니다 :

exception

가 대단히 감사합니다.

+0

이 어떻게 wantdelete 배열을 가지고 한 ...

 List<DataRow> rowsToDelete = new List<DataRow>(); foreach (DataRow dr in myTable.Rows) { if (wantDelete.Contains(dr)) { rowsToDelete.Add(dr); } } foreach (var dataRow in rowsToDelete) { myTable.Rows.Remove(dataRow); } 

희망이 도움이 : 그래서 데이터 행의 다른 목록에 반복하면서 데이터 행을 저장하고이를 liek 삭제 하시겠습니까? datatable.select ("condition")을 수행 했습니까, 아니면 새 DataRow()를 작성 했습니까 – Esen

답변

5

따라서 for-loop을 사용하거나 사전 필터링 한 다른 모음 (deleteItems)을 사용해야합니다.

foreach (DataRow dr in wantDelete) 
{ 
    myTable.Rows.Remove(dr); 
} 

사이드 노트 : 나는 당신이 이미 그것을 미리 여과 한 코드에서 볼 수

은 (내가 wantDelete가 List<DataRow>) 가정 당신이 DataTable에서 행을 제거하는 당신의 DBMS의 경우,이를 삭제하지 않는 것을 알고있다 당신은 DataAdapter를 사용하고 그 때문에 당신은 DataRow.Delete()을 사용해야합니다

+0

DataAdapter를 사용하지 않았습니다. –

0

동일한 테이블을 반복하고 삭제하고 있습니다. 즉, 행이 제거 된 후 myTable.Rows가 변경되어 "루프"를 사용할 수 없습니다. 표를 다른 표로 복사하고 h 제하십시오. foreach는 열거자를 사용하고 열거 자 (enumerator)는 기본 컬렉션을 변경할 수 없으므로 열거 형 중 컬렉션을 수정할 수 없습니다. foreach는 "복사"테이블을 반복하여 "원본"테이블에서 제거해야합니다.

+0

코드가 필요합니다. –

1

이 경우 foreach는 루프를 사용하지 마십시오 사용하여 정수 반복 :..

for (int I = myTable.Rows.Count - 1; I >= 0; I -= 1) { 
    if (wantDelete.Contains(myTable.Rows(I))) { 
     myTable.Rows.Remove(myTable.Rows(I)); 
    } 
} 
1

DataRow가 속하는 DataTable을 반복하는 동안 DataRow를 제거 할 수 없습니다.