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

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

댓글 없음:

댓글 쓰기

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

5월 14일 새벽에 chatGPT 4o가 발표되었습니다. 옵티마이즈, 옴니라는 의미인데 실시간 통역, 다자간 회의, 멀티모달 기능의 강화등이 보이네요.

  초격차로 OpenAI진영이 다시 앞서가는 모양을 보여주고 있습니다. 저도 새벽에 일어나자 마자 올라온 영상들과 글을 정리하고 있습니다. ㅎㅎ 영화 HER의 사진이 새벽에 많이 올라왔었는데 저도 안본 영화입니다. 주말에 한번 봐야 할 것 같습니다....