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 :

Effacement multiple dans un grid


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 146
    Par défaut Effacement multiple dans un grid
    Bonjour!

    J'ai un grid dans lequel il y a deux colonnes ("Name" et "sel") sel est une checkboxcolonne.
    l'utilisateur va cocher dans mon grid les users qu'il ne veut pas et après il les supprime avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        Private Sub tsbtnDelUser_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsbtnDelUser.Click
            Dim j As Integer = dgvUsers.RowCount
            For i As Integer = 0 To j
                If dgvUsers.Rows(i).Cells("sel").Value = True Then
                    dgvUsers.Rows.RemoveAt(i)
                    i -= 1
                End If
            Next
        End Sub
    Mon problème est que quand j'efface un utilisateur, tout le reste perdent une row (d'où mon "i-=1") donc ma variable j n'as plus la bonne valeur, et une fois arriver a la fin de mon grid, il va quand même incrémenter mon i et sa génère une erreur d'index. Comment je fait pour changé ma variable j a la volé?

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    fait plutot une collection de la liste des rows checkées
    puis tu fais un for each sur cette collection
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 146
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    fait plutot une collection de la liste des rows checkées
    puis tu fais un for each sur cette collection
    Comment ça? A la place de le supprimer, je l'ajoute dans une collection et après je fait un for each sur la collection des éléments à supprimer?

    ça me parait logique, mais comment fait-tu pour mettre une row dans une collection?


    Merci!

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim lignesAsupprimer As New System.Collections.Generic.List(Of DataGridViewRow)
     
    For Each ligne As DataGridViewRow In mondgv.rows
        If la cellule du combobox est checké then 
            lignesAsupprimer.Add(ligne)
        End If
    Next
     
    For Each ligne In lignesAsupprimer
        mondgv.Rows.Remove(ligne)
    Next
    travailler sur des choses qui bougent c'est pas pratique
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 43
    Par défaut
    Bonjour,

    Citation Envoyé par l0quito Voir le message
    ça me parait logique, mais comment fait-tu pour mettre une row dans une collection?
    Tu peux utiliser par exemple un ArrayList.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim entries as new ArrayList
     
    for i as integer = 0 to j 
      If dgvUsers.Rows(i).Cells("sel").Value = True Then
       entries.add(dgvUsers.Rows(i))
      End If
    next
     
    for each row as DataGridRow in entries
       dgvUsers.Rows.Remove(row)
    next
    n'Oublie pas :

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 146
    Par défaut
    Merci a vous deux pour vos réponse.

    Je pense que je vais utiliser la technique de Pol63.

    Merci encor.

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    qui est plus performante d'au moins 0,0000001 milliseconde par rapport à la solution de Charaf Eddine

    (on travaille directement sur les lignes, pas besoin de 3 accès indexés pour retrouver la ligne dans le datagrid)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 146
    Par défaut
    Voilà ce que j'ai codé :
    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
     
     
     Dim LigneSupp As New System.Collections.Generic.List(Of DataGridViewRow)
     
                For Each ligne As DataGridViewRow In dgvUsers.Rows
                    If ligne.Cells("sel").Value = True Then
                        Dim UserID As Integer = ligne.Cells("ID").Value
                        If conSE.State = ConnectionState.Open Then conSE.Close()
                        conSE.Open()
                        cmd.CommandText = "DELETE FROM UsersLogin WHERE ID =" & UserID
                        cmd.ExecuteNonQuery()
                        conSE.Close()
                        LigneSupp.Add(ligne)
                    End If
                Next
     
                For Each ligne In LigneSupp
                    dgvUsers.Rows.Remove(ligne)
                Next
    Mon problème est que si il y en a qu'un seul qui est cocher, en mode pas à pas il a la value "DbNull" donc il ne s'efface pas.
    Et il n'efface jamais le dernier de la liste.
    Quelqu'un a-t-il une idée?

    Merci

  9. #9
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    le problème doit venir de ton combobox, qui ne prend la valeur true quand tu le coches, mais surement quand tu sors de la cellule
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 146
    Par défaut
    Le problème c'est que je ne passe pas par un evenement. L'utilisateur bidouille dans le grid et une fois qu'il clique sur le bouton supprimer il va supprimer celle qui sont a true. Donc je ne crois pas que ta reponse peut m'être utile

  11. #11
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    c'est simple si tu mets 2 lignes dans un dgv, que tu en coches une, et que par code tu en vois 0 de cochées, c'est que le cochage déconne ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  12. #12
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 146
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    c'est simple si tu mets 2 lignes dans un dgv, que tu en coches une, et que par code tu en vois 0 de cochées, c'est que le cochage déconne ...
    Oui, le problème viens de là, je m'en rend compte. ce que je ne comprend pas, c'est que quand je coche plusieurs checkbox, il me les voi toutes mais dès qu'il n'y en a qu'une qui est cocher le programme ne voie pas de valeur (ni TRUE ni FALSE mais DBNULL)

Discussions similaires

  1. Sélection multiple dans un sous formulaire ?
    Par _developpeur_ dans le forum Access
    Réponses: 2
    Dernier message: 09/03/2019, 01h05
  2. [VB] Fusion cellules dans un grid
    Par malhivertman1 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 21/12/2005, 09h07
  3. [Débutant] Sélection multiples dans une Listbox
    Par eraim dans le forum Access
    Réponses: 4
    Dernier message: 15/10/2005, 03h21
  4. Enregistre résulat multiplication dans une table
    Par faranfasi dans le forum Access
    Réponses: 2
    Dernier message: 11/10/2005, 13h04
  5. Problème d'ajout multiples dans un BDD Access
    Par arnaud_verlaine dans le forum Langage SQL
    Réponses: 3
    Dernier message: 31/05/2004, 13h34

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