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 :

Creer un combobox dans un datagridview bindé


Sujet :

Windows Forms

  1. #1
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut Creer un combobox dans un datagridview bindé
    Bonjour

    J'ai un DGV bindé sur une liste de classe T
    Un elément de cette classe est un enum
    Donc dans le DGV pour la colonne correspondande j'aimerais afficher un Combo qui limite le choix aux valeurs de l'Enum
    Mais je ne sais pas bien comment proceder

    Si je fais simplement un truc du genre ci dessous j'ai une erreur de cast a l'execution

    Il y a certainement autre chose a faire mais je cherche
    Merci de votre aide


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      DataGridViewCell Cmb = new DataGridViewComboBoxCell();
      dgv_Selected.Columns["TP"].CellTemplate = Cmb;

    Voici mon enum

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     public enum PrObjType
      {
        Image,
        Text,
        Rectangle,
        Ellipse
      }
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  2. #2
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Défini la colonne en question comme DataGridViewComboBoxColumn et affecte à la cette colonne une DataSource avec la liste des valeurs de l'énumération. Le reste se fera tout seul avec le DataBinding
    Pas de questions techniques par MP

  3. #3
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Salut Stormimon

    Cela signifie je je dois creer la colonne AVANT le binding ?
    Cela signifierait aussi que je ne peux pas laisser la génération automatique des colonnes au Binding et que je devrait toutes les generer a la main

    Ca devient alors beaucoup trop lourd a gerer
    Ou alors je fais une colonne combo non bindée qui sert de source en édition a la colonne affichant la donnée bindee que je laisse read only

    Ou alors j'ai pas encore compris
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  4. #4
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Si ton DataGridView sert uniquement à afficher des objets du même type, plutôt que mettre ta collection d'objets directement en DataSource du DataGridView génère une source de données pour ton objet (menu Données > Ajouter une source de données, ou quelque chose comme ça dans Visual Studio).

    Ensuite tu ajoutes cette source de données à la Form, cela créera un BindingSource. Tu lies le BindingSource au DataGridView en indiquant que la DataSource du DataGridView est le BindingSource, ce qui permettra de définir et configurer les colonnes à afficher en conséquence.

    Pour finir tu indiques la source de données du BindingSource en affectant à la propriété DataSource la collection d'objets que tu veux afficher.
    Pas de questions techniques par MP

  5. #5
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci Stormimonn

    Bon en gros tu me dis de passer par un bindingsource
    (n.b. : j'aime pas utiliser le designer pour cela, ni pour les Openfiledialog ni pour tout ces autres dialogues qui vont se cacher dans l'ombre du designer)

    Actuellement j'utilise une BindingList<T>

    Je met ma BindingList en datasource et je cache les colonnes que je ne veux pas voir

    Dans la classe composant ma liste j'ai une propriété du type de mon enum
    Ce que j'aurais souhaité c'est que la colonne representant cette propriété soit un combo qui me permette de choisir un autre type dans l'enum

    Mais je ne vois pas vraiment ce que le bindingSource va apporter pour faire cela. (d'ailleurs je n'ai jamais bien compris ce qu'appportait une bindinsource sinon un couche d'abstraction complementaire ou parfois quelques événement utiles comme AddingNew)

    Je que je pense faire maintenant c'est ajouter une colonne de type combo non bindée sur ma liste mais sur l'enum (comme tu le suggérait) de mettre la colonne bindée en readonly et de gerer l'event de la cellule du combo pour mettre a jour la valeur bindée ?
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

Discussions similaires

  1. Remplir une ComboBox dans un datagridview par datareader
    Par Machine Head dans le forum Windows Forms
    Réponses: 2
    Dernier message: 14/10/2009, 09h53
  2. ComboBox dans un DataGridView
    Par jeandadaf dans le forum VB.NET
    Réponses: 1
    Dernier message: 12/06/2009, 10h34
  3. Récuperer la valeur texte d'une combobox dans un datagridview
    Par Delphi-ne dans le forum Windows Forms
    Réponses: 0
    Dernier message: 19/03/2009, 10h17
  4. Ajouter une ComboBox dans un DataGridView
    Par mdordenart dans le forum Windows Forms
    Réponses: 5
    Dernier message: 12/03/2009, 13h59
  5. Combobox dans un datagridview
    Par nuriel2 dans le forum C#
    Réponses: 3
    Dernier message: 31/10/2007, 14h18

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