begin process at 2012 02 16 06:16:22
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Control

 > DATAGRID + CHECKBOX

DATAGRID + CHECKBOX


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Control Classé sous :datagrid, checkbox, ado, zen69, dg cb Niveau :Initié Date de création :01/04/2008 Date de mise à jour :04/04/2008 15:15:24 Vu / téléchargé :10 950 / 1 458

Auteur : zen69

Ecrire un message privé
Site perso
Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Voici la source du tutoriel :
http://www.vbfrance.com/tutoriaux/DATAGRID-AVEC- CHECKBOX_834.aspx

Comme il m'a été demandé à plusieurs reprise voici donc la source fonctionnel.

Source

  • 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
  • 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
  • Loop
  • 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
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
                
            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
  Loop
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

 Conclusion

En espérant que cette source puisse vous aidez.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • db.mdbTélécharger ce fichier [Réservé aux membres club]155 648 octets
  • Form1.frmTélécharger ce fichier [Réservé aux membres club]Voir ce fichier8 432 octets
  • Form1.frxTélécharger ce fichier [Réservé aux membres club]306 octets
  • MSADODC.OCXTélécharger ce fichier [Réservé aux membres club]131 856 octets
  • MSDATGRD.OCXTélécharger ce fichier [Réservé aux membres club]275 216 octets
  • Project1.vbpTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 093 octets
  • Project1.vbwTélécharger ce fichier [Réservé aux membres club]Voir ce fichier50 octets

Télécharger le zip


 Historique

04 avril 2008 15:15:24 :
Il manquait un loop

 Sources de la même categorie

Source avec Zip COMMUNICATION MODBUS MASTER par sergelapointe
Source avec Zip Source avec une capture DÉPLACEMENT AVEC FLÈCHES DANS UN PAVÉ DE TEXTBOX 9X9 DYNAMIQ... par EhJoe
Source avec Zip Source avec une capture Source .NET (Dotnet) CONTROLSTARS EN RÉPONSE À JAKNIGHT007 par bigboss9
Source avec Zip Source avec une capture Source .NET (Dotnet) CALENDRIER ANNUEL NORME ISO par Prog1001
Source avec Zip Source avec une capture Source .NET (Dotnet) CONTROLE STARS par jaknight007

 Sources en rapport avec celle ci

Source avec Zip TRAVAILLER AVEC MYSQL par grandzebu
Source avec Zip PARAMETRES SETTINGS VBA par Le Pivert
Source avec Zip Source avec une capture Source .NET (Dotnet) LECTEUR DE NEWS RSS COMPLET par Bilou47190
Source avec Zip Source avec une capture ADO ET DATAGRID par MrContent
Source avec Zip Source avec une capture COMPARAISON ENTRE UNE LISTE D'ÉLÉMENTS D'UN FICHIER .CSV ET ... par pluplu

Commentaires et avis

Commentaire de zen69 le 01/04/2008 16:12:14

Si votre grille de données ne se remplie pas, veuillez modifié le path de la db access dans le adoTemp.

J'attends vos commentaires.

Commentaire de LIBRE_MAX le 01/04/2008 23:23:02

Bonsoir,
Apparament ça fonctionne.
Il fallait juste ajouter un Loop dans
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
  
     lOOP '>>ICI

End Function

Ensuite , je ne sais pas à quoi sert
  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
    '???  
  Next

'Sûrement un oubli.Mais un oubli de quoi ?

Ensuite , le RowHeight n' est pas pris en compte.
J' ai redimentionné la hauteur des lignes, le CheckBox reste suspendu en haut.

Mais dans l' ensemble, c' est bien.
Je ne met pas de note pour l' instant.

A+



Commentaire de LIBRE_MAX le 01/04/2008 23:28:26

Ah ! une dernière chose.
Si je change la propriété Apparence du CheckBox en Flat,
celui-ci n' apparait pas dans toutes les lignes.A la place j' ai soit 0 soit -1 selon la valeur du champ.

Commentaire de zen69 le 03/04/2008 20:09:11

pour le loop ... c'est mon erreur désolé... pour ce qui est du flat je ne te suis pas mais bon j'apporterai au moins la correction du loop manquant...

Commentaire de zen69 le 03/04/2008 20:13:34

Ensuite , je ne sais pas à quoi sert
  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
    '???  
  Next

Ce bout de code sert à capter la premiere ligne visible en haut de datagrid dans le cas ou le curseur du scroll n'est pas a la premiere... si tu enleve ce code tu risque de mettre a jour la mauvaise ligne en cochant/décochant le checkbox, cepandant en effet j'avais commencer un bout de code que je n'ai pas terminé. Je l'enleverai quand je vais apporté la correction de mon dernier commentaire.

Commentaire de zen69 le 04/04/2008 15:18:02

Pour ce qui est de ton apparance flat... chez moi ca marche #1 ... je comprends pas...

Commentaire de LIBRE_MAX le 04/04/2008 16:30:32

Bonjour,
Pour l' apparence Flat, effectivement ça marche mais j' ai du rééxécuter le programme pour que le changement prend effet.
A la première, ça me donne parfois (et pour quelques uns seulement) -1 ou 0 à la place du CheckBox.

Pour le bout de code en plus, je l' ai supprimé.
'x For i = .VisibleRows To ChkboxArray.UBound
'x   '???  
'x Next

Quand est-il alors du centrage du CheckBox quand la hauteur de la ligne est redimentionnée ?

A+

Commentaire de Chrysostome le 13/04/2008 12:44:38

Salut!
Juste une question:
Ça sert à quoi, si on n'arrive pas à mettre à jour la base?

Commentaire de LIBRE_MAX le 14/04/2008 01:13:17

Salut Chrysostome,
Si si, la table est mise à jour grace à :
Private Sub cbTest_Click(index As Integer)
    Dim fr As Long
    On Error Resume Next
    fr = dgTest.FirstRow
    With adoTemp.Recordset      
        .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

@Zen69
Pour le centrage j' ai réactivé le reste de la ligne que tu as mis en commentaire(je ne sais pas pourquoi , dailleur)
OffsetY = OffsetY + (.RowHeight - ChkboxArray(0).Height) / 2

et ça marche !

Commentaire de zen69 le 17/04/2008 15:37:20

j'avais mis cette ligne en commentaire parce que je ne modifie pas la hauteur de mes lignes donc mes trucs etaient deja centrer...

Commentaire de Solomein le 24/02/2010 12:39:44 10/10

Merci beaucoup pour ce code!!! Je voulais savoir au passage si il était possible d'afficher le texte correspondant aux cases cochées (dans le datagrid) à l'intérieur de plusieurs textbox qui apparaitraient dans un autre form?

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

VBA: utilisation de MSFlexGrid ou Datagrid avec checkbox [ par -=[ArsoN]=- ] Je travaille présentement à un système de paye en vba et je voudrais savoir quelle type de grille est le plus facile à utiliserÉgalement, je cherche c datagrid ADO..aidez moi!!! [ par neuil ] salut a tous,j'ai un souci...je n'arrive pas à afficher le resultat d'une requete SQL dans ma datagrid sans passer par la pose d'un controle ADO!!il m pbs de saisie avec datagrid liee a un controle ado [ par med ] Bonjour,J'essaye de saisir des donnees sur un grille qui represente le detail d'une forme maitre/detail,le maitre et le detail sont relies a un meme c Case à cocher dans un DataGrid ADO [ par inertia ] Bonjour à tous,J'utilise un contrôle datagrid (ADO) lié à un contrôle Data (ADO) pour visualiser les données d'une base de données ORACLE.Certains cha checkbox dans datagrid [ par yomm ] j'ai un variable boolean et je cherche comment afficher un checkbox dans un datagrid afin de respecter la formatage de Access checkbox et datagrid [ par jeanyves ] A partir d'une base access qui contient un champ "case à cocher" je voudrais obtenir le même résultat lorsque je consulte cette base en vb et dans un CheckBox + datagrid avec Sql Server [ par zenori ] Bonjour,J'alimente un datagrid avec un adodc via une procédure stockée sous SQL Server.J'ai une colonne que je voudrais afficher avec une check box, e requete Ado et Datagrid [ par eldjoule ] El djouleBonjour, Voilà, je fais une requete sur un combo, et des que je selectionne un critère, je veux le résultat dans un datagrid !voici la requet ado sans control et datagrid [ par besy ] voila je suis debutant;)je voudrais afficher ds une datagrid le resultat d'une requete sql sur une base access mais sans controleur ado.donc voila la Mettre des checkbox ou des combobox dans une datagrid [ par S16 ] Bonjour,Comment fait-on pour afficher des checkbox ou des combobox dans une datagrid ?Pour l'instant, j'ai "0" ou "-1" à la place des checkbox.Merci d


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 6,380 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales