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 :

Faire une multi séléction dans un datagridview


Sujet :

VB.NET

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 212
    Points : 71
    Points
    71
    Par défaut Faire une multi séléction dans un datagridview
    Bonjour,

    je sais qu'il y a deja eu des posts sur le sujet mais je n'ai rien trouver qui m'aide pour faire ce que je veux.

    Je m'explique, j'ai un datagridview dans lequel j'y ai ajouté une case à cocher pour faire de la sélection multiple.

    J'ai mit un bouton qui permet de tout selectionner. Jusqu'ici pas de problème. mais quand je veux faire de la selection unitaire la ca se corse.

    J'ai utilisé l’événement DataGridView1_CellMouseClick

    dans cet événement je récupère l'index sélectionné e.rowIndex et j'active la sélection de la ligne.

    Si je sélectionne une seconde ligne il enlève la sélection de la première pour sélectionner la suivante. voici le code utilisé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    If Me.DataGridView1.Rows(e.RowIndex).Cells(0).Value = True Then
                Me.DataGridView1.Rows(e.RowIndex).Cells(0).Value = False
                Me.DataGridView1.Rows(e.RowIndex).Selected = False
            Else
                Me.DataGridView1.Rows(e.RowIndex).Cells(0).Value = True
                Me.DataGridView1.Rows(e.RowIndex).Selected = True
     
     
            End If
    Comment faire pour que la multi-selection fonctionne dans ce cas.

    Le but est qu’après je fais un paste dans excel des lignes sélectionné.

    J'y arrive en parcourant le fichier excel ligne à ligne, sur un faible volume ca me pose pas de problème mais si on va sur un volume plus important l'application risque de prendre du temps a remplir le fichier excel.

    Merci par avance pour votre aide.

  2. #2
    Membre habitué Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Points : 135
    Points
    135
    Par défaut
    Bonjour,

    Essaye avec ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
      If e.ColumnIndex = 0 Then
     
                If DataGridView1.SelectedRows(0).Cells(0).Value = False Then
     
                    DataGridView1.SelectedRows(0).Cells(0).Value = True
     
                Else
     
                    DataGridView1.SelectedRows(0).Cells(0).Value = False
     
                End If
     
            End If
    Le premier IF permet de cocher la case uniquement si l'utilisateur clique dans cette cellule et pas dans une autre de la ligne. C'est un choix après, tu peux l'enlever.

    Cela fonctionne pour cocher des items un à un. S'il faut cocher plusieurs lignes d'un coup par sélection multiple, il faudra passer par une boucle plutôt et l'évènement KeyDown par exemple, pour cocher/décocher par appui sur une touche du clavier.

    Bonne journée.

    Cordialement-

  3. #3
    Membre émérite 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
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour,

    A toutes fins utiles, le DataGridView possède une propriété MultiSelect.
    Peut-être que DataGridView1.MultiSelect = True à l'ouverture du Form solutionnera le problème.


  4. #4
    Membre habitué Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Points : 135
    Points
    135
    Par défaut
    J'avoue y avoir pensé également Phil Rob, mais cette propriétés n'est-elle pas seulement utile lorsque l'on souhaite faire du MAJ + Clic par exemple ? Est-elle active lorsque l'on souhaite cocher plusieurs checkboxes les unes après les autres ?

    À vérifier, mais merci de l'avoir mentionné, car en tous les cas cela peut s'avérer utile effectivement.

    Cordialement-

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 212
    Points : 71
    Points
    71
    Par défaut
    Bonjour et merci pour les retours. La propriété multi-select ne fonctionne que si l'on utilise le ctrl + clic comme le dit shennong.

    Ceci dit depuis j'ai trouvé la solution. En fait utiliser e.rowindex ne stockait pas les précédente ligne selectionné. Ta méthode peut fonctionner mais je ne l'ai pas essayé, j'ai fini par trouver dans un autre post une solution qui permet de faire ce que je voulais.

    En gros il stocke les index à chaque fois que l'on clique, pour tous les cocher ensuite... ce n'est pas peut-être pas la solution la plus élégante mais elle fonctionne.

    Voici le code que j'ai utilisé :

    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
     Private Sub DataGridView1_MouseDown(sender As Object, e As MouseEventArgs) Handles DataGridView1.MouseDown
     
            Dim hit = Me.DataGridView1.HitTest(e.X, e.Y)
            If hit.RowIndex >= 0 Then
                Dim selectedRows = Me.DataGridView1.SelectedRows.Cast(Of DataGridViewRow)().ToArray()
                If Me.DataGridView1.Rows(hit.RowIndex).Cells(0).Value = False Then
                    Me.DataGridView1.Rows(hit.RowIndex).Cells(0).Value = True
                    Me.DataGridView1.Rows(hit.RowIndex).DefaultCellStyle.SelectionBackColor = Color.Yellow
                    Me.DataGridView1.Rows(hit.RowIndex).DefaultCellStyle.SelectionForeColor = Color.Black
                Else
                    Me.DataGridView1.Rows(hit.RowIndex).Cells(0).Value = False
                    Me.DataGridView1.Rows(hit.RowIndex).DefaultCellStyle.SelectionBackColor = Color.White
                End If
     
                ' Une fois que l'évènement sera traité, resélectionner les lignes qui
                ' étaient sélectionnées avant le click
                Me.DataGridView1.BeginInvoke(New Action(Of DataGridViewRow(), Int32)(AddressOf ReselectRows), selectedRows, hit.RowIndex)
            End If
        End Sub
     
    Private Sub ReselectRows(rows As DataGridViewRow(), rowIndex As Int32)
            For Each row In rows
     
     
     
                If row.Selected = False Then
                    row.Selected = True
     
                Else row.Selected = False
     
                End If
     
     
            Next
        End Sub

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/11/2010, 15h01
  2. Se faire une belle carrière dans l'informatique
    Par kroax dans le forum Emploi
    Réponses: 3
    Dernier message: 06/09/2006, 11h23
  3. Réponses: 2
    Dernier message: 24/08/2006, 11h33
  4. Réponses: 9
    Dernier message: 07/11/2005, 19h57

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