PROGRAMMING WORKSHOP

Skip Navigation Links. Skip Navigation Links.

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

VB.Net을 진행하면서 쎅션을 나누기가 참 애매하다
모든 이야기들이 서로 물려있어서 (Cross Reference) 구획을
나누기가 애매하다
그러니 섹션을 나눈다고 특별한 의미를 갖지 마시고 보시기 바란다
지금 하려고 하는 DataTable도 , 하나만 달랑 이야기 할수는 없다
DataTable의 부속품 DataRow,DataColumn
DataTable을 집합체로 갖고 있는 DataSet
또 이것을 시각적으로 표현하기 위한 콘트롤들..
또 하나의 DataTable의 내용을 여러개의 콘트롤에서 공동으로
DataTable에는 영향을 주지 않으면서 볼수 있게 하는 역할의
DataView등..또 콘트롤의 DataSource와 중간역할을 해주는
DataBinding등 서로가 관련이 되어 있지만 ..좀 이해하기 쉽게
나누어서 이야기 하지만 관련 된 개체들에 대한 이야기를
주저리..주저리 해야 함을 감안하시고 차근 차근 보셨으면 좋겠다
그러다 보면 엑셀을 처음 할때 헷갈렸으나 이제 자리가 잡혔듯이
VB.Net의 이런 저런개체들이 만만해 보여질때가 될 것이다

DataGridView콘트롤은 데이타를 진열하는 진열창이였다
이것을 뒤에서 자원을 공급해주고 자원을 받아들이고 하는 스마트한
메모리상의 창고 역할을 하는 개체를 몇페이지에 걸쳐서 보도록 하자
엑셀시트가 흥미롭듯이
.Net FrameWork의 흥미로운 부분은 ADO.Net과 연계하여
메모리상에 창고역할을 해주는 재미있는 개체이다
앞의 DataGridView섹션과 연속되는 페이지이니 같이 관련하여
참고 하시면서 보시기 바란다

프로그래밍은 정보를 주고 받는 것..
정보가 떼거리로 생성이 된다
이것을 어디엔가 보관하고 관리하면서 처리하고 싶은 것이다
효율적으로!!!
엑셀은 만만한 워크시트가 줄줄이 깔려 있어서 이런 문제자체를
잊고 살지만..
다른 프로그램은 워크시트와 같은 것을 어딘가에 만들어 두고
사용하여야 한다
이미 보기좋게 만들어진 워크시트가 손안에 있다는 것은
엑셀의 파워이기도 한 것이고, 엑셀 자체인 것이다

아무튼 테이블을 스스로 만들어 보는 것도 흥미로운 것
어디에서 얻어온 정보를 정리정돈하여 DataTable에 새롭게 구성하는 것
그런 작업이 필요한 것이다
아래의 그림과 같이 DataTable을 하나 만들고
이것을 DataGridView에 직접 연결하고
또 다른 하나는 특정문자가 정보에 있는 것만 휠터하여
다른 DataGridView에 연결하고..
또 버튼을 하나 달아서 DataTable개체가 갖고 있는
WriteXML메소드를 호출하여 XML화일도 만들어 보자



다른 콘트롤에 쏘스로 연결이 되어 버린 DataTable을
휠터를 하여 다른 콘트롤에 연결을 하려면
DataView라는 개체를 하나 더 사용한다
DataView라는 개체에 이미 만들어져서 다른 콘트롤에 연결된
정보를 별도의 작업을 해주기 위한 장치가 하나 필요하게 되고
그것이 DataView개체의 역할 인 것이다

실은 DataTable자체속에 기본적으로 DataView가 하나 있다
이것이 DataGridView콘트롤과 연결되는 셈이다
DataTable.DefaultView 라는 읽기전용 속성이 있다
만약 별도의 DataView개체를 만들지 않고
DataTable의 내용을 휠터를 하여 보여주고 싶다면
DataTable.DefaultView.RowFilter="이름='고등어'"
라고 해주면 DataGridView의 내용이 휠더가 된다

DataGridView콘트롤의 열머리를 크릭하면 정렬이 된다
이것도 연결된 DataView개체가 하는 일이다
위의 그림에서 별도의 DataView개체를 만든 것은
하나는 모두 보여주고 다른 것은 휠터를 한 상태를 보여주기
위함이였다

DataGridView두개를 마우스로 끌어서 폼에 놓는다
폼 크래스모듈에 아래와 같이 작성한다

Public Class Form1
Dim oTbl As DataTable
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
		oTbl = New DataTable("회원목록")
    oTbl.Columns.Add("이름", GetType(String))
    oTbl.Columns.Add("직업", GetType(String))
    oTbl.Columns.Add("주소", GetType(String))
    oTbl.Columns.Add("이메일", GetType(String))
    oTbl.Columns.Add("성별", GetType(String))
    oTbl.Columns.Add("비고", GetType(String))
		oTbl.Rows.Add(New String() {"오징어", "고등학생", _
        "서울", "xxx@xxx.com", "남자", "...."})
    oTbl.Rows.Add(New String() {"굴비", "대학생", _
        "인천", "vbb@vvv.com", "남자", "....."})
		oTbl.Rows.Add(New Object() {"고등어", "주부", _
        "수원", "Ppp@ppp.com", "여자", "..........."})
    oTbl.Rows.Add(New Object() {"꼴뚜기", "직장인", _
        "서울", "zzz@zzz.com", "여자", "............."})
 		DataGridView1.DataSource = oTbl
		Dim oView As New DataView(oTbl)
		oView.RowFilter = "이름 like '%어'"
		DataGridView2.DataSource = oView
		DataGridView1.Font = New Font("맑은 고딕", 9)
    DataGridView2.Font = New Font("맑은 고딕", 9)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    oTbl.WriteXml(My.Computer.FileSystem.SpecialDirectories.Desktop & "\xxxx.xml")
End Sub
End Class

참 흥미롭다
어떤 개체를 만들어서 New SomeObj
개체에 다양한 기능을 주고 SomObj.Property="xxx"
이것을 집합적으로 관리하는 상위 집합체에 SomeObjCollection.Add SomeObj
해주면 조립이 되어 가는 모습은 가히 예술이다

모두 VBA를 섭렵하고 이런 개체의 즐거움을 공감하였으면 좋겠다!

DataTable의 WrieXML이라는 메소드는
문자열이 어떻고..저떻고 따질일이 없이 그냥 메소드를 호출하면
XML화일을 만들어준다
그러니 XML화일을 어떻게 만드는지 어쩌구 하던 것은 쓰잘데
없는 힘의 낭비인 셈이다..그래서 uno-xl-programming에서
하다..말다 한 것이다..필요할까..그래도 원리는 알아야지..
그런 갈등속에서..실은 필요 없다
그래서 VB.Net부분을 열심히 만들어서 올리는 것이 그런 부분의
이해도 도와야 하기때문이다
DataTable개체에게 그냥 만들어라!!! 라고 하면 만드니까!!
그렇다면 WriteXML이라는 메소드가 있다면
ReadXML이라는 메소드도 있을까??
당연히 있다
어라 그런데 에러가 난다..
어떤 중간절차를 해주어야 한다..
이런 중간절차가 있다는 것은 분명 어떤 관련된 다른 개체가
무언가 도움을 주는 일을 할 것이라는 것은 상상이 될 수 있는 것이다
이럴때는 또 개체를 잘 살펴보면 된다..
DataTable을 관리하는 상위개체는 DataSet이라는 것이 기억이
났으면 좋을텐데 안 날 것이다
DataSet은 여러개의 DataTable을 관리하는 개체이다
그러니 이놈이 갖고 있는 기능도 또 이런 저런 것이 있을 것이다
어라..이놈도 ReadXML이라는 메소드를 갖고 있네..

다음 페이지에서 관련하여 더 나가 보도록 하자
아래 화일에는 위의 내용과 모듈시트속에 해설을 달았다

***[LOG-IN]***