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 :

Problème de sélection de ligne DataGridView sur clique droit de la souris [Débutant]


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 Problème de sélection de ligne DataGridView sur clique droit de la souris
    Bonjour à tous, ça fait longtemps que j'ai pas posté. J’espère que vous pourrez m'aider.

    Je cherche à obtenir des données de ma ligne courante sélectionnée lorsque je fait un clique droit mais lors de ce clique, l’événement SelectionChanged se déclenche et j'obtiens les données de la sélection précédente...alors que ça fonctionne très bien sur le clique gauche....

    Par exemple, initialement je suis positionné sur la ligne 10 du dgv, puis je fait un clique droit sur la ligne 15, dans CellMouseDown j'ai e.rowindex qui vaux bien 15, ensuite l’exécution du code passe dans le SelectionChanged et dans celui-ci RowIndex vaux 10 !!! Une idée d'ou ça pourrait venir ?????

    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 DataGridViewCars_CellMouseDown(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridViewCars.CellMouseDown
            If e.Button = Windows.Forms.MouseButtons.Right Then
                If e.ColumnIndex >= 0 And e.RowIndex >= 0 Then
                    DataGridViewCars.CurrentCell = DataGridViewCars.Rows(e.RowIndex).Cells(e.ColumnIndex)
                End If
            End If
        End Sub
     Private Sub DataGridViewCars_SelectionChanged(sender As Object, e As EventArgs) Handles DataGridViewCars.SelectionChanged
           If DataGridViewCars.Rows.Count > 0 Then
                If DataGridViewCars.CurrentRow Is Nothing Then DataGridViewCars.CurrentCell = DataGridViewCars.Rows(0).Cells(0)
                Dim RowIndex As Integer = DataGridViewCars.CurrentRow.Index
                SelectedCar = CStr(DataGridViewCars.Rows(RowIndex).Cells(dgvCols.Name.Name).Value)
                AfficheDataCar(SelectedCar )
                End If
        End Sub
    Je vous remercie beaucoup si vous pouvez m'aider....

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Points : 10 166
    Points
    10 166
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Je n'ai pas vraiment de réponse à ta question sur "l'origine" du problème.

    Ceci dit, je peux dire ce que je ferais. Je mettrais un point d'arrêt ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If DataGridViewCars.Rows.Count > 0 Then
    et, même si c'est long, je ferais un bon bout de la sub au pas-à-pas, quitte à utiliser le bouton "Exécuter jusqu'au curseur" (au besoin, tu le montes dans ta barre d'outils) et je vérifierais ce qui se passe vraiment. Parce que le déclenchement d'un événement a plutôt tendance à déclencher une suite d'événements en cascade. Dans ce cas, rien de mieux que de suivre l'ensemble du processus en contrôlant visuellement les valeurs des variables, et même ce qui peut se passer dans la "Form".

    Rien de mieux que de voir ce qui se passe et l'endroit où cela se passe...

  3. #3
    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
    Merci de me venir en aide Clementmarcotte,
    j'ai bien placé des points d'arrêt et fait du pas à pas....voici ce qui se passe :
    En considérant mon exemple de tout à l'heure : mon dgv est positionné sur la ligne 10 avant d'exécuter le code qui pose probléme, puis je fait un clique droit sur la ligne 15, (je parle en base 0, c'est plus simple).
    Le clique droit appelle DataGridViewCars.CellMouseDown
    e.RowIndex vaut 15.
    DataGridViewCars.CurrentCell -> appelle DataGridViewCars.CellFormatting mais cette procédure est vide pour ainsi dire en tout cas il n'y a pas de code qui s'exécute à l'interieur....
    Ensuite ça passe direct dans le DataGridViewCars.SelectionChanged
    DataGridViewCars.Rows.Count vaut 60
    DataGridViewCars.CurrentRow n'est pas égale à Nothing donc le code qui suit dans le then ne s’exécute pas.
    et DataGridViewCars.CurrentRow.Index (ou RowIndex) vaut 10.
    Le truc qui me chagrine c'est que je demande une nouvelle sélection avec .CurrentCell donc .SelectionChanged s'execute (jusque là tout est normal) sauf que je n'obtiens pas la bonne ligne....j'adore .NET mais il y a parfois des trucs qui me dépasse complètement.....
    Une idée ?

  4. #4
    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
    Bon, j'ai pas eu le temps de faire tous les tests et je ne sais pas encore si je n'aurais pas des effets secondaire dans mon application mais apriori il faut utiliser l'évenement .CurrentCellChanged à la place de .SelectionChanged. comme le suggère la note sur l'article :
    https://msdn.microsoft.com/fr-fr/lib...v=vs.110).aspx

    et cette fois je récupère le bon numéro de ligne.....

    A noter qu'on ne peux pas remplacer .CurrentCell par .CurrentRow pour faire un changement de ligne puisque cette dernière est en lecture seul

    Je passerais en résolue plus tard si tout va bien....

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

Discussions similaires

  1. [AC-2013] Problème de sélection de ligne dans une combobox
    Par appadawan dans le forum VBA Access
    Réponses: 1
    Dernier message: 03/07/2015, 15h39
  2. Problème de sélection de ligne après suppression
    Par Pumbaa dans le forum Composants
    Réponses: 2
    Dernier message: 07/05/2010, 14h57
  3. Problème ajout de plusieurs lignes DataGridView
    Par tssi555 dans le forum VB.NET
    Réponses: 3
    Dernier message: 28/08/2008, 10h46
  4. Ajout de menu perso sur clique droit de la souris !!
    Par Kyp dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 09/12/2005, 17h06
  5. [VB6] menu contextuel sur clique droit souris
    Par da40 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 08/07/2003, 11h07

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