PROGRAMMING WORKSHOP

Skip Navigation Links. Skip Navigation Links.

VB.Net |
System.Data.DataSet,BindingSource,BindingNavigator

XML화일(데이타원본)을 쏘스로 한 콘트롤에서 이제
편집을 해보자
편집을 하는 것을 엄청 간결하게 만들어주는 콘트롤들이 등장한다
그렇지 않으면 코딩을 많이 해야 하지만
이 콘트롤을 사용하면 쥐뿔도 크게 염려할 것이 없다
어느 것과 어느 것을 연결하느냐만 신경쓰면 된다
현대의 모든 프로그램은 모두 이렇게 개체와 개체를 적절히
조합하면 되는 것이고
그럴려면 개체의 성질머리를 자꾸 조립을 해보면서 알아가면 되는 것이다

모든 콘트롤을 로딩할때 전부프로그래밍적으로 생성하면서
해도 되지만..
여기에서는 반은 손으로 만들고 반은 코딩을 하도록 하자



XML화일을 DataSet의 ReadXML로 불러서 DataTable을 만들고
이것을 BindingSource의 DataSource속성에 전달하고
BindingNavigator개체의 BindingSource에 BindingSource개체를 전달하고
각각의 TextBox의 DataBinding속성에 BindingNavigator의 내용을
전달하고..
DataGridView의 DataSource속성에도 BindingSource개체를 전달한다
이것은 하나의 쏘스에 텍스트박스, DataGridView, BindingNavigator가
모두 연동이 되게 되는 것이다

참 복잡해 보인다.. 그런데 실은 코딩을 엄청 간단하게 해주기 위한 개체들인 것이다
아래와 같은 몇줄이면 모두가 연동이 된다

DataSet 생성하여 ReadXML로 테이블이 생성되고

Dim oDataSet As New DataSet
oDataSet.ReadXml("books.xml")

BindingSource콘트롤의 DataSorce속성에 DataTable을 열결하거나
oData.Tables(0).DefaultView로 DataView를 연결해준다

BindingSource1.DataSource = oDataSet.Tables(0)

BindingNavigator콘트롤의 BindingSource속성에
BindingSource개체를 연결한다

BindingNavigator1.BindingSource = BindingSource1

DataGridView콘트롤의 DataSource에도 BindingSource콘트롤을
연결한다

DataGridView1.DataSource = BindingSource1

BindingSource개체가 완전 중간고리 역할을 한다
그럼 앞전에서 떠들던 DataView는 뭐여요...헷갈려 죽갔네...
DataView개체는 DataTable를 이렇게도 표현하고 저렇게도 표현하는
DataTable이나 마찬가지인 것이다..그냥 DataTable의 다른 버전으로
보면 생각이 단순해질 것이다
데이타베이스에서 데이타테이블이 있지만 이것을 쿼리를 해서
원하는 테이블로 보는 쿼리 테이블이라고 생각하시면 정리가 될 것이다

BindingSource, BindingNavigator개체는
윈도우폼의 각 컨트롤의 BindingSource속성에 연결을 하기 위한
중간고리 역할을 하는 것이다
예를 들어서 TextBox같은 것은 DataSource속성은 없다
DataBindings속성이 있는 것이다
그러나 같은 콘트롤이라도 DataGridView나 ComboBox같은 것은
DataSource속성이 있다
즉 떼거리로 정보를 소화하는 컨트롤과 단일정보를 소화하는 컨트롤은
종자가 다른 것이다
DataBindings속성을 갖고 있는 컨트롤의 정보와의 연결고리
DataBinding개체 잊지 마시기를...
몇번 하다 보면 감이 잡힌다



위의 그림은 텍스트박스의 속성창의 내용이다
속성창에 DataBindings라고 집합체로 되어있다
왜 집합체이지????TextBox가 갖고 있는 정보는 Text속성외에
Tag속성도 있다..Tag속성은 참 유용한 활용을 할수 있는 또다른 정보
주머니를 차고 있어서 편리하다, 나중에 어떤때 사용하는지 볼것이다
단일정보가 아니기 때문에 DataBindings라는 집합체로 s를 표현한 것이다
그래서 아래와 같은 구문으로 작성이 되는 것이다

TextBox1.DataBindings.Add("Text", BindingSource1, "author")

집합체라서 Add를 사용하고 첫번째 인수가 Text속성에 값을 Binding한다는
의미인 것이다, BindingSource개체에서 [author]라는 휠드값을
Binding해 주는 것이다

만약에 DataBinding개체가 없다면..
코딩이 참으로 피곤해 질 것이다
테이블의 정보가 다음 정보로 이동할때마다
각각의 콘트롤에 코딩을 해서 새로운 정보를 콘트롤의 속성에 주는
일을 하여야 할 것이다
이런 일을 BindingSource와 BindingNavigator콘트롤이 해주고 있다는
편리함을 알고 활용하면 되는 것이다

예를 들어서 엑셀의 UserForm에 워크시트상의 테이블의 정보를
나타나게 하기 위하여 텍스트박스를 여러개 달았다고 치면
워크시트상의 테이블의 다음 행의 정보로 이동하는 것을 구현한다면
행이동할때마다 각 텍스트박스에 이동된 행의 해당휠드정보를
다시 읽어서 속성에 주어야 하는 것..상상이 가시는지..
이런 일을 죄다 내 알아서 할테니..걱정마라!! 하는 것이
BindingSource와 BindingNavigator개체의 하는 일이다
그림으로 한번 더 정리해서 보면



그냥 개체와 개체의 역할을 알고 임무를 부여하고
연결만 해주면 된다
BindingNavigator개체는 시각적으로 눈에 보이는 콘트롤이다
방향버튼을 크릭하면 알아서 정보가 이동하고
이것에 연결된 모든 콘트롤도 역시 알아서 이동하고
삭제버튼을 크릭하면 모두 삭제되고
새정보입력버튼을 크릭하여 새정보 입력하면
새정보알아서 입력처리 되어 모든 콘트롤이 알아서 연동이 되고..

뭐가 이렇게 쉬워!!!!
이 것만으로 작은 XML화일 하나 연결하여 데이타관리
프로그램이 되겠는데???!!!
맞다!!!
얼마던지 만들고 확장할 수 있게 되는 것이다
버튼 하나 만들어서 엑셀로 보내도 좋고..
억세스테이블과 연결할수도 있고,..
엑셀을 받아서 콘트롤에 쉽게 표현을 할 수도 있고..

와!! 엑셀+강력파워!!가 되겠는데..되겠는데가 아니라 된다!!
아래 화일을 실행하면서 편집을 해 보시기 바란다..
위의 두개의 콘트롤이 없다면 얼마나 피곤했을까??를 상상하면서

***[LOG-IN]***