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

C# Discussion :

[C#] Edition via ComboBox d'une DataGridView


Sujet :

C#

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 47
    Par défaut [C#] Edition via ComboBox d'une DataGridView
    Bonjour,

    Je m'arrache les cheveux depuis hier sur le problème suivant: Je cherche à afficher dans un DataGridView un combobox pour un choix d'objet.

    Je vais prendre l'exemple de ces deux classes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class City
    {
      public int ID { get; set; }
      public string Name { get; set; }
    }
     
    public class Person
    {
      public int ID { get; set; }
      public string Name { get; set; }
      public City City { get; set; }
    }
    Et voici un exemple d'initialisation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // Création des villes
    City paris = new City() { ID = 1, Name = "Paris" };
    City londres = new City() { ID = 2, Name = "Londres" };
    City madrid = new City() { ID = 3, Name = "Madrid" };
    List<City> cities = new List<City>() { paris, londres, madrid };
     
    // Création des personnes
    // On ignore dans quelles villes sont max et bob
    Person john = new Person() { ID = 1, Name = "John", City = paris };
    Person deborah = new Person() { ID = 2, Name = "Deborah", City = londres };
    Person max = new Person() { ID = 3, Name = "Max", City = null };
    Person bob = new Person() { ID = 4, Name = "Bob", City = null };
    List<Person> team = new List<Person>() { john, deborah, max, bob };
    J'ai un DataGridView dans lequel j'affiche la liste de personnes de l'équipe (en utilisant la liste "team"). Je souhaite avoir une ComboBox pour l'édition de la ville associée à une personne.

    J'ai défini la colonne City comme editable via ComboBox, j'ai donné en DataSource la liste "cities".

    Je bloque à l'édition, je reçois une exception qui me dit que je ne peux convertir une String en City...

    Si quelqu'un sait comment faire pour résoudre ce problème, je l'en remercie par avance.

  2. #2
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    Définis-tu le DataMember ?

    Peux-tu copier/coller le message de l'exception ?
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 47
    Par défaut
    Citation Envoyé par laedit Voir le message
    Définis-tu le DataMember ?
    Non, cette propriété appartient à quel objet ?

    Citation Envoyé par laedit Voir le message
    Peux-tu copier/coller le message de l'exception ?
    Là voici

    (La classe EOPImporter.Item est l'équivalente de la classe City)

  4. #4
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    A celui à qui tu définit aussi le DataSource.

    Avec le DataSource, tu va définir la source de données, avec DataMember, tu va définir la propriété qui va être affichée.

    Je pense que cela pourrait résoudre ton problème, mais rien n'est moins sûr, je ne connais pas la mécanique interne du DataGridView.

    Je pense que l'implémentation de l'interface IConvertible pourrait aussi te sortir d'affaire :

    http://msdn.microsoft.com/fr-fr/libr...8VS.95%29.aspx
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 47
    Par défaut
    Ok, donc j'ai regardé vers le DataMember mais c'est pour fournir le nom de la table d'un DataSet par exemple. Dans mon cas, j'utilise une liste donc à priori cela ne s'applique pas.

    Pour l'interface IConvertible j'y avais pensé mais c'est un peu crade. Ca impose que chaque City connaisse la liste de toutes les City puis convertisse depuis un string... Bof bof...

    J'avance et je cherche à définir le Formatter ou Converter d'une colonne/cellule. Par contre je ne trouve pas comment faire...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 47
    Par défaut
    Ca y est j'ai trouvé... En fait c'est tout simple

    Donc je mets le code pour les suivants qui ont le même problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // Il faut modifier City
    public class City
    {
      public int ID { get; set; }
      public string Name { get; set; }
      public City Self { get { return this; } }
    }
     
    // Puis définir
    (this.gridView.Columns[1] as DataGridViewComboBoxColumn).ValueMember = "Self";
    (this.gridView.Columns[1] as DataGridViewComboBoxColumn).DisplayMember = "Name";
    Et voilà

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

Discussions similaires

  1. [Débutant] evenement d'un combobox dans une datagridview
    Par diofilip dans le forum VB.NET
    Réponses: 4
    Dernier message: 30/06/2011, 12h05
  2. Détecter le click sur une combobox d'une datagridview
    Par Delphi-ne dans le forum Windows Forms
    Réponses: 11
    Dernier message: 21/04/2009, 11h22
  3. Ajouter une ComboBox dans un DataGridView
    Par mdordenart dans le forum Windows Forms
    Réponses: 5
    Dernier message: 12/03/2009, 13h59
  4. Réponses: 2
    Dernier message: 16/11/2007, 13h39
  5. Réponses: 2
    Dernier message: 06/08/2007, 18h04

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