Bon voila suivez les étapes et vous devirez obtenir les résultats escompté.
- Ouvrez un nouveau projet standard.
- Ajouter le composant Microsoft DataGrid Control 6.0
- Sur une form vide ajouté le datagrid et nommé le dgTest.
- Sur cette meme form ajouté un checkbox et nommé le cbTest.
Ceci étant fait nous allon configuré 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 passé au code.
NB : Dans cet example 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 utilize 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 etre de type boolean donc si vous utilisé SQL SERVER vous devez utilisé un 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 ajouté cette ligne de code à la toute fin de la commande qui remplie 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
www.lesouterrain.com