VB.NET 2008/VB - 데이터 그리드 뷰

메모리 내 데이터의 테이블을 나타내는 DataTable 클래스

본클라쓰 2012. 9. 22. 10:47

 

DataTable 클래스는 메모리 내 데이터의 테이블 한 개를 나타낸다.

 

DataTable은 ADO.NET 라이브러리의 중심 개체이다. DataTable을 사용하는 다른 개체에는 DataSet DataView가 포함된다.

 

DataTable 개체에 액세스할 때는 조건에 따라 대/소문자가 구분된다. 예를 들어 두 DataTable의 이름이 각각 'mydatatable'과 'Mydatatable'인 경우에는 두 테이블 중 하나를 검색하는 데 사용되는 문자열에서 대/소문자를 구분한다.

그러나 'mydatatable'은 있고 'Mydatatable'은 없는 경우에는 검색 문자열에서 대/소문자를 구분하지 않는다. TableName 속성 값은 동일하지만 Namespace 속성 값은 다른 두 개의 DataTable 개체가 DataSet에 포함할 수 있다.

 

프로그래밍 방식으로 DataTable을 만드는 경우 Columns 속성을 통해 액세스하는 DataColumnCollection에 DataColumn 개체를 추가하여 스키마를 먼저 정의해야 한다.

 

DataTable에 행을 추가하려면 먼저 NewRow 메서드를 사용하여 새 DataRow 개체를 반환해야 한다. NewRow 메서드는 테이블의 DataColumnCollection에서 정의된 DataTable의 스키마가 있는 행을 반환한다. DataTable이 저장할 수 있는 최대 행 개수는 16,777,216 이다.

 

테이블이 변경될 때 이를 확인하는 데 사용할 수 있는 여러 DataTable 이벤트가 있다. 이러한 이벤트에는 RowChanged, RowChanging, RowDeleting 및 RowDeleted가 있다.

 

 

 

DataTable에 행을 추가하는 방법

 

Dim dt As New DataTable

Dim newRow As DataRow = dt.NewRow

newRow.Item(0) = "테스트"

dt.Rows.Add(newRow)

 

 

 

DataTable에 임의의 열에 행을 추가하는 방법

 

DataTable을 For 문으로 돌리면서 행을 추가하는 방법을 생각하기 쉬운데 For 문으로 돌리면서 행을 추가하면 오류가 발생한다. 다음과 같은 코드는 오류를 발생시킨다.

 

Dim rowCount As Integer = 0

Dim count As Integer = 0

For Each r As DataRow In MyDataTable.Rows

    If (count Mod 2 = 0) Then

        Dim newRow as DataRow

        newRow.Item(0) = "두 줄에 한 행씩 삽입합니다"

        MyDataTable.Rows.InsertAt(newRow, Rowcount)

        RowCount += 1

    End If

    RowCount += 1

    count += 1

Next

 

위와 같은 방법이 안되기 때문에 다음과 같은 방법으로 처리한다.

 

Dim rowCount As Integer = 0

Dim count As Integer = 0

For i = 0 To MyDataTable.Rows.Count

    if( i Mod 2 = 0) then

        Dim newRow as DataRow

        newRow.Item(0) = "두 줄에 한 행씩 삽입한다."

        MyDataTable.Rows.InsertAt(newRow, Rowcount)

        RowCount += 1

    End If

    RowCount + 1

Next