VB.Net |
System.Data.DataTable,DataSet, DataView
DataGridView의 내용을 삭제를 하거나 추가하거나 수정하고
싶은 것은 당연할 것이다
앞전에서 까지 한 내용으로는 그냥 DataGridView상에 행을
추가하여 정보를 넣거나..
셀의 내용을 그냥 수정하면 되는 것을 보았을 것이다
그러나 이것은 눈에 보이는 것만 수정이 되었을뿐 Data 원본(xml화일)에는
아무 영향을 주지 않는다
그래서 헷갈리고 뭐가 뭔지 모르겠다고 하게 된다
DataGridView까지 데이타원본에서 정보가 연결되기까지는
개체들의 역할이 있었다
DataGridView에 시각적으로 편집된 내용은
DataView의 내용만 편집된 상태이고 이것의 쏘스인 DataTable까지
편집된 상태이다..여기까지는 모두 연동이다
DataView의 내용을 시각적으로 보여주는 것이 콘트롤(DataGridView)이다
그래서 행을 추가하거나
기존행의 내용을 수정하는 것은 DataTable까지 반영이 된다
그런데 삭제를 하고 싶다
예를 들면 DataGridView의 하나의 행을 행머리를 더블크릭하면
삭제가 되게 하고 싶다면..
별도의 코딩을 추가하여야 할 것이다
아래의 그림과 같이 두개의 DataGridView를 만들었다
DataView가 편집같은 중요한 일을 하니까..
삭제를 하려면 이 개체를 찾아서 삭제를 시켜야 한다
수많은 이벤트중에서 타이밍 적절한 것을 찾아서
아래와 같이 RowHeadMouseDoubleClick이벤트가 적절할 것이다
삭제할 까요..말까요 물어보고 해도 좋고.
그냥 딥다 삭제명령 내려도 좋고
Private Sub DataGridView1_RowHeaderMouseDoubleClick( _
ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs)_
Handles DataGridView1.RowHeaderMouseDoubleClick
Dim oView As DataView = CType(DataGridView1.DataSource, DataTable).DefaultView
oView.Delete(e.RowIndex)
End Sub
그런데 첫째 DataGridView콘트롤의 DataSourc개체에 DataTable을
연결하였기때문에..
CType(DataGridView1.DataSource,DataTable)을 하여 DataTable 을 얻은후
다시 DafaultView로 접근하여야 DataView를 얻을수 있다
만약 당초에 연결할때
DataGridView1.DataSource=oDataSet.Tables(0).DefaultView
라고 하였다면
Dim oView As DataView = CType(DataGridView1.DataSource, DataView)
와 같이 하여 DataView를 얻을 수 있다
아무튼 두개의 DataGridView의 행머리를 더블크릭하면
삭제가 된다..
이때 다른 콘트롤도 똑같이 연동이 된다
이것은 무엇을 증명하냐 하면
다른 DataView를 만들었지만 똑같은 DataTable을 쏘스로 하기때문에
DataTable이 변하므로 다른 콘트롤도 변하게 되는 재미있는
결과를 얻게 되는 것이다
아무튼 한동안 헷갈리실것이다..
이놈이 저놈같고..저놈이 이놈같고..
신입사원을 뽑았는데 이름이 헷갈리듯이
이 것도 역시 마찬가지다..
그러니 밥도 같이 먹구..술도 마시고 ..치고 받아야
친해지듯이 역시 마찬가지다..
같이 즐겁게 노시기를!!!
회식자리에 가서 ..어라..짜식이 노래도 잘하네..라는
기능을 발견하듯이
개체들도 어라...이런 일도하네..하게 되는 것이다
아래의 화일에서는
아래의 그림과 같이
버튼 하나는 DataTable로 두개의 DataGridViw에 연결하고
다른 버튼은 DataTable로 연결하고 다른 것은 DataTable에서 생성한
DataView로 연결하였다
하나는 행머리를 선택할때 두개가 동기화되지만 다른 하나는
동기화가 되지 않는다..직접 해보시고 개체의 성질을
잘 파악하시기 바라고..
행머리를 더블 크릭하면 행이 삭제가 되면서 어는 것을 연결하던
동시에 같이 삭제 된다..
***[LOG-IN]***