[C#] DataTable 행(Row), 컬럼 삭제 방법 (Remove, Delete)

C#의 DataTable에서 행(Row)과 컬럼(Column)을 삭제하는 방법은 간단하다. 그러나 반복문(for)을 사용하여 행(Row)을 삭제할 때는 Remove 메소드를 사용할 경우 오류가 날 수 있으니 Delete 메소드를 활용하는 것이 편할 수 있다.

 

컬럼(Column) 삭제 방법

1. 컬럼 위치로 삭제

- DataTable.Columns.RemoveAt("컬럼순번")

 

DataTable dt = new DataTable();

// ..생략

dt.Columns.RemoveAt(3);

 

2. 컬럼 명으로 삭제

- DataTable.Columns.Remove("컬럼명")

 

DataTable dt = new DataTable();

// ..생략

dt.Columns.Remove("HIREDATE");

 

행(Row) 삭제 방법

1. 행 위치로 삭제

- DataTable.Rows.RemoveAt("행순번")

 

DataTable dt = new DataTable();

// ..생략

dt.Rows.RemoveAt(1);

 

2. DataRow 삭제

- DataTable.Rows.Remove(DataRow)

 

DataTable dt = new DataTable();

// ..생략

DataRow row = dt.Rows[1];
dt.Rows.Remove(row);

 

3. Delete 메소드로 삭제 (복구 가능, 반복문 사용시 편함)

- DataTable.Rows["행순번"].Delete()

- DataRow.Delete()

 

DataTable dt = new DataTable();

// ..생략

dt.Rows[2].Delete();

 

Delete() 메소드로 삭제한 경우 dt.AcceptChanges() 메소드를 호출하지 않았으면 dt.RejectChanges() 메소드를 호출하여 삭제한 행 데이터를 복구할 수 있다. 데이터는 삭제되었지만 해당 영역에 남아 있기 때문이다.

 

dt.AcceptChanges()  // 커밋(Commit)과 같은 역할이다.

 

반복문에서 RemoveAt(), Remove() 메소드를 사용하여 행을 삭제할 경우 행의 순번이 바뀌기 때문에 오류가 발생하지만, Delete() 메소드를 사용하면 AcceptChanges() 함수 호출 전에는 순서가 바뀌지 않기 때문에 오류가 발생하지 않는다.

 

DataTable dt = new DataTable();

// ..생략

dt.AcceptChanges(); // 이전 변경 데이터 커밋

foreach (DataRow row in dt.Rows) {
    if (row["NAME"].ToString() == "John") {
        row.Delete();
    }
}

dt.AcceptChanges(); // 삭제한 데이터 커밋

 

( 반복문에서 DataTable 행 삭제 시 Remove() 메소드를 사용할 경우 아래의 오류가 발생할 수 있다 )

System.InvalidOperationException: '컬렉션이 수정되었습니다. 열거 작업이 실행되지 않을 수 있습니다.'

 

 

DataTableExample.zip
0.04MB

 

 

댓글

Designed by JB FACTORY