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 :

supprimer ligne de datagridview avec clic droit de la souris


Sujet :

VB.NET

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    168
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Septembre 2010
    Messages : 168
    Points : 55
    Points
    55
    Par défaut supprimer ligne de datagridview avec clic droit de la souris
    Bonjour,
    j'ai une datagridview remplire a partir d'un tableau de ma base donnée je veux faire des modification au niveau de datagridview :
    -supprimer des lignes a partir de boutton droit de la souri et je supprime
    -ajout une ligne entre deux ligne de datagridview
    Merci d'avance

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    Bonjour,

    pour le clic doit qui supprime, il faut ajouter un evenement click sur le datagridview, verifier que le clic est un clic droit, et lancer une suppression de la ligne sur laquelle la cellule est selectionnée.

    Pour ce qui est de l'insertion dans le datagridview tu peux faire un traitement de sorte à recupérer l'index de la ligne sélectionnée, recuperer dans une collection les lignes précédentes, puis ajouter dans la collection ta ligne, puis ajouter le reste des lignes
    Ensuite tu clear le datagridview et réinsère les lignes en lisant parcourant la collection

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    168
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Septembre 2010
    Messages : 168
    Points : 55
    Points
    55
    Par défaut
    merci asmduty
    est ce que c'est ça l'évènement: DataGridView1_RowsRemoved
    et j'ai besoin de code
    Merci d'avance

  4. #4
    Membre éprouvé
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 468
    Points : 1 111
    Points
    1 111
    Par défaut
    Pour récupérer le clic droit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub DataGridView1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataGridView1.Click
        If e.Button = MouseButtons.Right Then
           'Ici tu supprimes ta ligne
        End If
    End Sub

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    Non, ton évenement est l'évenement qui est lancé quaand tu viens de supprimer une ligne du datagridview.
    Pour le code je pense que tu es capable de le faire, ce n'est jamais bon de se faire mâcher le travail, s'il y a des pièges il faut que tu tombes dedans pour comprendre, si on te donne du code tout fait tu ignorera peut être pourquoi on fait telle chose de telle manière.

    Voilà les pistes que je peux te donner.

    Il faut ajouter l'evenement Click de ton datagridview

    Dans ton evenement le "sender" sera le datagridview, le "e" sera le clic.

    A partir du "e" tu récupère le clic, si c'est un clic droit tu continue, sinon tu ne fais rien.


    Donc dans la suite (si c'est un clic droit), avec le "sender" tu recuperes la cellule cliquée (selectedcells(0)).
    A partir de cette cellule tu récupère l'index ligne à laquelle elle appartient.
    Ensuite tu peux supprimer la ligne présente à cet index.

  6. #6
    Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    168
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Septembre 2010
    Messages : 168
    Points : 55
    Points
    55
    Par défaut
    merci Gurdil le nain
    mais voici l'erreur :
    Erreur 'Button' n'est pas un membre de 'System.EventArgs'
    Salutations

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    Il faut que tu fasse générer le code par Visual Studio, il n'est pas censé mettre un System.EventArgs mais un MouseEventArgs je pense

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    680
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 680
    Points : 1 183
    Points
    1 183
    Par défaut
    Bonjour,
    pour le clic droit il y a aussi :
    http://msdn.microsoft.com/fr-fr/libr...=VS.90%29.aspx

  9. #9
    Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    168
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Septembre 2010
    Messages : 168
    Points : 55
    Points
    55
    Par défaut
    re asmduty
    mais je travail sur vusial studion
    il reste le même problème

  10. #10
    Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    168
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Septembre 2010
    Messages : 168
    Points : 55
    Points
    55
    Par défaut
    merci chrismonoye,
    mais moi je cherche clic droit de datagridview comme dans une feuille excel tu clic droit et tu a le choix de supprimer ligne et ajout,
    Merci d'avance

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    680
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 680
    Points : 1 183
    Points
    1 183
    Par défaut
    Mais si j'ai bien compris, c'est cela.
    pour faire un essai :
    En mode Design, tu ajoutes depuis la boite à outils un ContextMenuStrip qui va apparaitre sous ton formulaire avec le nom ContextMenuStrip1.
    En cliquant une fois dessus une sorte de menu s'affiche en partie haute du formulaire.
    Pour son 1er ToolStripMenuItem, dans ses propriétés, à text on peut écrire "Supprimer ligne" et à Name : "SupprLigneToolStripMenuItem".
    En cliquant deux fois dessus on aura le routine que l'on codera par exemple :
    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
        Private Sub SupprLigneToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SupprLigneToolStripMenuItem.Click
            DeleteRows()
        End Sub
     
        Private Sub DeleteRows()
            Try
                If Me.DataGridView1.GetCellCount(DataGridViewElementStates.Selected) > 0 Then
                    Dim indexLigne As Integer = (DataGridView1.CurrentRow.Index Or DataGridView1.CurrentCell.RowIndex)
                    DataGridView1.Rows(indexLigne).Selected = True
                    DataGridView1.Rows.Remove(DataGridView1.Rows(indexLigne))
                Else
                    MessageBox.Show("Veuillez effectuer une sélection.")
                End If
            Catch Ex As Exception
                MessageBox.Show(Ex.Message)
            End Try
        End Sub
    Il faut aussi indiquer à quel contrôle ce ContextMenuStrip est destiné, ainsi dans le Load du formulaire, on peut le préciser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DataGridView1.ContextMenuStrip = ContextMenuStrip1
    A toi de coder l'insert ligne.

  12. #12
    Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    168
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Septembre 2010
    Messages : 168
    Points : 55
    Points
    55
    Par défaut
    merci chrismonoye,
    mais ce que je veux comprendre pourquoi le menustrip moi je veux sélectionner avec bouton droit de la souri et il me donne supprimer et je supprime la ligne sélectionner
    Merci autre fois

  13. #13
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    680
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 680
    Points : 1 183
    Points
    1 183
    Par défaut
    Ce n'est pas un MenuStrip, qui est le menu que l'on voit habituellement en haut de tout programme.

    C'est un ContextMenustrip, un ItemsControl propre au clic droit.

    Il ne faut pas confondre l'un et l'autre.

    Lorsque tu fais un clic droit dans Excel, entre autre, c'est bien un ContextMenuStrip qui s'affiche dans le contrôle Popup vers l'icone de ta souris, et qui te propose divers choix.

    Essaie le bout de code, si je n'ai pas fait d'erreur, tu verras le Popup s'afficher avec pour le moment qu'un choix : "effacer ligne".

  14. #14
    Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    168
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Septembre 2010
    Messages : 168
    Points : 55
    Points
    55
    Par défaut
    merci bouceaup chrismonoye ça marche très bien au 1ère j'ai mal compris mais ca va encore merci mais il reste un autre problème je veux supprimer la ligne totalement à la base donnée
    Merci

  15. #15
    Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    168
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Septembre 2010
    Messages : 168
    Points : 55
    Points
    55
    Par défaut
    re
    la supprission ça marche très bien mais le problème au niveau de l'ajout voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     Try
                If Me.DataGridView2.GetCellCount(DataGridViewElementStates.Selected) > 0 Then
                    Dim indexLigne As Integer = (DataGridView2.CurrentRow.Index Or DataGridView2.CurrentCell.RowIndex)
                    DataGridView2.Rows(indexLigne).Selected = True
                    'DataGridView2.Rows.Remove(DataGridView2.Rows(indexLigne))
                    DataGridView2.Rows.Add(DataGridView2.Rows(indexLigne))
                Else
                    MessageBox.Show("Veuillez effectuer une sélection.")
                End If
            Catch Ex As Exception
                MessageBox.Show(Ex.Message)
            End Try
    et voici l'erreur:
    impossible d'ajouter par programme des lignes à la collections de lignes datagridview lorseque le contrôle est liés aux données
    merci d'avance

  16. #16
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    680
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 680
    Points : 1 183
    Points
    1 183
    Par défaut
    Bonjour,

    le DGV pointe vers un objet source de données et ne sert que d'affichage.
    Il faut donc effectuer la plupart des actions par le biais de cette source, et non par celui du DGV. (Dixit MSDN)

    Un exemple ci dessous, avec un Dataset "dset", source chargée de la table "CLIENT" :

    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
    36
    37
    38
        Private Sub InsertRows()
     
            '*** UNE insertion de ligne(s) ne peut se faire qu'en amont d'une ligne ou de la ligne d'une ou plusieurs cellules sélectionnées.
            If DataGridView1.SelectedCells.Count > 0 Then
                '*** dtFact représente une table de donnée et charge en mémoire les données de la table choisie du Dataset.
                '*** drFact représente une ligne de données du DataTable.
                '*** l'objet DataRow, avec ses propriétés et méthodes permet de récupérer, évaluer, insérer, supprimer et mettre à jour les valeurs du DataTable.
                '*** aireSelectionnee est un tableau qui contiendra la liste de toutes les cellules sélectionnées.
                Dim dtFact As DataTable = dset.Tables("CLIENT")
                Dim drFact As DataRow
                Dim aireSelectionnee As ArrayList = New ArrayList
     
                For Each cell As DataGridViewCell In DataGridView1.SelectedCells
                    aireSelectionnee.Add(cell.RowIndex)
                Next
     
                '*** TRI cette liste, obtient le n° de la première et de la dernière ligne de la sélection.
                '*** EN cas de sélection multiple de cellules ou de lignes, par choix arbitraire, 
                '***    l'insertion se fera avant la ligne de moindre rang de la sélection et le nombre de lignes insérées
                '***    correspondra au nombre de lignes sélectionnée. 
                Dim premRowselect As Integer
                Dim derRowSelect As Integer
     
                aireSelectionnee.Sort()
                premRowselect = CInt(aireSelectionnee(0))
                derRowSelect = CInt(aireSelectionnee(aireSelectionnee.Count - 1))
     
                For nbre = 1 To derRowSelect + 1 - premRowselect
                    drFact = dtFact.NewRow()
                    dtFact.Rows.InsertAt(drFact, premRowselect)
                Next
     
                '*** Efface la sélection en cours pour sélectionner uniquement la première des lignes insérées.
                DataGridView1.ClearSelection()
                DataGridView1.Rows(premRowselect).Selected = True
     
            End If
        End Sub
    Et pour l'exécution, ajouter un ToolStripMenuItem au ContextMenuStrip avec la routine suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Private Sub InsererLignesToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InsererLignesToolStripMenuItem.Click
            InsertRows()
        End Sub

  17. #17
    Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    168
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Septembre 2010
    Messages : 168
    Points : 55
    Points
    55
    Par défaut
    Merci chrismonoye,
    une question : c'est quoi nbre c'est un entier ou quoi???
    Merci d'avance

  18. #18
    Membre éprouvé
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 468
    Points : 1 111
    Points
    1 111
    Par défaut
    Oui dans cette boucle, nbr est un entier initialiser à 1 et qui va s'incrémenter de 1 à chaque tour.

  19. #19
    Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    168
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Septembre 2010
    Messages : 168
    Points : 55
    Points
    55
    Par défaut
    voici l'erreur:
    La référence d'objet n'est pas définie à une instance d'un objet
    dans cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     drFact = dtFact.NewRow()
    merci

  20. #20
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    680
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 680
    Points : 1 183
    Points
    1 183
    Par défaut
    Bonsoir,
    comment se nomment ton dataset et la table que tu affiches dans ton dGV ?
    Je suppose que le soucis est là, au niveau du nom de la table qui n'est pas le nom de la table que tu affiches.

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/05/2018, 11h18
  2. [JTree] Sélection avec clic droit ?
    Par Pill_S dans le forum Composants
    Réponses: 3
    Dernier message: 27/02/2009, 19h04
  3. Enlever l'option supprimer la corbeille dans le clic droit
    Par psycoma dans le forum Windows Vista
    Réponses: 3
    Dernier message: 15/12/2007, 13h33
  4. Réponses: 12
    Dernier message: 23/04/2007, 17h37
  5. Sélection avec clic droit
    Par Alfred12 dans le forum Delphi
    Réponses: 2
    Dernier message: 22/02/2007, 17h04

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