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 :

recupérer la ligne source d'un contextmenu dans un datagridview


Sujet :

Windows Forms

  1. #1
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Points : 1 057
    Points
    1 057
    Par défaut recupérer la ligne source d'un contextmenu dans un datagridview
    Bonjour tout le monde,

    je viens vers vous car j'ai un problème que je n'arrive pas à résoudre.

    Au sein de ma fenêtre, j'ai un datagridview (je tiens aussi à signaler que je trouve ce contrôle très mal fait et énormément complexe à paramétrer ).

    J'applique à toutes les lignes crées par le code un contextMenu. Quand celui s'ouvre j'aimerai récupérer la ligne sur laquelle il s'est ouvert. Et c'est la où je coince : la propriété SourceControl me renvoi le datagridview et non la ligne.

    Pouvez-vous m'expliquer comment faire ?

    Merci d'avance
    FInality

  2. #2
    Membre habitué Avatar de bobmidou
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2008
    Messages : 121
    Points : 149
    Points
    149
    Par défaut
    Salut

    si tu veux recuperer le contenu de la cellule, Tu peux déclarer un string qui contiendra le contenu de ta cellule et tu écris :
    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
     
    ...
     string str;
    ...
    private void dataGridView1_CellMouseEnter(object sender, DataGridViewCellEventArgs e) // ou autre méthode qui contient l'argument DataGridViewCellEventArgs
    {
          if (e.RowIndex > 0 && e.ColumnIndex > 0) // sinon erreur 
     
          str = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].FormattedValue.ToString();
    }
     
    private void afficherToolStripMenuItem_Click(object sender, EventArgs e)
    {
          //tu récupere ton str ici
    }
    y a sûrment d'autres façons ..

    Bonne chance
    --<< Il n y a que les clous qui ne plantent pas >>---

  3. #3
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Points : 1 057
    Points
    1 057
    Par défaut
    Salut,

    tout d'abord, merci pour ta réponse .

    Ne penses tu pas qu'il y a une meilleure façon ? Car là, ça va déclencher un grand nombre d'évènements

    En tout cas, merci encore
    Finality

  4. #4
    Membre habitué Avatar de bobmidou
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2008
    Messages : 121
    Points : 149
    Points
    149
    Par défaut
    Salut

    oups !
    Je viens de voir que tu veux récuperer toute la ligne et pas le contenu de la cellule

    tu veux tous les enregistrements de la ligne c'est ça ?

    peut être avec une collection des Rows ??

    oui y aura sûrement des solutions mais le datagridvieuw n'est pas facile à manipuler

    --<< Il n y a que les clous qui ne plantent pas >>---

  5. #5
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Points : 1 057
    Points
    1 057
    Par défaut
    t'inquiètes, pour récupérer la ligne entière c'est pas bien dur ^^.

    C'est vrai que le DataGridView est complexe... j'ai du jouer sur pas moins de 4 éléments afin d'en obtenir un qui correspondait à mes attentes

    bon beh pour l'instant je vais utiliser cette méthode en attendant de voir si certains proposent mieux

    Merci beaucoup,
    Finality

  6. #6
    Membre habitué Avatar de bobmidou
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2008
    Messages : 121
    Points : 149
    Points
    149
    Par défaut
    Salut

    en cas où tu ne l'a pas vu voici un exemple sur l'aide VS
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    private void InitializeDataGridView()
    {
        // Create an unbound DataGridView by declaring a column count.
        dataGridView1.ColumnCount = 4;
        dataGridView1.ColumnHeadersVisible = true;
     
        // Set the column header style.
        DataGridViewCellStyle columnHeaderStyle = new DataGridViewCellStyle();
     
        columnHeaderStyle.BackColor = Color.Beige;
        columnHeaderStyle.Font = new Font("Verdana", 10, FontStyle.Bold);
        dataGridView1.ColumnHeadersDefaultCellStyle = columnHeaderStyle;
     
        // Set the column header names.
        dataGridView1.Columns[0].Name = "Recipe";
        dataGridView1.Columns[1].Name = "Category";
        dataGridView1.Columns[2].Name = "Main Ingredients";
        dataGridView1.Columns[3].Name = "Rating";
     
        // Populate the rows.
        string[] row1 = new string[] { "Meatloaf", "Main Dish", "ground beef",
            "**" };
        string[] row2 = new string[] { "Key Lime Pie", "Dessert", 
            "lime juice, evaporated milk", "****" };
        string[] row3 = new string[] { "Orange-Salsa Pork Chops", "Main Dish", 
            "pork chops, salsa, orange juice", "****" };
        string[] row4 = new string[] { "Black Bean and Rice Salad", "Salad", 
            "black beans, brown rice", "****" };
        string[] row5 = new string[] { "Chocolate Cheesecake", "Dessert", 
            "cream cheese", "***" };
        string[] row6 = new string[] { "Black Bean Dip", "Appetizer", 
            "black beans, sour cream", "***" };
        object[] rows = new object[] { row1, row2, row3, row4, row5, row6 };
     
        foreach (string[] rowArray in rows)
        {
            dataGridView1.Rows.Add(rowArray);
        }
    }
     
    private void button1_Click(object sender, System.EventArgs e)
    {
        // Resize the height of the column headers. 
        dataGridView1.AutoResizeColumnHeadersHeight();
     
        // Resize all the row heights to fit the contents of all non-header cells.
        dataGridView1.AutoResizeRows(
            DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders);
    }
     
    private void InitializeContextMenu()
    {
        // Create the menu item.
        ToolStripMenuItem getRecipe = new ToolStripMenuItem("Search for recipe", null,
            new System.EventHandler(ShortcutMenuClick));
     
        // Add the menu item to the shortcut menu.
        ContextMenuStrip recipeMenu = new ContextMenuStrip();
        recipeMenu.Items.Add(getRecipe); 
     
        // Set the shortcut menu for the first column.
        dataGridView1.Columns[0].ContextMenuStrip = recipeMenu;
        dataGridView1.MouseDown += new MouseEventHandler(dataGridView1_MouseDown);
    }
     
    private DataGridViewCell clickedCell;
     
    private void dataGridView1_MouseDown(object sender, MouseEventArgs e)
    {
    // If the user right-clicks a cell, store it for use by the shortcut menu.
        if (e.Button == MouseButtons.Right)
        {
            DataGridView.HitTestInfo hit = dataGridView1.HitTest(e.X, e.Y);
            if (hit.Type == DataGridViewHitTestType.Cell)
            {
                clickedCell =
                    dataGridView1.Rows[hit.RowIndex].Cells[hit.ColumnIndex];
            }
        }
    }
     
    private void ShortcutMenuClick(object sender, System.EventArgs e)
    {
        if (clickedCell != null)
        {
            //Retrieve the recipe name.
            string recipeName = (string)clickedCell.Value;
     
            //Search for the recipe.
            System.Diagnostics.Process.Start(
                "http://search.msn.com/results.aspx?q=" + recipeName);
                //null);
        }
    }
    j'espère que ça va t'aider

    Bonne chance
    --<< Il n y a que les clous qui ne plantent pas >>---

  7. #7
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Points : 1 057
    Points
    1 057
    Par défaut
    Ah merci beaucoup cette méthode me parrait bien plus meilleure : en effet, l'évènement ne se déclenche que lorsque du click, ce qui est bien mieux

    Merci beaucoup pour ton aide En ce moment, j'ai le cerveau qui fume lol

Discussions similaires

  1. récupérer la ligne en cours de lecture dans un datagridview
    Par leeloo95 dans le forum Windows Forms
    Réponses: 0
    Dernier message: 20/01/2010, 10h21
  2. Réponses: 3
    Dernier message: 29/04/2009, 21h37
  3. Réponses: 3
    Dernier message: 25/03/2008, 09h24
  4. Réponses: 1
    Dernier message: 16/08/2007, 17h48
  5. Recupérer des lignes dans un fichier ou une variable
    Par vince2005 dans le forum Langage
    Réponses: 12
    Dernier message: 29/09/2006, 18h46

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