2016-06-25 9 views
0

I Klassen haben:C# databinding combobox Feld und füllen Liste von anderen Liste

public class City { 
public string name { get; set; } 
public override string ToString() { return name; } 
} 
public List<City> cities = new List(); 
public class Person { 
public string name { get; set; } 
public string addr { get; set; } 
pubic City city { get; set; } 
} 
List<Person> persons; 

Ich binde Städte und Personen zu Binding (und aufzulisten und Textbox):

bindingSource_city.DataSource = cities; 
textBox1.DataBindings.Add("Text", bindingSource_city, "name"); 
bindingSource_person.DataSource = person; 
textBox2.DataBindings.Add("Text", bindingSource_person, "name"); 
textBox3.DataBindings.Add("Text", bindingSource_person, "addr"); 

auch List-Box. DataSource = bindingSource (im Formulareditor).

Alles scheint gut zu funktionieren. Wie kann ich eine Combobox mit Städten in der Liste erstellen, die an die Eigenschaft person.city gebunden ist? Ich kann nicht verstehen, wie Dropdown-Liste mit Objekten (nicht String-Elemente) gefüllt wird.

UPD: Oder wie man.city in SelectedIndex auf Daten (Listenindex) ändern und zurück konvertieren.

+0

danken, aber es ist nicht eine Antwort. In Ihrem Beispiel Combobox gebunden an eine bindingSource und in meinem - zu zwei. – Alexey

Antwort

0

Es ist sehr einfach zu tun:

comboBoxCities.DataSource = bindingSource1; 
comboBoxCities.DisplayMember = "name"; 
+0

Wie ist es zu person.city gebunden? Ich kann die Dropdown-Liste füllen, aber ich kann nicht verstehen, wie man sie an die Eigenschaft bindet. – Alexey

+0

Ich versuche, Daten in der Liste manuell zu aktualisieren, und es funktioniert gut. Auch ich versuche, Sie Code zu verwenden. Es hat Nebeneffekt - wenn ich den Cursor (SelectedIndex) in ComboBox ändere, Cursor in der ersten ListBox auch geändert :) – Alexey

-1

teilweise durch Hinzufügen von Ereignissen gelöst:

bindingSouce_city_ListChanges 
{ 
comboBox1.Items.Clear(); 
foreach(City c in cities) comboBox1.Items.Add(c); 
} 
comboBox1_SelectedIndexChanged(...) 
{ 
int i = comboBox1.SelectedIndex; 
((Person) bindigSource_person).city = (i < ? null: cities[ i ]); 
} 
bindingSource_person_CurrentChanged(...) 
{ 
comboBox1.SelectedIndex = 
cities.IndexOf(((Person) bindingSource_person).city); 
} 

Es ist nicht sehr schön Code, denke ich, aber seine Arbeit.

UPD: Dank eugene-podskal Lösung ist:

comboBox1.DataSource = bindinsSource_city; 
comboBox1.DataBinding.Add("SelectedItem", bindingSource_person, "city"); 
+0

Haben Sie versucht, nur eine Bindung an SelectedItem in die Stadt Ihrer Person hinzufügen? Wie in http://stackoverflow.com/questions/31343543/winforms-binding-a-combobox-selecteditem-to-an-object-property? –

+0

Ja! Vielen Dank! Es ist was ich will! – Alexey

+0

Muss ich meine Antwort oder Frage für die richtige Lösung aktualisieren? – Alexey