none
Réagir sur le coche ou le décoche dans une DataGridView (Résolu) RRS feed

  • Question

  • Bonjour,
    Dans une DataGridView j'affiche des lignes avec en début de ligne une case a cocher, mise à False à l'affichage
    Je voudrais pouvoir régir dés que l'utilisateur clique dessus, et AVANT qu'il sorte de la coche
    En tenant compte de la modification bien sure
    Je ne peux utiliser le simple clique car j'utilise le double clique
    Comment faire ?
    Merci
    Cordialement
    SC

    Cordialement SC


    • Modifié AOC_SCN jeudi 22 août 2019 04:25 Résolu
    mercredi 21 août 2019 06:31

Réponses

  • Bonjour SC,

    Dans ce but, l’événement CellContentClick, et la propriété EditedFormattedValue vous seront utiles. Je vous invite à tester le code suivant:

        Private Sub DataGridView1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
            Dim casesacocher = TryCast(DataGridView1.CurrentCell.OwningColumn, DataGridViewCheckBoxColumn)
            If casesacocher IsNot Nothing Then                   'si la colonne où le clique est effectué est du type DataGridViewCheckBoxColumn
                Dim statut As Boolean = Convert.ToBoolean(DataGridView1.CurrentCell.EditedFormattedValue)     'la valeur de la case à cocher
                If statut = False Then
                    MessageBox.Show("Décoché")
                Else
                    MessageBox.Show("Coché")
                End If
            End If
        End Sub

    Cordialement,
    Dimitar

    mercredi 21 août 2019 13:36
  • Bonjour,

    Merci beaucoup pour ce code

    Malheureusement cela ne fonctionne pas parfaitement

    Je m'explique :

    Quand le laisse le code tel quel, avec le message disant si la case est cochée ou non, c'est parfait

    Mais si je remplace le message par un CALL à mon traitement qui balaie la DataGridView, il ne trouve pas de case coché

    J'ai pensé alors a forcer la valeur, qui sinon ne serai prise en compte que si l'on sort de la cellule

    Je pense que c'est la solution, car alors mon traitement qui balaie la DataGridView trouve bien les cases cochées ou décochée

    Voici le code "corrigé", si cela peu aider une autre personne

     Private Sub dgvFiche_CellContentClick(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles dgvFiche.CellContentClick
            Dim casesacocher = TryCast(dgvFiche.CurrentCell.OwningColumn, DataGridViewCheckBoxColumn)
            If wFlagLoad = True Then Exit Sub
            If casesacocher IsNot Nothing Then                   'si la colonne où le clique est effectué est du type DataGridViewCheckBoxColumn
                Dim statut As Boolean = Convert.ToBoolean(dgvFiche.CurrentCell.EditedFormattedValue)     'la valeur de la case à cocher
                If statut = False Then
                    '''MessageBox.Show("Décoché " & e.RowIndex)
                    Me.dgvFiche.Item(e.ColumnIndex, e.RowIndex).Value = False
                Else
                    '''MessageBox.Show("Coché " & e.RowIndex)
                    Me.dgvFiche.Item(e.ColumnIndex, e.RowIndex).Value = True
                End If
                Call AfficheRecap()
            End If
        End Sub
    Encore merci

    Cordialement

    SC


    Cordialement SC

    jeudi 22 août 2019 04:24

Toutes les réponses

  • Bonjour SC,

    Dans ce but, l’événement CellContentClick, et la propriété EditedFormattedValue vous seront utiles. Je vous invite à tester le code suivant:

        Private Sub DataGridView1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
            Dim casesacocher = TryCast(DataGridView1.CurrentCell.OwningColumn, DataGridViewCheckBoxColumn)
            If casesacocher IsNot Nothing Then                   'si la colonne où le clique est effectué est du type DataGridViewCheckBoxColumn
                Dim statut As Boolean = Convert.ToBoolean(DataGridView1.CurrentCell.EditedFormattedValue)     'la valeur de la case à cocher
                If statut = False Then
                    MessageBox.Show("Décoché")
                Else
                    MessageBox.Show("Coché")
                End If
            End If
        End Sub

    Cordialement,
    Dimitar

    mercredi 21 août 2019 13:36
  • Bonjour,

    Merci beaucoup pour ce code

    Malheureusement cela ne fonctionne pas parfaitement

    Je m'explique :

    Quand le laisse le code tel quel, avec le message disant si la case est cochée ou non, c'est parfait

    Mais si je remplace le message par un CALL à mon traitement qui balaie la DataGridView, il ne trouve pas de case coché

    J'ai pensé alors a forcer la valeur, qui sinon ne serai prise en compte que si l'on sort de la cellule

    Je pense que c'est la solution, car alors mon traitement qui balaie la DataGridView trouve bien les cases cochées ou décochée

    Voici le code "corrigé", si cela peu aider une autre personne

     Private Sub dgvFiche_CellContentClick(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles dgvFiche.CellContentClick
            Dim casesacocher = TryCast(dgvFiche.CurrentCell.OwningColumn, DataGridViewCheckBoxColumn)
            If wFlagLoad = True Then Exit Sub
            If casesacocher IsNot Nothing Then                   'si la colonne où le clique est effectué est du type DataGridViewCheckBoxColumn
                Dim statut As Boolean = Convert.ToBoolean(dgvFiche.CurrentCell.EditedFormattedValue)     'la valeur de la case à cocher
                If statut = False Then
                    '''MessageBox.Show("Décoché " & e.RowIndex)
                    Me.dgvFiche.Item(e.ColumnIndex, e.RowIndex).Value = False
                Else
                    '''MessageBox.Show("Coché " & e.RowIndex)
                    Me.dgvFiche.Item(e.ColumnIndex, e.RowIndex).Value = True
                End If
                Call AfficheRecap()
            End If
        End Sub
    Encore merci

    Cordialement

    SC


    Cordialement SC

    jeudi 22 août 2019 04:24