2010-12-17 5 views
1

C#의 데이터 테이블에서 행을 제거하려고 할 때 문제가 발생했습니다. 문제는 데이터 테이블이 SQL로 작성 되었기 때문에 여러 열을 가질 수 있고 기본 키가 있거나 없을 수 있다는 것입니다. 따라서 특정 열의 값이나 기본 키를 기반으로 행을 제거 할 수 없습니다. "주어진 DataRow를 현재 DataRowCollection에없는"나에게 오류 메시지를 제공하는,C#의 일반 데이터 테이블에서 행을 제거

//Set up a new datatable that is an exact copy of the datatable from the SQL table. 
newData = data.Copy(); 
//...(do other things) 
foreach (DataRow dr in data.Rows) 
{ 
    //...(do other things) 
    // Check if the row is already in a data copy log. If so, we don't want it in the new datatable. 
    if (_DataCopyLogMaintenance.ContainedInDataCopyLog(dr)) 
    { 
    newData.Rows.Remove(dr); 
    } 
} 

그러나 :

는 여기에 내가 뭘하는지의 기본적인 개요입니다. newData가 직접적인 데이터 복사본이라는 점을 감안하면 어떤 의미가 없습니다. 다른 사람에게 제안 사항이 있습니까? MSDN 사이트는 별 도움이되지 않았습니다.

감사합니다.

+2

예, _copy_가 있지만 _ 그 행 _이 없습니다. newData에서 행을 제거하려면 다른 행의 행이 아니라 포함 된 행 중 하나를 참조해야합니다 (정확한 복제에도 불구하고 여전히 다르며 동일한 행을 제거하는 데 사용할 수 없음). newData의 행). –

답변

4

foreach은 원본 세트가 아니라 복사본에 있어야합니다. collection2에있는 collection1에 포함 된 객체는 제거 할 수 없습니다.

foreach (DataRow dr in newData.Rows) 

그렇지 않으면 인덱스를 사용하여 카운터를 제거 할 수 있습니다. 다음과 같이 입력하십시오 :

for(int i = 0; i < data.Rows.Count; i++) 
{ 
    if (_DataCopyLogMaintenance.ContainedInDataCopyLog(data.Rows[i])) 
    { 
    newData.Rows.RemoveAt(i); 
    } 
} 
+0

고마워, 그게 내가 필요한거야. datatabe.copy() 메서드에 대한주의 사항은 본 적이 없지만 단지 복사본 일 뿐이며 원래 행을 참조하지 않습니다. – Greg

관련 문제