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 :

mettre un Event sur un DatagridView.ButtonColomn


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 40
    Points : 26
    Points
    26
    Par défaut mettre un Event sur un DatagridView.ButtonColomn
    Bonjour,

    Comment mettre un event sur les boutons de ma ButtonColumn de mon gridView ?

    Je ne suis pas en ASP et je n'ai donc pas de propriété commandName aussi je ne vois pas comment placer l'appel à une méthode sur ces boutons.

    Cela doit être très très con mais je ne vois pas ...

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    salut

    DataGridView.CellClick devrait faire l'affaire

    (dans l'event, tu recuperes l'index de colonne et de ligne)

    The Monz, Toulouse

  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    Merci de ta réponse, je suis un peu surpris,

    Cela veux dire que je ne peux pas gérer d'event au niveau de la colonne ou du bouton ?

    C'est un peu fastidieux de gérer cela au niveau du gridView ...

    Comment cela va t'il se comporter si l'utilisateur réorganise les colonnes car la position de la cellule cliquée va changée ?

    Sinon Il n'y a pas de possibilité de retrouver le bouton avec un findcontrols ou autre ?





    Merci

  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    je ne vois pas pourquoi tu trouves cela "fastidieux" ?

    Ca veut juste dire que dans ton "handler" de CellClick, tu sois capable
    d'appeler la bonne méthode en fonction de la colonne choisis...

    Cela fait un "aiguillage" de plus, je te l'accorde, mais c'est pas non plus
    "trop" contraignant

    The Monz, Toulouse

  5. #5
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    sinon, tu peux toujours faire cela :

    (à savoir, surcharge des DataGridViewButtonCell et DataGridViewButtonColumn)

    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
    namespace DGridViewTest
    {
        public partial class Form1 : Form
        {
     
     
            public Form1()
            {
                InitializeComponent();
            }
     
            private void Form1_Load(object sender, EventArgs e)
            {
                dataGridView1.CellClick += new DataGridViewCellEventHandler(dataGridView1_CellClick);
                dataGridView1.Columns.Add(new MyColumn());
                ((MyCell)(dataGridView1.Rows[0].Cells[1])).CellClick+=new MyCell.OnCellClickEvent(Form1_CellClick);
            }
     
            void Form1_CellClick(object sender)
            {
                Trace.WriteLine("MyCell click");
            }
     
            void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
            {
                Trace.WriteLine("CellClick event");
            }
        }
     
        public class MyCell : DataGridViewButtonCell
        {
            public delegate void OnCellClickEvent(object sender);
            public event OnCellClickEvent CellClick;        
     
            protected override void OnClick(DataGridViewCellEventArgs e)
            {
                base.OnClick(e);
                if (CellClick != null)
                {
                    CellClick(this);
                }
            }
        }
     
        public class MyColumn : DataGridViewButtonColumn
        {
            private MyCell myTemplate;
     
            public MyColumn()
            {
                myTemplate = new MyCell();
            }
     
            public override DataGridViewCell CellTemplate
            {
                get
                {
                    //return base.CellTemplate;
                    return myTemplate;
                }
                set
                {
                    base.CellTemplate = value;
                }
            }
        }
    }
    Et la, pour le coup, tu auras l'event pour "un bouton"....

    Libre à toi ensuite d'orienter le CellClick+= vers le delegate que tu veux

    The Monz, Toulouse

  6. #6
    Nouveau membre du Club
    Inscrit en
    Novembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    oups j'ai modifié mon post après ta réponse :
    donc je reprend :

    Ma question c'est comment cela va se comporter quand l'utilisateur changera l'ordre des colonnes ? Si la position 4 qui était celle du bouton de l'est plus ?

    Je viens de voir que le sender de CellClick ne renvoie aucune info sur le bouton cliqué je ne vois aucun moyen d'être sur que l'utilisateur à bien cliqué sur mon bouton "modifier" et non sur le bouton "supprimer" de la mm ligne.

    Enfin je ne m'attendais à ce que le bouton ne soit que décoratif.

    Merci

  7. #7
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    avec ma méthode (surcharge des cellbutton et columnbutton) l'ordre de la colonne ne devrait plus avoir d'incidence

    The Monz, Toulouse

    PS : avec l'index de colonne et de ligne, tu retrouves la Cell qui a générer
    l'event.. et eventuellement tu auras coller dedans le nom de la méthode à appeler (genre de la propriété Tag)... ainsi, le changement d'ordre ne te perturbera plus

    The Monz, Toulouse

  8. #8
    Nouveau membre du Club
    Inscrit en
    Novembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    Ok, super,

    Merci de ta réponse, je vais faire comme tu l'indique par surcharge des cellbutton et columnbutton.

    Je te tiens au courant du résultat.

    A+

  9. #9
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    sinon, tu peux aussi faire cela :

    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
    public delegate void HelpMe();
     
     
     
            public void ShowMe()
            {
                Trace.WriteLine("Je suis la cellule 0");
            }
     
    void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
            {
                Trace.WriteLine("CellClick event");
                HelpMe toto = (HelpMe)dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Tag;
                toto();
            }
     
     private void Form1_Load(object sender, EventArgs e)
            {
                dataGridView1.CellClick += new DataGridViewCellEventHandler(dataGridView1_CellClick);
     
    // ici, tu associes ton delegate avec la cellule à traiter :)
     
                ((MyCell)(dataGridView1.Rows[0].Cells[1])).CellClick+=new MyCell.OnCellClickEvent(Form1_CellClick);
            }
    Cette méthode, bien qu'un peu plus "barbare" est plus rapide à implémenter
    que cell avec les deux surcharges d'objets...

    a voir ce qui te convient le mieux

    The Monz, Toulouse

  10. #10
    Nouveau membre du Club
    Inscrit en
    Novembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    Pour ma bonne comprehénsion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       HelpMe toto = (HelpMe)dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Tag;
                toto();
    ne devrait il pas se trouver dans Form1.CellClick ?

    Ainsi positionné c sur le click des autres cellules que la fonction sera lancée....

    ou je me trompe ?

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 05/05/2010, 19h55
  2. Cancel event sur Escape Key dans datagridview
    Par garciajulien dans le forum Windows Forms
    Réponses: 1
    Dernier message: 27/02/2010, 20h32
  3. Mettre un event sur un objet dessiné dans un Canvas
    Par calogerogigante dans le forum Tkinter
    Réponses: 11
    Dernier message: 30/01/2010, 09h05
  4. Event sur Combobox dans datagridview
    Par olibara dans le forum Windows Forms
    Réponses: 6
    Dernier message: 20/08/2009, 18h11
  5. [DATAGRIDVIEW - EVENT] Sur un bouton et suppression de ligne.
    Par GarsDuCalvados dans le forum VB.NET
    Réponses: 5
    Dernier message: 16/04/2009, 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