2009-04-01 6 views
1

J'essaie actuellement de lier une entité à un formulaire, mais je souhaite que DataConfidenceLevel (voir ci-dessous) soit lié à une liste déroulante avec ConfidenceDescription comme membre d'affichage. Quelle est la bonne façon de peupler la combobox?Entity Framework - Lier Combobox au champ Table normalisée

(je suis actuellement en utilisant WPF, mais une réponse Winforms est acceptable)

Merci

Entity Designer http://img19.imageshack.us/img19/374/entity.png

+0

Voulez-vous modifier/modifier cette relation aussi .. ou affichez simplement le nom firendly? – RobS

+0

il suffit d'afficher le nom convivial – Damien

Répondre

2

La réponse était plus simple que ce à quoi je m'attendais.

comboBox.DataBindings.Add(new Binding("SelectedItem", this.dataBindingSource, "DataConfidenceLevel", true)); 
    comboBox.DataSource = db.DataConfidenceLevel; 
    comboBox.DisplayMember = "ConfidenceDescription"; 
    comboBox.ValueMember = "ConfidenceLevelID"; 
1

J'ai écrit deux entrées de blog au sujet d'une façon de traiter cette situation - elle s'applique à ASP.net mais ça pourrait t'aider.

Voici les articles, le first one est plus d'une introduction au problème, le second entry montre comment épingler tous ensemble.

Je ne suis pas sûr si cela qualifie comme "la bonne façon", mais c'est certainement une approche :) Je serais heureux de vous répondre si cela vous aide! Editer: Après avoir lu la réponse de Danbruc, vous pouvez certainement remplacer ToString sur la propriété Navigation comme il l'a suggéré (en lecture seule), mais ce n'est qu'une réponse partielle.

Cela ne fonctionnera pas, sauf si votre requête LINQ contient l'instruction "Include", par exemple. Omettre le .Include() signifie que rien ne sera lié à la colonne.

+0

Je ne suis pas un développeur ASP, mais votre façon d'afficher les entités relâchées dans les contrôles liés aux données semble complexe. Je jetterai des chances sur ASP manipulant les entités liées aux données avec la méthode ToString() écrasée de la même manière que WinForms. –

+0

Vrai, mais je ne suis pas sûr de ce que vous aurez à faire pour apporter des modifications/mettre à jour l'entité – RobS

+0

Je vais essayer l'approche ToString et voir si je rencontre des obstacles (il y a toujours le problème d'assurer le membre de navigation est chargé ou non). – RobS

2

Vous souhaitez lier une collection à un contrôle et avoir une entité relâchée - à savoir la propriété de navigation DataConfidenceLevel de type DataConfidenceLevel - en tant que membre d'affichage?

qui est généralement atteint très simple en remplaçant ToString(),

public partial class DataConfidenceLevel 
{ 
    public override String ToString() 
    { 
     return this.ConfidenceDescription; 
    } 
} 

et que la mise en DisplayMember à la propriété DataConfidenceLevel de l'entité que vous voulez lier.

+0

Je m'arrache les cheveux en essayant de faire fonctionner ça. Je ne peux pas croire que quelque chose qui devrait être si simple est si difficile. J'ai surchargé la méthode ToString sur la classe DataConfidenceLevel, mais qu'est-ce que j'utilise exactement pour la source de données de la liste déroulante et quels sont les membres d'affichage/valeur que j'utilise? – Damien