foreach(DataRow dr IN dtData.Rows)
{
if(dr["name"].ToSting() == "smith")
dr.Remove();
}
개발을 하다보면 위와같이 처리해야 하는 경우가 종종 발생한다.
그럼 컴파일시 아래와 같은 오류가 발생한다.
컬렉션이 수정되었습니다. 열거 작업이 실행되지 않을 수 있습니다.
현재 사용중인 Collection에 직접 삭제작업이 안되므로 다른 방법으로 삭제해야 한다.
처리방법
foreach(DataRow dr IN dtData.Select())
{
if(dr["name"].ToSting() == "smith")
dr.Delete();
}
dtData.AcceptChanges();
1. foreach(DataRow dr IN dtData.Select())
- 먼저 dtData.Rows가 아닌 Select()로 DataRow Collection을 가져온다.
2. dr.Delete();
- Remove()가 아닌 Delete() 함수로 삭제하여 당장 Row를 삭제처리하지 않고 RowState = Deleted로 상태만 변경한다.
3. dtData.AcceptChanges();
- AcceptChanges 함수로 DataRowState 상태가 변경된 Row들을 적용시킨다.
* DataRowState 상태 종류
- Unchanged : 변경 없음
- Added : 새로운 Row로 추가됨
- Detached : 새로운 Row로 추가되었으나 삭제됨
- Modified : 기존 Row의 내용이 수정됨
- Deleted : 기존 Row가 삭제됨
'Development > C#' 카테고리의 다른 글
'MySqlParameterCollection.Add(string, object)'은(는) 사용되지 않습니다. (0) | 2021.12.21 |
---|---|
비주얼 스튜디오(Visual Studio) 2017 2019 Setup 프로젝트 추가하기 (0) | 2021.03.20 |
C# CommandText 로 Mysql에 직접 트리거 생성하기 (0) | 2020.11.18 |
BitBucket 에서 GitHub로 Repository 이전 방법 (0) | 2020.08.30 |
C# WebBrowser에 https관련 경고 표시 해결방법 (0) | 2020.08.21 |