메뉴 건너뛰기

app

[evb] 그리드 제어에 대해...

박영식2006.09.03 10:41조회 수 1719댓글 0

    • 글자 크기
아래는 RefreshGrid 함수이다.

무지 어렵다. 여기서 내부 함수로서 꽤나 중요해 보이는 Ubound!
배열을 차원과 함께 넣어주면, 배열의 크기를 리턴하는 함수이다.
예를들어 (a, b) 배열이면, 2차원이고, 여기에 (0, 0), (0, 1) ... (4, 4)까지 들어가 있으면, 4가 리턴된다.

참 유용한 함수라고 할 수 있다. 배열에 들어가는 자료의 크기에 따라 자료를 출력해 줘야할 때, 일일이 반복문에 써주지 않아도 되기 때문이다.

아무튼 많이 헤맸다. 그리드 제어에서 배워야 할 것들이 많다. Col 과 Row에 관련된 내부함수들과 오퍼레이터 등이 있는 것 같은데, 전혀 몰라서, 현재 가로형으로 되어있는 레코드 출력을 세로형으로 바꾸려다가 시간을 꽤나 보냈다.(결국은 포기하고, 리스팅 구현을 하면서, DB구조를 연구하고 있다.)

DB에 왜 테이블을 4개나 만들어서 사용하는지를 좀더 고민해 봐야 겠다.



Function RefreshCDGrid() As Boolean
    
    Dim strSortField As String
    Dim i As Long
    Dim strSQL As String
    
    On Error Resume Next
    
    RefreshCDGrid = False
    
    ' cd 레코드셋이 오픈되어 있다면 닫음
    If gobjCD.State = adStateOpen Then
        gobjCD.Close
    End If
    
    ' SQL 문 작성
    strSQL = "SELECT "
    
    ' columns 추가
    For i = 0 To UBound(gstrCDCols, 2)
        strSQL = strSQL & gstrCDCols(0, i) & ","
    Next
    
    ' RowData를 위한 id 추가
    strSQL = strSQL & "CDId"
    Label1.Caption = strSQL
    ' 데이터 선택
    ' 현재 정렬 방법으로 정렬
    strSQL = strSQL & " FROM cd INNER JOIN " _
        & " Genre ON cd.GenreId = genre.GenreID "
    
    ' 현재 Project에 대한 데이터 필터
    strSQL = strSQL & "WHERE ProjectId = " & CStr(glngProjectId)
        
    ' 현재 정렬 방법대로 데이터 정렬
    strSQL = strSQL & " ORDER BY " & gstrCDCols(0, glngCDSortCol)
    
    ' 레코드셋 오픈
    gobjCD.Open strSQL, gobjConnection, adOpenForwardOnly, adLockReadOnly
    
    ' grid clear
    grdCD.Clear
    
    ' row 설정
    grdCD.Rows = 1
    
    ' count 만큼 col count 설정
    grdCD.Cols = gobjCD.Fields.Count - 1
    
    ' header row 설정
    grdCD.Row = 0
    For i = 0 To UBound(gstrCDCols, 2)
        'grid에 label 추가
        grdCD.TextMatrix(0, i) = gstrCDCols(1, i)
        ' labels을 볼드체로
        grdCD.Col = i
        grdCD.CellFontBold = True
    Next
    
    grdCD.Col = 0
    
    ' 레코드 추가
    Do While Not gobjCD.EOF
        ' cd 이름과 row 추가
        grdCD.AddItem gobjCD.Fields("CDName").Value
        
        ' 각각의 columns 값 설정
        For i = 0 To UBound(gstrCDCols, 2)
            grdCD.TextMatrix(grdCD.Rows - 1, i) = _
                gobjCD.Fields(gstrCDCols(0, i)).Value
        Next
        
        ' Primary Key에 rowdata 설정
        grdCD.RowData(grdCD.Rows - 1) = gobjCD.Fields("CDId").Value
        
        ' 다음 레코드로 이동
        gobjCD.MoveNext
    Loop

    ' 에러 체크
    If Err.Number = 0 Then
        RefreshCDGrid = True
    End If
End Function
박영식 (비회원)
    • 글자 크기
[evb] 쿼리 INNER JOIN 구문 (by 박영식) [evb] CD관리 프로그램에 버그 찾기 (by 박영식)

댓글 달기

이전 1 ... 5 6 7 8 9 10 11 12 13 14다음
첨부 (0)
위로