Datagrid aanmaken in VB 6.0

Status
Niet open voor verdere reacties.

Ghost99

Nieuwe gebruiker
Lid geworden
19 jan 2008
Berichten
4
Hallo Iedereen,

ik ben dus volledig nieuw hier op dit forum, maar zit toch met een prangende
vraag, ik zou graag in mijn applicatie (Visual Basic 6.0) een datagrid invoegen
deze datagrid zou 3 kolommen hebben en het aantal rijen zou opgevuld worden
met data uit de database. Nu komt mijn probleem zowat het enige wat ik gerealiseerd
krijg is de datagrid op het formulier zetten, dan staan er standaard 2 kolommen op
en dan is de kous af. Ik krijg geen kolommen bijgevoegd en ik weet helemaal niet
hoe ik de connectie naar mijn acces database moet regelen (ik werk standaar met
een gewone ADODB connectie) is er hier iemand die mij hier mee kan helpen ? of
die me misschien een voorbeeld kan geven zodat ik het van dat kan leren ?

Alvast Bedankt,

Groeten,

Ghost
 
Hoi Ghost,

Ik gebruikte zelf meestal een unbound grid, omdat bij mij de cellen toch meestal aparte waardes nodig hadden. Ik laat je even een voorbeeldje zien:

Allereerst roep ik een sub aan om de layout van de Grid te bepalen, ik gebruik een split functie, zodat ik achteraf makkelijk de kolom breedte en titel kan aanpassen, en eventueel de kolombreedtes kan opslaan.

Code:
Private Sub SetupEmployeeFG()
 'set up the layout for the flexgrid
 Dim strColWidths As String     'string with FlexGrid widths
 Dim strColTitles As String     'string with FlexGrid Titles
 Dim xColHelper() As String     'helper for split function
 Dim xColHelper1() As String    'helper for split function
 Dim i As Integer               'GP counter
 Dim j As Integer               'GP counter
 
    strColTitles = "Upd|Code|Pwd|Code|Name|Password|PM?|Inact"
    strColWidths = "0|0|0|700|2000|1000|600|600"
    xColHelper = Split(strColTitles, "|")
    xColHelper1 = Split(strColWidths, "|")
   
    With Me.FGEmployees
       .Cols = UBound(xColHelper) + 1
       .Row = 0: j = 0
        For i = LBound(xColHelper) To UBound(xColHelper)
            .Col = j
            .CellFontBold = True
            .Text = xColHelper(j)
            .ColWidth(j) = xColHelper1(i)
            j = j + 1
        Next
    End With
End Sub

Vervolgens een UpdateFunctie om de waarden vanuit de database (hier een dao connectie, waarbij de link naar de database in modMain staat, maar da's natuurlijk niet belangrijk)

Code:
Private Sub UpdateEmployeeFG()
  'fills the flexgrid
  Dim rst As DAO.Recordset          'the recordset to retrieve hours/hwsw
  Dim strSQL As String              'the SQL code
  Dim i As Integer                  'GP Counter
  Dim j As Integer                  'GP Counter
  Dim lRecCount As Long             'the # of records in the table
  Dim strTemp As String             'so we can format date/times
  Dim bIsHEmpty As Boolean          'to indicate an empty flexgid
  
    strSQL = "SELECT ""0"", EmployCode, Password, " & _
                "EmployCode, EmployName, ""****"", IsPM, NonActive " & _
                "FROM TBL_Employees ORDER BY EmployCode"

    Set rst = modMain.gDB.OpenRecordset(strSQL)
    
    With Me.FGEmployees
        'the # of records is the # of rows in the FG
        rst.MoveLast: rst.MoveFirst
        lRecCount = rst.RecordCount
        bIsHEmpty = (lRecCount = 0)
        If bIsHEmpty Then
            .Rows = 2
            For i = 0 To .Cols - 1
                .TextMatrix(1, i) = ""
            Next
        Else
            .Rows = rst.RecordCount + 1
            j = 1
            rst.MoveFirst
            While Not rst.EOF
                For i = 0 To rst.Fields.Count - 1
                    If i >= 6 Then
                        If rst(i) = True Then strTemp = "Y" Else strTemp = "N"
                    Else
                        strTemp = IIf(IsNull(rst(i)), "", rst(i))
                    End If
                    .TextMatrix(j, i) = strTemp
                Next
                rst.MoveNext
                j = j + 1
            Wend
    
        End If
    End With
  rst.Close
  Set rst = Nothing
End Sub

Een dan nog SaveData om de boel weer in de tabellen te krijgen
Code:
Private Sub SaveData()
 Dim i As Integer
 Dim j As Integer
 Dim strSQL As String
 Dim rst As DAO.Recordset
 Dim strKey As String
 
    With Me.FGEmployees
        For i = 1 To .Rows - 1
            If .TextMatrix(i, 0) <> "0" Then
                strKey = .TextMatrix(i, 1)
                strSQL = "SELECT EmployCode, EmployName, Password, IsPM, NonActive " & _
                            "FROM TBL_Employees WHERE EmployCode='" & strKey & "'"
                Set rst = modMain.gDB.OpenRecordset(strSQL)
                If rst.RecordCount = 0 Then
                    If .TextMatrix(i, 0) = "1" Then
                        MsgBox "Error: record " & strKey & " Not found!", vbCritical
                        Exit Sub
                    Else
                        rst.AddNew
                    End If
                Else
                    rst.Edit
                End If
                For j = 3 To .Cols - 1
                    If j >= 6 Then      'Y/N fields
                        rst(j - 3) = (.TextMatrix(i, j) = "Y")
                    ElseIf j = 5 Then   'password
                        rst(j - 3) = IIf(.TextMatrix(i, 2) = "", Null, .TextMatrix(i, 2))
                    Else
                        rst(j - 3) = .TextMatrix(i, j)
                    End If
                Next
                rst.Update
            End If
        Next
    End With
End Sub
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan