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

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

댓글 없음:

댓글 쓰기

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

요즘 새로운 과정을 기획하면서 react.js + next.js를 OpenAI API와 같이 사용하는 과정을 만들고 있습니다. ㅎㅎ

 오랜만에 웹 기술들을 공부하니 재미있네요. ㅎㅎ  쭉 파이썬 과정들을 운영하고 있었는데 좀 더 범위를 넓혀서 아이폰 앱 개발과정 with ChatGPT,  웹 프로그래밍 with ChatGPT, AI시대의 AI어시스턴트 활용하기와 같은 글을 쓰고, ...