Datagrid avec checkbox

Datagrid avec checkbox

L'INTERFACE

Bon voila suivez les étapes et vous devriez obtenir les résultats escomptés.

  • Ouvrez un nouveau projet standard.
  • Ajouter le composant Microsoft DataGrid Control 6.0
  • Sur une form vide ajoutez le datagrid et nommez le dgTest.
  • Sur cette même form ajoutez un checkbox et nommez le cbTest.

Ceci étant fait nous allons configurer le checkbox.

  • Videz la valeur de la propriété caption
  • Mettez les propriétés Width et Height à 190.
  • Mettez la propriété index à 0

Nous allons maintenant passer au code.

CODE

Note : Dans cet exemple le checkbox sera ajouté à la 2e colonne soit, dgTest.columns(1)

Option Explicit

Private bInSetCheckboxes As Boolean

Private Sub Form_Activate()
    SetCheckboxes 1, cbTest        'Ici 1 représente la 2e colonne du DataGrid
End Sub

Private Sub SetCheckboxes(ColNdx As Long, ByRef ChkboxArray As Object)
    bInSetCheckboxes = True

    On Error GoTo ErrorExit
    Dim i
    Dim obj As Object

    Set obj = dgTest

    Dim OffsetX As Long, OffsetY As Long

    If Not ChkboxArray(0).Container Is dgTest.Container Then
        CalcContainerOffset obj, OffsetX, OffsetY
    End If

    On Error Resume Next

    With dgTest
        If (ChkboxArray.UBound  .VisibleRows) Then
            For i = ChkboxArray.UBound + 1 To .VisibleRows - 1
                Load ChkboxArray(i)
                ChkboxArray(i).Width = 190
                ChkboxArray(i).Height = 190
            Next
            For i = .VisibleRows To ChkboxArray.UBound
                Unload ChkboxArray(i)
            Next
        End If

        OffsetX = OffsetX + (.Columns(ColNdx).Width - ChkboxArray(0).Width) / 2
        OffsetY = OffsetY + 10 ''(.RowHeight - ChkboxArray(0).Height) / 2
        .Columns(ColNdx).Alignment = dbgCenter
        .Columns(ColNdx).Locked = True
         '
        If .LeftCol <= ColNdx Then
            For i = 0 To .VisibleRows - 1
                ChkboxArray(i).value = Abs(.Columns(ColNdx).CellValue(.RowBookmark(i)))
                ChkboxArray(i).Top = .Top + .RowTop(i) + OffsetY
                ChkboxArray(i).Left = .Left + .Columns(ColNdx).Left + OffsetX
                ChkboxArray(i).Visible = True
                ChkboxArray(i).ZOrder
            Next
        Else
            i = 0
        End If
        For i = i To ChkboxArray.UBound
            ChkboxArray(i).Visible = False
        Next
    End With

ExitPoint:
bInSetCheckboxes = False
Exit Sub

ErrorExit:
Resume ExitPoint
End Sub

Private Function CalcContainerOffset(obj As Object, ByRef OffsetX As Long, ByRef OffsetY As Long)

Do While Not (obj.Container Is obj.Parent)
    Set obj = obj.Container
    If Not (obj Is Nothing) Then
        OffsetX = OffsetX + obj.Left
        OffsetY = OffsetY + obj.Top
        If obj.BorderStyle = 1 Then '' fixed single
            If obj.Appearance = 1 Then '' 3d
                OffsetX = OffsetX + 30
                OffsetY = OffsetY + 30
            Else
                OffsetX = OffsetX + 15
                OffsetY = OffsetY + 15
            End If
        End If
    End If
    If (TypeOf obj Is Form) Or (TypeOf obj Is MDIForm) Then Exit Do
End Function

Private Sub dgTest_Scroll(Cancel As Integer)
    SetCheckboxes 1, cbTest        'Ici 1 représente la 2e colonne du DataGrid
End Sub

Private Sub cbTest_Click(index As Integer)
Dim fr As Long

On Error Resume Next
fr = dgTest.FirstRow
With adoTemp.Recordset        'Ici j'utilise un ado mais vous pouvez utilier n'importe quel
' type de recordset ce bout de code ne doit donc pas être recopié tel quel. 
' Ce code met à jour le champs attaché au checkbox avec la bonne valeur, 
' ce champs doit être de type boolean donc si vous utilisez SQL SERVER 
'vous devez utiliser une colonne de type BIT.

    .Filter = "LineID='" & index + fr & "'"

    .fields("Include").value = cbTest(index).value

    .UpdateBatch

    .Filter = "LineID<>''"

    .Resync
End With

dgTest.FirstRow = fr

'Fin du code que vous devez adapter.

End Sub

C'est tout ce qu'il faut.

Vous devez aussi ajouter cette ligne de code à la toute fin de la commande qui rempli votre datagrid si ceci se fait de façon dynamique tel qu'en utilisant un bouton ou autre.

SetCheckboxes 1, cbTest        'Ici 1 représente la 2e colonne du DataGrid

Ainsi si le bouton cmdGo remplie votre datagrid ajouté le code à l'évènement click.

Tel qu'indiqué ici :

Private Sub cmdGo_Click()

    '... votre code ici

SetCheckboxes 1, cbTest        'Ici 1 représente la 2e colonne du DataGrid

End Sub

Zen69 aka Ortho Le Profett

Ce document intitulé « Datagrid avec checkbox » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Rejoignez-nous