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

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

댓글 없음:

댓글 쓰기

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

Xcode 26의 새로운 기능들

 애플의 AI준비에 대한 골든타임이 지나가고 있다는 말이 많이 들립니다. ㅎㅎ  애플의 그동안의 패쇄적인 환경을 생각하면 온디바이스AI나 LLM환경에서 다소 아쉬운 부분이 많이 있습니다. 다른 빅테크들과 전혀 다른 방향의 목소리를 내고 있어서 좀 우려...