PROGRAMMING WORKSHOP

VB.Net |
System.Data.DataTable,DataSet, DataView

Dim oTbl As DataTable=DataGridView1.DataSource
라고 하면 에러가 날까?? 안날까???
분명히..앞 페이지에서
Dim oTbl As New DataTable
oTbl.Columns.Add...
oTbl.Columns.Add...
oTbl.Rows.Add..
oTbl.Rows.Add..
와 같이 하여 DataTable을 만든후
DataGridView1.DataSource=oTbl
하면 되었었으니까..역으로 다시 받아 오면 되지 않나???
아니다..
실은
DataGridView1.DataSource=oTbl
이라고 하는 것은 아래가 정식 으로 설정하는 방법이다
DataGridView1.DataSource=oTbl.DefaultDataView
즉 DataTable이 연결되는 것이 아니고 DataView라는 개체가 연결되는 것이다
DataTable을 만들면 자동으로 DataView개체가 중간에 하나 만들어지는 것이다



DataTable은 굳건히 자신의 정보를 지키고 있고
DataView개체가 DataTable에서 정보를 받아서 자신만의 버전의
테이블을 만드는 셈이다
즉 A라는 콘토롤에 연결된 DataView는 정렬을 이렇게 한 상태고
B라는 콘트롤에 연결된 DataView는 휠터를 한 상태고..
각각 제입맛에 맞는 데이타를 만들어서 갖게 되는 것이다
그러니 하나의 윈도우폼에 여러개의 데이타콘트롤을 구성하고
하나의 DataTable을 공급원으로 하여 각각 주문한 형식대로
표현을 해주는 것이 DataView개체의 역할이 되는 것이다
이것이 없다면..
A라는 콘트롤에서 정렬한 내용이 B라는 콘트롤에도 영향을
주지 않겠는가??
너는 너대로 , 나는 나대로 표현을 하겠다는 것이 된다
DataTable는 변동 없이!!

위의 그림의 GUI 콘트롤은 Graphic User Interface..즉
DataGridView, ComboBox, ListBox등의 정보를 다양한 형태로
보여주는 쇼윈도가 되는 것이다

정렬을 하거나 휠터를 하거나 값을 찾거나 모두
DataView개체가 일을 하게 된다
아래와 같이 하여 폼을 로딩시키면

Dim oTbl As DataTable = New DataTable

엑셀에서 배열로 정보를 만들어서 시트의 범위에 뿌린다고 
생각하시면 될것이다..

oTbl.Columns.Add("날짜", GetType(System.DateTime))
oTbl.Columns.Add("상품명", GetType(System.String))
oTbl.Columns.Add("담당자", GetType(System.String))
oTbl.Columns.Add("판매액", GetType(System.Int16))

For iX As Integer = 1 To 100
    oTbl.Rows.Add(New Object() {DateSerial(2011, Int(Rnd() * 12) + 1, Int(Rnd() * 30) + 1), _
                             Choose(Int(Rnd() * 5) + 1, "AAA", "BBB", "CCC", "DDD", "EEE"), _
                             Choose(Int(Rnd() * 5) + 1, "오징어", "꼴뚜기", "문어", "고등어", "낙지"), _
                             (Int(Rnd() * 100) + 50) * 100})

Next
DataGridView1.DataSource = oTbl
DataGridView1.Font = New Font("맑은 고딕", 8)

아래의 그림과 같이 만들어진 DataTable이 DataGridView를 통하여
표현되고



버튼을 크릭하여 DataTable의 DefaultView즉 DataView를 통하여
정렬(Sorting)작업을 시키면 원하는대로 정렬이 된다


Dim oTbl As DataTable = DataGridView1.DataSource
Dim oView As DataView = oTbl.DefaultView
oView.Sort = "날짜,상품명,담당자,판매액 ASC"
정렬순서를 날짜,상품명,담당자,판매액 을 오름차로 한것이다
Sort속성에 문자열정보로 준다

위의 데이타데이블의 DataView의 정보의 구성을 바꾸는 것이고
아래는 DataGridView를 통하여 모양을 바꿀수 있는 것
모양을 바꾸는것을 테이블단위가 아닌 열단위로 서식을 하는 셈이다

With DataGridView1.Columns(3).DefaultCellStyle
    .BackColor = Color.Red
    .ForeColor = Color.White
    .Font = New Font("맑은 고딕", 11, FontStyle.Bold)
    .Format = "###,###"
    .Alignment = DataGridViewContentAlignment.MiddleRight
End With

마치 엑셀에서 배열을 통하여 정보의 구성을 마음대로 만들고
워크시트의 범위의 셀서식을 통하여 콘트롤 하는 것과 같다
엑셀을 알고 이런 컨트롤을 비교하면서 보면 엑셀도 또 다시 한번
보게 되고, 윈도우와 관련된 다양한 테크닉을 좀더 빨리 소화
시킬수 있는 것이다

특히 Sort나 Filter등이 엑셀에서는 메소드이나 여기에서는
속성으로 사용하여서 간단하다...
이것은 SQL언어의 Where절을 문자열로 전달하는 것이나 마찬가지다
그래서 SQL언어를 모두 즐겼으면 하고 자꾸 SQL언어를 이야기하는 것이다
SQL언어가 낯섫지 않으면 다른 언어에서 종종응용되고 활용되고, 확장된다

DataGridView 콘트롤은 정보를 진열하는 진열창
DataTable은 정보를 메모리상에 보관하고 있는 보이지 않는 테이블
DataView는 메모리상의 테이블을 불러서 원하는 정보의 또 다른 테이블을
만드는 셈이다, 원본은 그대로 두고..
이 3개의 관계를 이해하시면 된다!!

***[LOG-IN]***