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 :

Checkbox dans le header du datagridview


Sujet :

VB.NET

  1. #1
    Membre averti
    Femme Profil pro
    Webmaster
    Inscrit en
    Décembre 2017
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Décembre 2017
    Messages : 34
    Par défaut Checkbox dans le header du datagridview
    Bonjour,

    j'ai essayer de mettre ce code dans l'événement cellpainting du datagridview pour avoir un header de type checkbox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     dim chkBox as checkbox = New CheckBox()
            Dim rect As Rectangle = Me.DataGridView2.GetCellDisplayRectangle(0, -1, True)
            chkBox.Size = New Size(18, 18)
            Dim positionChk As Point = New Point(rect.Location.X + 14, rect.Location.Y + 10)
            chkBox.Location = positionChk
            Me.DataGridView2.Controls.Add(chkBox)
    Comment je peux récupérer la valeur booléen si la case à cocher du header est cocher ou décocher ?
    Merci d'avance.

  2. #2
    Membre expérimenté Avatar de Delaney
    Homme Profil pro
    Developpeur VB amateur
    Inscrit en
    Mars 2014
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Developpeur VB amateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2014
    Messages : 148
    Par défaut
    Bonjour

    Tu peux essayer comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim value As Boolean
    Dim cbox As CheckBox
    cbox = DirectCast(DataGridView1.Controls.Item(n), CheckBox) ' ici il faut que tu remplace n par le numéro de ta checkbox dans la liste des controles (normalement c'est 2 et plus car 0 et 1 sont pris par HScrollBar et VScrollBar)
    value = cbox.CheckState
    MsgBox(value.ToString)

    Si tu peux nommer ta checkbox c'est mieux :

    ajoute, après l'avoir créé
    et appelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cbox = DirectCast(DataGridView1.Controls.Item("cBox1"), CheckBox)

    Sincèrement

  3. #3
    Membre averti
    Femme Profil pro
    Webmaster
    Inscrit en
    Décembre 2017
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Décembre 2017
    Messages : 34
    Par défaut
    Bonjour ,

    Merci d'abord pour votre réponse , mais le checkbox.checkState retourne toujours la valeur 'False' même si la case est cocher .
    J'ai mis le code dans l'événement 'cellpainting' et j'affiche le message sur l'événement 'cellClick' du datagridview.

  4. #4
    Membre expérimenté Avatar de Delaney
    Homme Profil pro
    Developpeur VB amateur
    Inscrit en
    Mars 2014
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Developpeur VB amateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2014
    Messages : 148
    Par défaut
    Bonjour,

    J'ai testé le code en l'associant à un bouton et cela fonctionne, quand je clique sur le bouton, il renvoie bien true si la case est cochée et false sinon. Cela vient peut-être de l'évènement cellclick. je vais tester ça.

    sincèrement

  5. #5
    Membre expérimenté Avatar de Delaney
    Homme Profil pro
    Developpeur VB amateur
    Inscrit en
    Mars 2014
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Developpeur VB amateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2014
    Messages : 148
    Par défaut
    Bonjour,

    j'ai aussi testé en mettant le code dans l’événement cellclick et cela fonctionne aussi. (attention moi j'ai DataGridView1 et non DataGridView2 comme toi.

    voici mon code complet testé (j'ai un bouton et un datagridview avec 2 colonnes) :

    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
     
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            DataGridView1.Rows.Add() 'c'est juste pour avoir plusieurs cases et les tester
            DataGridView1.Rows.Add()
    End Sub
     
    Private Sub DataGridView1_CellPainting(sender As Object, e As DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting
            Dim chkBox As CheckBox = New CheckBox()
            Dim rect As Rectangle = Me.DataGridView1.GetCellDisplayRectangle(0, -1, True)
            chkBox.Size = New Size(18, 18)
            chkBox.Name = "cbox1" 'ne pas oublié de nommé la checkbox pour pouvoir l'appeler
            Dim positionChk As Point = New Point(rect.Location.X + 14, rect.Location.Y + 10)
            chkBox.Location = positionChk
            Me.DataGridView1.Controls.Add(chkBox)
    End Sub
     
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim value As Boolean
            Dim cbox As CheckBox
            cbox = DirectCast(DataGridView1.Controls.Item("cbox1"), CheckBox)
            value = cbox.CheckState
            MsgBox(value.ToString)
    End Sub
     
    Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick
            Dim value As Boolean
            Dim cbox As CheckBox
            cbox = DirectCast(DataGridView1.Controls.Item("cbox1"), CheckBox)
            value = cbox.CheckState
            MsgBox(value.ToString)
    End Sub
    Sincèrement

  6. #6
    Membre averti
    Femme Profil pro
    Webmaster
    Inscrit en
    Décembre 2017
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Décembre 2017
    Messages : 34
    Par défaut
    j'ai testé ce code ça marche bien si possible est ce que je peux accéder à l'événement checkedChanged du checkbox pour cocher tous les lignes si le checkbox du header est cocher.

  7. #7
    Membre expérimenté Avatar de Delaney
    Homme Profil pro
    Developpeur VB amateur
    Inscrit en
    Mars 2014
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Developpeur VB amateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2014
    Messages : 148
    Par défaut
    Bonjour, Oui tu peux mais comme tu as créé ta checkbox dans le code, tu dois créer ton évènement pour la checkbox dans le code

    Après avoir créer la checkbox ajoute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AddHandler chkBox.checkedChanged, AddressOf checkbox_changed
    puis dans ta form ou ton module :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public sub checkbox_changed ()
    'ici tu places le code pour cocher toutes tes lignes avec une condition if sur la valeur de chkBox.checkstate
    end sub
    edit : pour checked toutes tes lignes regarde par ici
    http://www.vbforums.com/showthread.p...-datagrid-view

  8. #8
    Membre averti
    Femme Profil pro
    Webmaster
    Inscrit en
    Décembre 2017
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Décembre 2017
    Messages : 34
    Par défaut
    Bonjour ,

    Suite à votre méthode j'ai essayé de mettre ce code pour cocher tous les lignes du datagridview2 .
    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
     
    Public Sub checkbox_changed()
            Dim value As Boolean
            Dim cbox As CheckBox
            cbox = DirectCast(DataGridView2.Controls.Item("cbox1"), CheckBox)
            value = cbox.CheckState
     
            If value.ToString = True Then
                For i As Double = 0 To DataGridView2.Rows.Count - 1
                    DataGridView2.Rows(i).Cells(0).Value = True
                    DataGridView2.Rows(i).DefaultCellStyle.BackColor = Color.LightBlue
                Next
            Else
                For i As Double = 0 To DataGridView2.Rows.Count - 1
                            DataGridView2.Rows(i).Cells(0).Value = False
                            DataGridView2.Rows(i).DefaultCellStyle.BackColor = Color.White
                        Next
             End If
        End Sub
    Mais quel est l'événement dont lequel je place ce ligne ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AddHandler chkBox.CheckedChanged, AddressOf checkbox_changed
    Merci .

  9. #9
    Membre expérimenté Avatar de Delaney
    Homme Profil pro
    Developpeur VB amateur
    Inscrit en
    Mars 2014
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Developpeur VB amateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2014
    Messages : 148
    Par défaut
    bonjour
    après la création de la checkbox :

    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
    
    Private Sub DataGridView1_CellPainting(sender As Object, e As DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting
            Dim chkBox As CheckBox = New CheckBox()
            Dim rect As Rectangle = Me.DataGridView1.GetCellDisplayRectangle(0, -1, True)
            chkBox.Size = New Size(18, 18)
            chkBox.Name = "cbox1" 'ne pas oublié de nommé la checkbox pour pouvoir l'appeler
    
    AddHandler chkBox.checkedChanged, AddressOf checkbox_changed 'ici par exemple
    
    
            Dim positionChk As Point = New Point(rect.Location.X + 14, rect.Location.Y + 10)
            chkBox.Location = positionChk
            Me.DataGridView1.Controls.Add(chkBox)
    End Sub
    sincèrement

  10. #10
    Membre expérimenté Avatar de Delaney
    Homme Profil pro
    Developpeur VB amateur
    Inscrit en
    Mars 2014
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Developpeur VB amateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2014
    Messages : 148
    Par défaut
    Bonjour

    Ici, tu n'as pas besoin de recréer une checkbox, elle existe déjà, il faut donc récupérer la référence de la checkbox qui lève l'évènement (voir code corrigé)

    Citation Envoyé par elinfo Voir le message
    Bonjour ,

    Suite à votre méthode j'ai essayé de mettre ce code pour cocher tous les lignes du datagridview2 .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Public Sub checkbox_changed()
            Dim value As Boolean
            Dim cbox As CheckBox
            cbox = DirectCast(DataGridView2.Controls.Item("cbox1"), CheckBox)
            value = cbox.CheckState
    voici le code corrigé

    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
     
    Public Sub checkbox_changed(sender As Object, e As EventArgs) 'paramètres à ajouter : "sender" c'est l'objet qui a provoqué l'évènement : la checkbox
     
            If sender.checkstate = checkstate.checked Then
                For Each row As DataGridViewRow In DataGridView1.Rows
                    Dim chk As DataGridViewCheckBoxCell = DirectCast(row.Cells(0), DataGridViewCheckBoxCell)
                    chk.Value = true
                Next
            Else
                For Each row As DataGridViewRow In DataGridView1.Rows
                    Dim chk As DataGridViewCheckBoxCell = DirectCast(row.Cells(0), DataGridViewCheckBoxCell)
                    chk.Value = false
                Next
            End If
    End Sub

    edit: une petite erreur s'est glissé dans ma procédure, les valeurs de checkstate, ne n'est pas true ou false mais checkstate.checked et checkstate.unchecked. J'ai donc corrigé le code ci dessus.
    edit2 : désolé dans mon code je n'ai pas mis le code pour changer la couleur de la case


    Sincèrement

  11. #11
    Membre averti
    Femme Profil pro
    Webmaster
    Inscrit en
    Décembre 2017
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Décembre 2017
    Messages : 34
    Par défaut
    Bonjour ,
    Merci de m'avoir aider .

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

Discussions similaires

  1. GridView et checkBox dans le header
    Par nico_4802 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 15/01/2010, 16h02
  2. Comment créer un GroupBox contenant une CheckBox dans le Header ?
    Par seiryujay dans le forum Windows Presentation Foundation
    Réponses: 15
    Dernier message: 17/04/2009, 17h43
  3. [JTable] Checkbox dans le header
    Par Tino13 dans le forum Composants
    Réponses: 2
    Dernier message: 21/07/2008, 14h56
  4. checkbox dans le header !?
    Par christopheEU dans le forum ASP.NET
    Réponses: 2
    Dernier message: 11/06/2008, 12h10
  5. [2.0] Mettre une Checkbox dans le header d'une colonne d'une DatagridView
    Par aurelien.tournier dans le forum Windows Forms
    Réponses: 5
    Dernier message: 23/01/2007, 10h27

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