2016-05-01 14 views
2

Ich haben Schwierigkeiten ein einfaches Objekt zu einem comboBox wie folgt verbindlich:WinForms comboBox Datenbindung ganzes Objekt (kein datamember)

public partial class Planning : Form 
{ 
    private static BindingList<VisiteVisiteur> visiteurs = new BindingList<VisiteVisiteur>(Program.model.VisiteVisiteur.ToList()); 
    public VisiteVisiteur visiteur = visiteurs.Last(); 

    public Planning() 
    { 
     InitializeComponent(); 

     comboBox1.DataSource = visiteurs; 
     comboBox1.DisplayMember = "Name"; 
     comboBox1.DataBindings.Add("SelectedValue", visiteur, "", true, DataSourceUpdateMode.OnPropertyChanged); 

ich ganzes visiteur Objekt binden will, so dass es als comboBox aktualisiert selectedValue Änderungen. Momentan ändert sich der selectedValue, aber nicht das visiteur-Objekt. Was mache ich hier falsch?

LÖSUNG: Verwenden Sie das Ereignis SelectedIndexChanged die visiteur Variable

public partial class Planning : Form 
{ 
    private static BindingList<VisiteVisiteur> visiteurs = new BindingList<VisiteVisiteur>(Program.model.VisiteVisiteur.ToList()); 
    public VisiteVisiteur visiteur = null; 

    public Planning() 
    { 
     InitializeComponent(); 

     VisiteVisiteur visiteurTemp = visiteurs.Last(); 

     comboBox1.SelectedIndexChanged += new System.EventHandler(comboBox1_SelectedIndexChanged); 
     comboBox1.DataSource = visiteurs; 
     comboBox1.DisplayMember = "Name"; 
     comboBox1.SelectedItem = visiteurTemp; 
    } 

    public void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     visiteur = (VisiteVisiteur)comboBox1.SelectedItem; 
    } 
+0

Wechsel zu 'comboBox1.DataBindings.Add ("SelectedValue", dieser "visiteur", true, DataSourceUpdateMode.OnPropertyChanged);' – Fabio

+0

ich schon versucht, und habe diesen Fehler: _Cannot an der Immobilie oder Spalte visiteur auf die Daten binden Quelle erstellt aus Object._ – Nerimah

+0

Die aktuell akzeptierte Antwort ist völlig falsch. Machen Sie Ihre Eigenschaft "visiteur" ** ** und verwenden Sie dann den @Fabio-Code. –

Antwort

3

Antwort von Crowcoder visiteur zu comboBox1.SelectedItem nur einmal festgelegt werden. Aus diesem Grund müssen Sie manuell von SelectedIndexChanged

Aktualisierung verwenden Sie die richtige Datenbindung tun können (dank Ivan Stoev Kommentar), wenn Sie Mitglied ändern visiteur auf eine Eigenschaft

public VisiteVisiteur visiteur { get; set; } 

gesetzt Dann Databinding

comboBox1.DataSource = visiteurs; 
comboBox1.DisplayMember = "Name"; 
comboBox1.DataBindings.Add("SelectedValue", 
          this, 
          "visiteur", 
          true, 
          DataSourceUpdateMode.OnPropertyChanged); 

Und wenn Sie immer noch mit der manuellen Aktualisierung von visiteur bleiben, dann verwenden Sie SelectionChangesCommitted Ereignis statt SelectedIndexChanged.

0

Mit DataSource bereits setzt die Bindung zu aktualisieren. Sie wollen nicht eine neue hinzufügen, möchten Sie die SelectedItem setzen, die die Objektinstanz ist:

comboBox1.DataSource = visiteurs; 
comboBox1.DisplayMember = "Name"; 
comboBox1.SelectedItem = visiteur; 
+0

Dein Code macht nur die Hälfte der Arbeit, weil ich möchte, dass ** visiteur ** automatisch seinen Wert in die ComboBox ändert. SelectedValue – Nerimah

+0

@Nerimah, 'visiteur' IST der Wert. Was meinen Sie? – Crowcoder

+0

Nein, visiteur ist die Variable, die an den Wert der Combobox gebunden ist und den Wert von comboBox1.selectedValue – Nerimah