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 :

comboBox objets metiers datagridview


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Novembre 2006
    Messages : 77
    Par défaut comboBox objets metiers datagridview
    dsl de remettre ce message j'en ai vu des dizaines déjà sur le forum mais aucun ne m'a donné la solution .

    Voi j'ai une archi 3/3 je fais une requetes et je recois des objets métiers contenant des Civilités (Id/Lib/lib réduit)
    Je veux remplacer le txtbox du DGV par un CBbox dc j'ai regardé comment l'on fait cela dans la msdn :
    je supprime la colonne
    j'en créé une nouvelle, je lui affecte une valueMember 'xx' et une display member 'yy' mais le problème c'est que j'ai toujours une erreur m'informant que le champ demandé n'existe pas...

    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
     
    ----------------------------------------
    OBJET TRANSPORT LOCATAIRE 
     
    public Civilite()
            {
     
                Id= String.Empty;
                Lib = String.Empty;
            }
     
    public Locataire()
            {
     
                Nom = String.Empty;
                Prenom = String.Empty;
                Civilite = new Civilite;
     
            }
     
    ------------------------------
     
     
    //ici le code ds la couche de présentation 
     
     
    int position = dGViewLocataire.Columns["Civilite"].Index;
                    dGViewLocataire.Columns.Remove("Civilite");
                    DataGridViewComboBoxColumn comboboxColumn = new DataGridViewComboBoxColumn();
                    comboboxColumn.Name = "Civilite";
                    comboboxColumn.HeaderText = "Titre représentant";
                    comboboxColumn.Width = 90;
                    comboboxColumn.MaxDropDownItems = 6;
                    comboboxColumn.ValueMember = "Civilite";
                    //comboboxColumn.DisplayMember = "";
                    comboboxColumn.DataPropertyName = "Civilite";
                    comboboxColumn.DataSource = Titres;
                    dGViewLocataire.Columns.Insert(position, comboboxColumn);
    Titres une liste générique de civilité.
    Ma source de données n'est pas un DataSet mais une liste d'objet métiers

    Désolé c'est un problème récurent sur le forum mais je n'ai pas réussi a trouver la solution

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    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
    public Civilite()
            {
     
                Id= String.Empty;
                Lib = String.Empty;
            }
     
    public Locataire()
            {
     
                Nom = String.Empty;
                Prenom = String.Empty;
                Civilite = new Civilite;
     
            }
    C'est koi ce code ? Des classes des méthodes ?
    Dans les deux cas le code est faux.
    Tout ce que cela peut être c'est des constructeurs des classes Civilite et Locataire. Si c'est le cas précise le ou poste un code du genre :
    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
    public class Civilite
    {
    public Civilite()
            {
                
                Id= String.Empty;
                Lib = String.Empty;
            }
    } 
    
    public class Locataire
    {
    public Locataire()
            {
                
                Nom = String.Empty;
                Prenom = String.Empty;
                Civilite = new Civilite();
     
            }
    }
    Parce que c'est un peu désorientant sinon. De plus je t'ai corrigé une faute, l'instanciation d'un objet ce fait ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Toto t;
    t = new Toto();
    Le () veut dire que tu utilises le constructeur vide de la classe Toto, si tu veux utiliser un constructeur qui possède des paramètres :
    Mon paramètre étant une string.

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Novembre 2006
    Messages : 77
    Par défaut
    oui dsl Ce sont bien des classes transport.

    j'ai mangé les parenthèses dans mon copier coller pour le constructeur du locataire car j'ai changé les noms pour simplifier les choses dans le post ( a tort lol)
    Donc ma question est juste de savoir comment mettre des objets complexes dans la datagridComboBoxColumn qui soit binder avec l'objet de chacune des lignes de la datasource du datagridView.
    ==> en francais ds le texte

    J'ai plusieurs locataires (liste d'objets transport de type Locataire), je les mets tous dans un datagrid. Chaque locataire a une propriété Civilite.
    J'ai une liste d'objets transports Civililites qui contient des objets Civilite. Je souhaite avoir une liste détoulante des civilités possibles pour tous les locataires dans une colonne particulière avec une préselection si le locataire en a déjà une.


    Pour mettre en place ca :
    Je récupère ma liste d'objets locataire depuis la couche métier.
    Je lie cette liste au datagridView
    Je n'affiche que les colonnes qui m'interesse en applicant la propriété Visible au cas par cas.
    Je supprime la colonne de Civilité

    je créé un objet DataGridViewComboBoxColumn
    Je mets renseigne sa source de données et son binding sur le dataGRid
    je le lie au Datagrid

    Ca marche pas

    ce qui donne au final

    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
    /Datagrid des locataires
                dGViewLocataire.DataSource = DMI.CptClient.Locataires;
    
                ///On va regarder chacune des colonnes pour savoir si on l'affiche ou non 
                foreach (DataGridViewColumn dgvc in dGViewLocataire.Columns)
                {
    
                    if (
                        dgvc.Name.Equals("Nom")
                        || dgvc.Name.Equals("CiviReprePar")
                        || dgvc.Name.Equals("RepresentePar")
                        || dgvc.Name.Equals("chPresent")
                        )
                    {
                        dgvc.Visible = true;
                    }
                    else
                    {
                        dgvc.Visible = false;
                    }
    
                }
    
                ///On remplace le champs texte par un menu déroulant pour avoir la liste des titres de civilité
                ///
                try
                {
                    int position = dGViewLocataire.Columns["CiviReprePar"].Index;
                    dGViewLocataire.Columns.Remove("CiviReprePar");
                    DataGridViewComboBoxColumn comboboxColumn = new DataGridViewComboBoxColumn();
                    comboboxColumn.Name = "CiviReprePar";
                    comboboxColumn.HeaderText = "Titre représentant";
                    comboboxColumn.Width = 90;
                    comboboxColumn.MaxDropDownItems = 6;
                    comboboxColumn.ValueMember = "";
                    comboboxColumn.DisplayMember = "";
                    comboboxColumn.DataPropertyName = "CiviReprePar";
                    comboboxColumn.DataSource = Titres;
                    dGViewLocataire.Columns.Insert(position, comboboxColumn);
    
                }
                catch (Exception ex) 
                {
                    MessageBox.Show("Erreur création du datagrid"+ ex.Message, "Erreur", MessageBoxButtons.OK);
                }
    J'espère avoir été plus clair dans mes explications

  4. #4
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Novembre 2006
    Messages : 77
    Par défaut
    dsl je fais remonter...

  5. #5
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Ca marche pas
    Cela veut dire ?
    Une erreur ? Cela affiche autre chose que ce que tu attends ?

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Novembre 2006
    Messages : 77
    Par défaut
    les proprietes de ma datagridComboBoxColumn ValueMember et DisplayMember génèrent toujours des erreurs

    voici le message l'erreur catcher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Le champ appelé xxxx  n'existe pas.
    ou xxx est la valeur affectée à ValueMember


    je comprend bien que la valeur que je met ne correspond pas mais il me semble bien avoir pourtant compris ce qu'attend cette propriété

    ValueMember <== attend le champ correspondant à la propriété de l'utilisateur ici Civilite
    DisplayMember <== attend la propriete a afficher de la Civilite ici Libelle

    Je me demande l'erreur ne proviendrait pas de la colonne qui n'arriverait pas a se binder aux objets utilisateurs

    Merci de vos réponses

  7. #7
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Novembre 2006
    Messages : 77
    Par défaut
    les proprietes de ma datagridComboBoxColumn ValueMember et DisplayMember génèrent toujours des erreurs

    voici le message l'erreur catcher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Le champ appelé xxxx  n'existe pas.
    ou xxx est la valeur affectée à ValueMember


    je comprend bien que la valeur que je met ne correspond pas mais il me semble bien avoir pourtant compris ce qu'attend cette propriété

    ValueMember <== attend le champ correspondant à la propriété de l'utilisateur ici Civilite
    DisplayMember <== attend la propriete a afficher de la Civilite ici Libelle

    Je me demande l'erreur ne proviendrait pas de la colonne qui n'arriverait pas a se binder aux objets utilisateurs

    Merci de vos réponses

  8. #8
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    ValueMember <== attend le champ correspondant à la propriété de l'utilisateur ici Civilite
    Ce champ ne correspond pas à une chaine de caractere vide, non ?
    Parce que là c'est ce que tu passe à ValueMember.

  9. #9
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Novembre 2006
    Messages : 77
    Par défaut
    non non la j'ai mis ca ds mon code car je ne sais pas quoi mettre, j'ai deja fais des essais avec plusieurs valeurs dont :


    valueMember = "CiviReprePar"

    ou
    valueMember = "Titre"

    ou
    valueMember = ""


    Sachant que "CiviReprePar" est le nom de la propriété dans un objet Utilisateur.
    Sachant que "Titre" est le type de la propriété dans un objet Utilisateur.

    je rappelle qu'une liste d'Utilisateur est passé en datasource du DGV

    J'ai aussi essayé d'affecter ds un ordre différent mais rien ne fait

    Merci de ta réponse et des suivantes si possibles

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

Discussions similaires

  1. Objets Metiers dans GWT
    Par tatemilio2 dans le forum GWT et Vaadin
    Réponses: 3
    Dernier message: 22/04/2008, 21h23
  2. Combobox integrée dans DataGridView
    Par waterman dans le forum Windows Forms
    Réponses: 8
    Dernier message: 13/11/2007, 11h47
  3. Combobox dans un datagridview
    Par nuriel2 dans le forum C#
    Réponses: 3
    Dernier message: 31/10/2007, 14h18
  4. objet metier briques logicielles
    Par ldoudon dans le forum Langage
    Réponses: 3
    Dernier message: 10/08/2007, 11h15
  5. Réponses: 3
    Dernier message: 06/07/2007, 09h17

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