Ich möchte eine Verbindung BindingSource
zu einer Liste von Klassenobjekten herstellen und dann einen Objektwert zu einer ComboBox.
Kann jemand vorschlagen, wie es geht?
public class Country
{
public string Name { get; set; }
public IList<City> Cities { get; set; }
public Country()
{
Cities = new List<City>();
}
}
ist meine Klasse und ich möchte ihr name
Feld an eine BindingSource binden , die dann einer ComboBox zugeordnet werden kann
c#
winforms
data-binding
combobox
Mobin
quelle
quelle
Antworten:
Da Sie sich auf eine Combobox beziehen, gehe ich davon aus, dass Sie keine bidirektionale Datenbindung verwenden möchten (wenn ja, schauen Sie sich die Verwendung von a an
BindingList
).Um das in der gebundenen Combobox ausgewählte Land zu finden, gehen Sie wie folgt vor :
Country country = (Country)comboBox1.SelectedItem;
.Wenn Sie möchten, dass die ComboBox dynamisch aktualisiert wird, müssen Sie sicherstellen, dass die Datenstruktur, die Sie als
DataSource
Implementierung festgelegt habenIBindingList
, vorhanden ist. Eine solche Struktur istBindingList<T>
.Tipp: Stellen Sie sicher, dass Sie die
DisplayMember
an eine Eigenschaft in der Klasse und nicht an ein öffentliches Feld binden . Wenn Ihre Klasse verwendetpublic string Name { get; set; }
, funktioniert es, aber wenn es verwendet wird, kannpublic string Name;
es nicht auf den Wert zugreifen und zeigt stattdessen den Objekttyp für jede Zeile im Kombinationsfeld an.quelle
bindingSource1
?comboBox1.DataSource = bindingSource1.DataSource;
richtig? oder sollte es seincomboBox1.DataSource = bindingSource1;
?Für einen Hintergrund gibt es zwei Möglichkeiten, eine ComboBox / ListBox zu verwenden
1) Fügen Sie der Items-Eigenschaft Länderobjekte hinzu und rufen Sie ein Land als ausgewähltes Element ab. Um dies zu verwenden, sollten Sie den ToString of Country überschreiben.
2) Verwenden Sie DataBinding, setzen Sie die DataSource auf IList (List <>) und verwenden Sie DisplayMember, ValueMember und SelectedValue
Für 2) benötigen Sie zuerst eine Liste der Länder
Und dann in der SelectionChanged,
quelle
Boom.
quelle
Versuchen Sie so etwas:
Und wenn Sie WebForms verwenden, müssen Sie diese Zeile hinzufügen:
quelle
Dies ist der Code, den ich jetzt verwende.
quelle
Wenn Sie eine ToolStripComboBox verwenden, ist keine DataSource verfügbar (.NET 4.0):
quelle
ToolstripComboBox.ComboBox.DataSource
. Es sieht aus wieToolstripComboBox
ein Wrapper für einen normalenComboBox
.