IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Comment cocher par code des checkbox dans un datagridview


Sujet :

VB.NET

  1. #1
    Membre confirmé Avatar de Mike550
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2008
    Messages : 75
    Par défaut Comment cocher par code des checkbox dans un datagridview
    Bonjour je suis passé récemment de Access à VB.net et SQL server
    Dans mon formulaire, j'ai une ListeBox nommée LstDefaut qui contient une liste de défaut liée à la TB_DEFAUT. À coté j'ai une datagridview DgElemn qui n'est pas reliée directement è la base de donnée, cette liste comporte une colonne checkbox nommée chk. le remplissage de ces contrôles ne pose pas de problème sauf pour la case a cochér.
    Le rôle de cette case est d'indiquer si le défaut sélectionné dans la LstDefaut peut être associé à l'élément. Par exemple un boulon manquant ne peut pas être associé à la fondation ou au remblai donc la case n'est pas cochée.
    Quand on coche un élément, un enregistrement est inscrit dans la table TB_DEFAUT_CLASS_ELEMN qui comprend 2 champs NO_DEFAUT et IDE_CLASS_ELEMN

    Mon problème survient quand je veux que les cases soient mises à jour au changement de sélection du défaut et au chargement du formulaire. La seule case qui est cochée est celle au dernier passage de la boucle.
    Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     Sub CocherElemn()        'Coche les éléments visés par le défaut sélectionné
            sSql = "Select NO_DEFAUT, IDE_CLASS_ELEMN" _
                & " From TB_DEFAUT_CLASS_ELEMN" _
                & " Where NO_DEFAUT =" & LstDefaut.SelectedValue & ";"
            Flag = True
            Using connection = New SqlConnection(CONSTR)
                connection.Open()
                Using comm As SqlCommand = New SqlCommand(sSql, connection)
                    Dim rs As SqlDataReader = comm.ExecuteReader
                    ' Décoche toutes les cases avant la mise a jour
                    With DgElemn
                        For i As Integer = 0 To .Rows.Count - 1
                            .Rows(i).Cells(1).Value = False
                            .Rows(i).Cells(1).Style.BackColor = Color.White
                        Next
                        'Vérifie chaque ligne de la table TB_DEFAUT_CLASS_ELEMN 
                        While rs.Read()
                            For i As Integer = 0 To .Rows.Count - 1
                                'Passe chaque élément de DgElemn
                                .Rows(i).Cells(1).Selected = True
                                If .Rows(i).Cells(0).Value = rs(1) Then
                                    'Coche si LstDefaut.IDE_CLASS_ELEMN= DgElemn.IDE_CLASS_ELEMN
                                    .Rows(i).Cells(1).Value = True
                                    Debug.Print(.Rows(i).Cells(2).Value)
                                Else
                                    .Rows(i).Cells(1).Value = False
                                End If
                            Next
                        End While
                        .ClearSelection()
                    End With
                End Using
            End Using
            Flag = False
        End Sub
     
        Sub AjouterLien(cl As Integer)
            sSql = "INSERT INTO [dbo].[TB_DEFAUT_CLASS_ELEMN]" _
                & " ([NO_DEFAUT] ,[IDE_CLASS_ELEMN])" _
                & " VALUES (" & LstDefaut.SelectedValue & ", " & cl & ");"
            Using connection = New SqlConnection(CONSTR)
                connection.Open()
                Using comm As SqlCommand = New SqlCommand(sSql, connection)
                    comm.ExecuteNonQuery()
                End Using
            End Using
        End Sub
     
        Sub RetirerLien(cl As Integer)
            sSql = "DELETE FROM [dbo].[TB_DEFAUT_CLASS_ELEMN]" _
                 & " WHERE NO_DEFAUT=" & LstDefaut.SelectedValue & "[IDE_CLASS_ELEMN] =" & cl & ";"
            Using connection = New SqlConnection(CONSTR)
                connection.Open()
                Using comm As SqlCommand = New SqlCommand(sSql, connection)
                    comm.ExecuteNonQuery()
                End Using
            End Using
        End Sub
    Merci pour votre support.

  2. #2
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonsoir,

    Le code suivant devrait t'aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            ' vérifier si cellule CheckBox cochée ou non dans une colonne, la Checked si elle ne l'est pas
            Dim C As Integer = IndexDeLAColonne
            For R As Integer = 0 To DataGridView1.Rows.Count - 1
                If DataGridView1.Item(C, R).Value Then      ' si elle est Checked, elle vaut TRUE
                    MessageBox.Show("Ligne " & R & " est Checked")
                Else
                    MessageBox.Show("Ligne " & R & " va être Checked")
                    DataGridView1.Item(C, R).Value = True    ' TRUE pour la Checked et FALSE pour la déChecked
                    MessageBox.Show("Maintenant, elle l'est ...  ")
                End If
            Next
    ...

  3. #3
    Membre confirmé Avatar de Mike550
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2008
    Messages : 75
    Par défaut Ca marche pas tout a fait
    Merci pour ce bout de code, ta procédure fonctionne bien telle quelle toutes les cases se cochent. je travaille a l'intégrer dans mon projet mais ca ne va pas comme sur des roulettes . Je n'ai pas compris la différence entre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DG.rows(i).cells(1).value versus DG.item(i,1).value
    je vous reviens avec la suite.

  4. #4
    Membre confirmé Avatar de Mike550
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2008
    Messages : 75
    Par défaut Euréka!
    J'avais inversé colonne et rangée dans item.
    C'est nickel!
    Merci beaucoup

  5. #5
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Je n'ai pas compris la différence entre DG.rows(i).cells(1).value versus DG.item(i,1).value
    A mon avis, y pas de différence. Je trouve Item(C, R) plus simple, c'est plus proche des tableaux à 2 dimensions, ce qui me convient bien ...

    Mais attention, dans ton exemple repris ci-dessus, tu inverses lignes et colonnes : l'équivalent de DG.rows(i).cells(1).value est DG.item(1, i).value.

    Bonne journée et bonne année chez toi ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/04/2018, 00h54
  2. Comment modifier l'ordre des articles dans la vue "articles par catégorie" ?
    Par jmbinformatique dans le forum Odoo (ex-OpenERP)
    Réponses: 4
    Dernier message: 08/11/2013, 09h17
  3. Cocher des checkbox dans un webbrowser
    Par chefinf dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 04/07/2011, 11h40
  4. Réponses: 7
    Dernier message: 09/01/2008, 10h20
  5. Réponses: 4
    Dernier message: 23/11/2005, 11h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo