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

Windows Forms Discussion :

[C#][DataGridView]Comment selectionner ligne sur Click Droit ?


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 77
    Points : 55
    Points
    55
    Par défaut [C#][DataGridView]Comment selectionner ligne sur Click Droit ?
    Bonjour,

    Mon problème est le suivant, j'ai un datagridview, lors du click droit, un contextmenustrip apparait avec comme option "Supprimer".

    Lors du click, il faut que je récupère l'index de la ligne courrante, le problème c'est que la ligne n'est pas sélectionnée avec le click droit.

    Avez-vous une idée ? Soit pour séléctionner cette ligne, soit récupérer l'index ?

    Merci

  2. #2
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 254
    Points
    28 254
    Par défaut
    1- en mettant ton titre avec les conformités du forum dotnet

    2- en mettant le mode de selection de ton dgv sur FullRow

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 77
    Points : 55
    Points
    55
    Par défaut
    Désolé pour le titre.

    Sinon mon dgv est déjà avec un SelectionMode à FullRowSelect

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 98
    Points : 109
    Points
    109
    Par défaut
    Salut, sans avoir besoin de cliquer, avec l'Event MouseEnter tu peux récupérer exactement quelle ligne est "survolée" par la souris. Je pense qu'ensuite il est possible de transmettre cette ligne à ton menu contextuel.
    Peut-être que je me trompe, je n'ai pas encore essayé de le faire, ça viendra plus tard dans mon projet, peut-être que je m'y pencherait aujourd'hui.

  5. #5
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 254
    Points
    28 254
    Par défaut
    Citation Envoyé par vincent.e
    Salut, sans avoir besoin de cliquer, avec l'Event MouseEnter tu peux récupérer exactement quelle ligne est "survolée" par la souris. Je pense qu'ensuite il est possible de transmettre cette ligne à ton menu contextuel.
    Peut-être que je me trompe, je n'ai pas encore essayé de le faire, ça viendra plus tard dans mon projet, peut-être que je m'y pencherait aujourd'hui.
    oui c'est possible.
    avec e.IndexRow.

    la premiere solution que j'ai proposée (sans verifier) fait que sur certains composants, le bouton droit, selectionne la ligne sur laquelle on se trouve.
    mais travailler avec le parametre EventsArgs de ta methode popup menu marchera egalement (soit selectionner la ligne à ce moment là, soit recuperer un id de la ligne sans la selectionner)

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 77
    Points : 55
    Points
    55
    Par défaut
    Le mieux serait quand même d'effectuer une séléction de la ligne (de façon visuelle) comme le fait un clic gauche et d'ensuite récupérer l'index dela ligne.

    N'y a t-il pas moyen de faire ça en crécupérant les coordonées du pointeur et en séléctionnant la ligne du dgv à ces coordonées ? Je n'ai pas trouvé dans cette voie.

    Merci

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 98
    Points : 109
    Points
    109
    Par défaut
    re
    bon, j'ai pour toi un bout de code qui devrait t'aider. Comme j'utilise un DataGridView, j'ai fait avec, mais la méthode doit être identique pour un DataGrid :
    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
     
    // événement lors d'un click sur une cellule d'un DataGridView
    private void dGVCellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
            {
                // si le click est effectué avec le bouton droit de la souris
                if (e.Button == MouseButtons.Right)
                {
                    // sélection du row sur lequel se trouve le curseur
                    this.dataGridView1.Rows[e.RowIndex].Selected = true;
                    // on affiche le menu contextuel sous le curseur
                    this.contextMenuStrip1.Show(this.dataGridView1, e.X, e.Y);
                    // on récupère le row sélectionné dans une variable locale
                    this._RowIndex = e.RowIndex;
                }
            }
    Ensuite pour la partie suppression du row sélectionné à partir du menu contextuel, c'est assez facile, vu que tu as la row pointée via la variable _RowIndex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // événement lors d'un click sur ton item de ton menu contextuel
     private void test1ToolStripMenuItem_Click(object sender, EventArgs e)
            {
               // on demande au datagrid de suprimmer le row se trouvant à l'index donnée par _RowIndex 
               this.dataGridView1.Rows.RemoveAt(this._RowIndex);
            }
    à noter que la sélection de la row c'est vraiment pour faire jolie (quoique ...) et n'est pas indispensable.

    Pour la partie suppression, tu as une autre manière avec la méthode Remove(datagridviewrow) du datagridview. Le principe est alors de récupérer la row pointée dans une variable locale, et ensuite tu passes cette variable en paramètre à la fonction Remove.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 77
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par Morpheus
    Merci de lire les messages que je vous laisse

    Citation Envoyé par Morpheus
    Bonjour

    Malgré la division des forums .NET, n'oublliez pas qu'il y a des règles

    http://www.developpez.net/forums/viewtopic.php?t=326092


    Merci d'utiliser les tags et de donner un titre correct à votre message


    A+
    J'ai bien essayé de remettre un [.NET] devant mon titre mais c'est impossible, je ne peux rien écrire

    Sinon, j'utilise aussi de datagridView comme je l'ai dit plus haut, donc ça tombe très bien. Par contre j'ai un petit problème, menu apparait toujours au niveau de la première ligne et complètement à gauche, et il se décale légerement mais pas vraiment

    Tu sais pas comment faire pour qu'il s'affiche réelement sous le curseur ?

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 98
    Points : 109
    Points
    109
    Par défaut
    si je sais, mais cherche un peu, tu as une propriété pour assigner un ContextMenuStrip au DataGridView directement, du coup l'appel du menu contextuel se fait comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
              this.dataGridView1.ContextMenuStrip.Show();
    et là le menu contextuel apparait là où il faut

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 77
    Points : 55
    Points
    55
    Par défaut
    Et bien j'avais déjà cherché en fait, mais j'ai un problème (j'avais commencé dans ce sens)

    Si je fais un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.datagridView.ContextMenuStrip = this.contextMenuStrip1;
    Alors, lors du click droit, il ne rentre plus dans l'event CellMouseClick, il ouvre direct mon menu

  11. #11
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Bonjour VincenzoR
    J'ai dû editer votre titre pour le mettre en conformité,
    regardez-le attentivement et vous verrez que ce n'était pas si difficile non seulement d'acceder à la demande de Morpheus mais egalement de repondre aux règles du Forum.

    Citation Envoyé par VincenzoR
    Si je fais un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.datagridView.ContextMenuStrip = this.contextMenuStrip1;
    Met en commentaire cette ligne de code et tu verras par toi même

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 98
    Points : 109
    Points
    109
    Par défaut
    re et bonne veille de fète à tout le monde

    alors pour que ton menu contextuel soit positionné comme tu le désires, tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
              this.contextMenuStrip1.Show(MousePosition);
    par contre j'essaie de faire autre chose avec le datagrid et je n'y arrive pas. Je cherche à détecter quelle key est utilisé lors de l'édition d'une cellule. Plus clairement, sur le datagrid on a bien des events sur les key (keypress, keydown, previewkeydown, etc ....), cependant ces events ne concerne que le datagrid en tant que control. Par exemple je cherche à savoir si l'utilisateur appuie sur TAB :
    - si aucune cellule est en cours d'édition, l'event fonctionne bien
    - si une cellule est en cours d'édition, l'event ne fonctionne pas
    je cherche donc un event du style DataGridViewCellKeyPress histoire de pouvoir détecter ce que l'utilisateur saisie dans une cellule au moment même où il frappe une touche.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 77
    Points : 55
    Points
    55
    Par défaut
    Merci !!

    C'est exactement ce que je cherchais.

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

Discussions similaires

  1. [Dojo] Creer un menu sur click droite sur les ligne d'une grid
    Par devkaty dans le forum Bibliothèques & Frameworks
    Réponses: 8
    Dernier message: 26/01/2010, 15h47
  2. menu contextuel sur click droit
    Par fouxy dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 13/04/2008, 16h40
  3. coordonnées cellule stringgrid sur click droit
    Par mike600river dans le forum C++Builder
    Réponses: 6
    Dernier message: 16/06/2006, 09h27
  4. [base de registre] Ouverture console DOS sur click droit
    Par SteelBox dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 11/02/2006, 02h02
  5. Sélection sur click droit
    Par anikeh dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 12/01/2006, 17h33

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