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 :

Compter le nombre de CheckedBox activé dans un DataGridView


Sujet :

VB.NET

  1. #1
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut Compter le nombre de CheckedBox activé dans un DataGridView
    Bonjour à tous, je reviens avec une question mais cette fois je n'y arrive vraiment pas :

    Tous d'abord pour présenter un peu le contexte, l'utilisateur à la possibilité d'activer ou désactiver chacune de ces ChekedBox en directement depuis le DataGridView, j'ai aussi une bouton qui sélectionne (active) toutes les CheckedBox et un autre qui désactive.
    Ca ne semble vraiment pas compliqué et pourtant j'ai un mal fou à trouver la solution. en effet lorsque je sélectionne par exemple 2 case à cochées et ensuite je clique sur le bouton pour les désactiver "countSelected" me compte non pas 0 mais 4 CheckedBox activé du fait que je ne récupère pas la bonne valeur du CheckedBox dans l'event CellValueChanged.

    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
     
     Private Sub DataGridView1_CurrentCellDirtyStateChanged(sender As Object, e As EventArgs) Handles DataGridView1.CurrentCellDirtyStateChanged
            If DataGridView1.IsCurrentCellDirty Then
                DataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit)
            End If
        End Sub
     
      Private countSelected As Integer
        Private Sub DataGridView1_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged
            If DataGridView1.Columns(e.ColumnIndex).Name = "MaColonne" And TypeOf (DataGridView1.CurrentCell) Is DataGridViewCheckBoxCell Then
                Dim checkBoxCell As DataGridViewCheckBoxCell = CType(DataGridView1.CurrentCell, DataGridViewCheckBoxCell)
                Dim Selec As Boolean = CBool(checkBoxCell.Value)
                If Selec Then
                    countSelected += 1
                Else
                    countSelected -= 1
                End If
                'MessageBox.Show(CStr(countSelected))
            End If
        End Sub
     
      Private Sub btDeselectAll_Click(sender As Object, e As EventArgs) Handles btDeselectAll.Click
            For Each Row As DataGridViewRow In DataGridView1.Rows
                If Not Row.Cells("MaColonne").ReadOnly = True Then
                    Dim Selec As Boolean = CBool(Row.Cells("MaColonne").Value)
                    If Selec Then
                        Row.Cells("MaColonne").Value = False
                    End If
                End If
            Next
            MessageBox.Show(CStr(countSelected))
        End Sub
    Merci beaucoup pour votre aide.

  2. #2
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    Je remarque des choses vraiment étrange concernant la valeur des checkedBox dans CellValueChanged .
    D'une part dans l’événement CellValueChanged il faut lire la valeur CheckedBox.EditedFormattedValue si on est en CheckedBox.IsInEditMode sinon on prend EditingCellValueChanged
    Et de plus si je clique sur différents CheckedBox puis que je reste sur le dernier CheckedBox sans en sortir, ma procedure liée au bouton DeselectAll fonctionne et déclenche les événements CellValueChanged, en revanche si je sorts du dernier ChekedBox en cliquant sur la cellule d'a coté les événements CellValueChanged ne se déclenche plus .

    EDIT : Ce bout de code me rend fou
    si je passe mon Datagridview en DataGridView1.BeginEdit(False), ça fonctionne encore moins bien.

    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
     Private Sub DataGridView1_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged
            If DataGridView1.Columns(e.ColumnIndex).Name = "Macoonne" And TypeOf (DataGridView1.CurrentCell) Is DataGridViewCheckBoxCell Then
                Dim checkBoxCell As DataGridViewCheckBoxCell = CType(DataGridView1.CurrentCell, DataGridViewCheckBoxCell)
                Dim Selec As Boolean
     
                If checkBoxCell.IsInEditMode Then
                    'Selec = CBool(checkBoxCell.Value)
                    Selec = CBool(checkBoxCell.EditedFormattedValue)
                    'Selec = CBool(checkBoxCell.EditingCellValueChanged)
                    'Selec = Not Selec
                    MessageBox.Show(CStr(Selec))
                Else
                    'Selec = CBool(checkBoxCell.Value)
                    'Selec = CBool(checkBoxCell.EditedFormattedValue)
                    Selec = CBool(checkBoxCell.EditingCellValueChanged)
                    'Selec = Not Selec
                    MessageBox.Show(CStr(Selec))
                End If
     
                If Selec Then
                    countSelected += 1
                Else
                    countSelected -= 1
                End If
            End If
     
        End Sub

Discussions similaires

  1. Compter le nombre d'enregistrement supprimer dans une jsp
    Par DarkWark dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 26/05/2006, 11h36
  2. Réponses: 2
    Dernier message: 28/04/2006, 13h28
  3. Compter le nombre d'octets lus dans un flux
    Par Le Furet dans le forum Entrée/Sortie
    Réponses: 25
    Dernier message: 09/03/2006, 08h19
  4. Compter le nombre d'image contenu dans un <div>
    Par denn dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/02/2006, 15h45
  5. [Débutant][RISC]Compter le nombre de bit à 1 dans un octet ?
    Par Pill_S dans le forum Autres architectures
    Réponses: 7
    Dernier message: 23/12/2004, 23h24

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