2014년 11월 9일 일요일

계층적인 형태의 DataSet을 GridView에 출력하는 경우(VB.NET)

계층적인 형태의 DataSet을 GridView에 출력하는 경우
 조회 : 737
나의 폴더 > VB.NET | 2009-03-26 (Thu) 18:55http://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

실행하면 다음과 같이 실행됩니다. 수업중에 작성한 예제여서 다른 코드들도 있습니다. ^^ 

댓글 없음:

댓글 쓰기

참고: 블로그의 회원만 댓글을 작성할 수 있습니다.

'일론 머스크' '젠슨 황' AI 리더들, 그들의 성공 비결은 바로 이것 - 누가 부자가 되는가 영상입니다. ㅎㅎ

  책을 통해서만 접했던 내용들을 영상으로 보니 더 실감이 납니다. KBS에서 방송된 내용인데 주말에 보시면 좋은 영상입니다. 엔비디아의 주가가 이해가 됩니다. ㅋㅋ 생각보다 미국시장이 강한 것이 AI는 거의 미국과 중국이 주도하는 시장이 되고 있습...