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 :

[DataGridView] Personnaliser les cellules ?


Sujet :

Windows Forms

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 352
    Points : 136
    Points
    136
    Par défaut [DataGridView] Personnaliser les cellules ?
    Bonjour,

    Est-ce qu'on peut définir le Type d'une colonne d'un DataGridView avec un autre composant qu'un proposé par défaut ?

    Si on veut mettre un ComboBox par exemple

    Merci

    PS : Il existe une doc spécialisé pour apprendre à se servir d'un DataGridView ?

    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
     
                List<String> lstPerso = new List<string>();
                lstPerso.Add("Elmt1");
                lstPerso.Add("Elmt2");
                lstPerso.Add("Elmt3");
     
                DataGridViewCell cellPerso = new DataGridViewComboBoxCell();
                DataGridViewColumn colPerso = new DataGridViewColumn(cellPerso);
                ComboBox cboPerso = new ComboBox();
     
                cboPerso.DataSource = lstPerso;
                //cellPerso.QUELQUECHOSE = cboPerso;
     
                colPerso.CellTemplate = cellPerso;
                colPerso.Name = "Perso";
                dgvPerso.Columns.Add(colPerso);

  2. #2
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Oui : http://windowsclient.net/samples/Go%...View%20FAQ.doc

    Sinon fouille la MSDN, elle propose pas mal d'exemples. La DataGridView concerne quasiment un post sur deux dans ce forum, tu pourras aussi trouver plein d'infos avec un peu de patience
    ಠ_ಠ

  3. #3
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 352
    Points : 136
    Points
    136
    Par défaut
    Merci bien

    Cela dit, je ne vois pas comment personnalisé sa colonne ? Comment séléctionner un élément d'une liste, etc...

  4. #4
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 352
    Points : 136
    Points
    136
    Par défaut
    Je bloque encore et toujours sur ces problèmes :
    - Ajouter un composant dans une cellule d'un DataGridView (et réussir à attacher une référence dessus)
    - Dans un ComboBox de DataGridView, réussir à selectionner l'élément voulu (comme je le fais simplement avec un ComboBox "normal")

    Si vous avez des idées ?

    Merci

  5. #5
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 352
    Points : 136
    Points
    136
    Par défaut
    J'ai créé un composant qui hérite de TextBox (MonnaieTextBox), j'aimerai bien créer une colonne dans mon DataGridView avec ce composant personnalisé, comment peut-on faire ?

    Merci

  6. #6
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 352
    Points : 136
    Points
    136
    Par défaut
    J'ai fais un petit pas, j'ai créé un composant qui hérite de DataGridViewTextBoxColumn, ainsi je le retrouve dans la liste déroulante du DataGridView dans "modifier les colonnes..." puis ColumnType.
    Cela dit, ma colonne n'a toujours pas le comportement que j'aimerai, c'est à dire des cellules qui ressemble à mon composant ucMonnaieTextBox (qui hérite de TextBox).

    Je sens que je me rapproche, mais j'y suis pas encore.

    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
     
        public partial class ucDataGridViewMonnaieTextBoxColumn : DataGridViewTextBoxColumn
        {
            ucMonnaieTextBox mntCell;
            public ucDataGridViewMonnaieTextBoxColumn()
            {
                InitializeComponent();
            }
            public String MntValeur
            {
                get { return mntCell.Valeur; }
                set { mntCell.Valeur = value; }
            }
            public Monnaie MntMonnaie
            {
                get { return mntCell.Monnaie; }
                set { mntCell.Monnaie = value; }
            }
        }

  7. #7
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Il te faut dériver DataGridViewColumn, dériver DataGridViewCell, et ajouter au code de ta colonne dérivée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public override DataGridViewCell CellTemplate
    {
      get { return new MonTypeDérivéDeCell(); }
      set { base.CellTemplate = value; }
    }
    Ca doit suffire.
    ಠ_ಠ

  8. #8
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 352
    Points : 136
    Points
    136
    Par défaut
    Citation Envoyé par Guulh Voir le message
    Il te faut dériver DataGridViewColumn, dériver DataGridViewCell, et ajouter au code de ta colonne dérivée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public override DataGridViewCell CellTemplate
    {
      get { return new MonTypeDérivéDeCell(); }
      set { base.CellTemplate = value; }
    }
    Ca doit suffire.
    Bonjour,

    Dans la MSDN j'ai trouvé un équivalent, pour le moment je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            public ucDataGridViewMonnaieTextBoxColumn()
            {
                InitializeComponent();
                this.CellTemplate = new ucDataGridViewMonnaieTextBoxCell();
            }
    J'ai, par exemple, affecté une valeur constante à ma cellule, histoire de voir si ça fonctionne bien, et en effet la valeur apparait automatiquement à chaque nouvelle création de ligne, j'en déduis que le lien entre la colonne et la cellule fonctionne bien.

    Maintenant, mon gros problème consiste à associer mon contrôle personnalisé (qui hérite de TextBox) à ma cellule !

    Voici les signatures de mes Class :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // Colonne
        public partial class ucDataGridViewMonnaieTextBoxColumn : DataGridViewColumn
    // Cellule
        public partial class ucDataGridViewMonnaieTextBoxCell : DataGridViewTextBoxCell
    Comment faire pour que mon contrôle soit compris dans ma cellule ?

    Merci

  9. #9
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 352
    Points : 136
    Points
    136
    Par défaut
    Dans la MSDN, j'ai trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DataGridViewTextBoxEditingControl, classe
    
    Hiérarchie d'héritage 
    System.Object 
       System.MarshalByRefObject 
         System.ComponentModel.Component 
           System.Windows.Forms.Control 
             System.Windows.Forms.TextBoxBase 
               System.Windows.Forms.TextBox 
                System.Windows.Forms.DataGridViewTextBoxEditingControl
    Je sens que je me rapproche ! Cette class hérite de TextBox, mon contrôle aussi, il doit bien y avoir un moyen de faire quelque chose avec ça ?

  10. #10
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Ca dépend dans quelle mesure ton TextBox dérivé est riche. S'il l'est, ça peut effectivement être intéressant de surcharger l'EditingControl (jamais fait, je peux pas t'aider ), mais si son travail consiste essentiellement à parser ou / et à formatter, l'abonnement aux événements de la grille / de la colonne / de la textbox doit suffire amplement.
    ಠ_ಠ

  11. #11
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 352
    Points : 136
    Points
    136
    Par défaut
    Citation Envoyé par Guulh Voir le message
    Ca dépend dans quelle mesure ton TextBox dérivé est riche. S'il l'est, ça peut effectivement être intéressant de surcharger l'EditingControl (jamais fait, je peux pas t'aider ), mais si son travail consiste essentiellement à parser ou / et à formatter, l'abonnement aux événements de la grille / de la colonne / de la textbox doit suffire amplement.
    Mon contôle dérivé de TextBox redéfini 4 méthodes et 1 propriété et ajoute 2 nouvelles propriétés.

    Je crois que je vais re-redéfinir l'objet dans mon contrôle qui dérive de DataGridViewTextBoxEditingControl, par contre, encore et toujours le même problème par la suite : Comment associé mon contrôle dérivé (...EditingControl) à mon contrôle dérivé de DataGridViewTextBoxCell ?

    Merci pour l'aide :-)

    édit:
    MSDN : DataGridViewTextBoxEditingControl, classe
    Représente un contrôle de zone de texte qui peut être hébergé dans un DataGridViewTextBoxCell.
    C'est le mot "hébergé" que je comprends pas ?!

    édit:
    Je regarde du coté d'un événement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            private void dgvMonnaie_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    Mais je ne sais toujours pas comment lier mon contrôle à ma cellule

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

Discussions similaires

  1. Personnaliser les cellules d'une exportation CSV
    Par rogntudju dans le forum Langage
    Réponses: 3
    Dernier message: 27/07/2010, 15h16
  2. Personnaliser les cellules d'un DataGrid
    Par jaltacom dans le forum Windows Forms
    Réponses: 0
    Dernier message: 05/05/2010, 19h26
  3. Personnaliser les cellules d'un gtktreeview
    Par flo_k dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 22/05/2009, 08h07
  4. Personnaliser les cellules d'une colonne ou lignes
    Par opensource dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 25/12/2007, 15h39
  5. Personnaliser les colonnes d'un DataGridView
    Par Matthieu MEZIL dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/01/2007, 09h50

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