계층적인 형태의 DataSet을 GridView에 출력하는 경우 | |
나의 폴더 > VB.NET | 2009-03-26 (Thu) 18:55 | http://blog.dreamwiz.com/papasmf1/9851905 |
오늘 수업시간에 나온 질문중에 하나인데 아래와 같이 작성해 보았습니다.
몇개의 테이블을 가져와서 마스터-디테일 형태로 루프를 돌린다면 아래와 같이 코딩할 수 있습니다. 물론 자동 바인딩이 있지만 복잡한 모양인 경우는 사실 코딩해야 합니다. 분류명 제품 목록을 출력하고 각 제품의 가격의 합계도 출력해야 한다면 SQL에서는 Group by이지만 집계와 상세 데이터를 같이 출력한다면 아래와 같이 작성합니다. 'DataSet(비연결) Dim cmdCate As New SqlCommand() cmdCate.CommandText = "Select * From categories" cmdCate.Connection = conn Dim cmdProd As New SqlCommand() cmdProd.CommandText = "Select * From Products" cmdProd.Connection = conn Dim adCate As New SqlDataAdapter(cmdCate) Dim adProd As New SqlDataAdapter(cmdProd) Dim ds As New DataSet adCate.Fill(ds, "Category") adProd.Fill(ds, "Product") '릴레이션 객체를 새로 생성 Dim rel As New DataRelation("CateProd", _ ds.Tables("category").Columns("categoryID"), _ ds.Tables("Product").Columns("categoryID"), True) 'Relation객체 추가 ds.Relations.Add(rel) Dim cateRow As DataRow Dim i As Integer '컬럼의 갯수를 지정 DataGridView1.ColumnCount = 5 For Each cateRow In ds.Tables("category").Rows Dim strCate() As String = {"분류명:", cateRow("categoryName").ToString()} DataGridView1.Rows.Add(strCate) Dim prodRow As DataRow Dim sumPrice As Decimal = 0.0 For Each prodRow In cateRow.GetChildRows("CateProd") i = i + 1 Dim strData() As String = _ {"제품:", prodRow("productID").ToString(), prodRow("productName").ToString(), _ prodRow("categoryID").ToString(), prodRow("unitPrice").ToString()} sumPrice += CType(prodRow("unitPrice"), Decimal) DataGridView1.Rows.Add(strData) Next '각 카테고리별 집계된 금액을 라인으로 추가 Dim strPrice() As String = _ {"", "", "", "총액", sumPrice} DataGridView1.Rows.Add(strPrice) Next 실행하면 다음과 같이 실행됩니다. 수업중에 작성한 예제여서 다른 코드들도 있습니다. ^^ |
댓글 없음:
댓글 쓰기
참고: 블로그의 회원만 댓글을 작성할 수 있습니다.