Datenbindung ComboBox <-> ListView.Items[].Text
-
hi,
Ich versuche derzeit eine ComboBox an die Items eines ListView's zu binden. Dabei soll die Combobox die Auswahl eines der Listview-Items ermöglichen (ListViewItem.Text). Hinzu kommt, das die Anzahl der Items in dem ListView sich änder kann. Ist dies mit der Datenbindung überhaupt möglich, und wenn, wie? Die Information die man im Netz dazu findet, sind etwas verwirrend
.
Hier mal was ich probiert habe, aber nicht zum gewünschten Ziel führt:ComboBox1.DataBindings.Add("Text", ListView1, "Items.Text", false, DataSourceUpdateMode.OnPropertyChanged);
grüße .NetPhysiker
BTW: Ich könnte die Sache natürlich auch ohne Datenbindung lösen - mich interessiert halt nur mal, ob, und wie es geht.
-
.NetPhysiker schrieb:
Dabei soll die Combobox die Auswahl eines der Listview-Items ermöglichen (ListViewItem.Text).
Den Satz habe ich nicht verstanden.
Grüssli
-
hi,
Dravere schrieb:
.NetPhysiker schrieb:
Dabei soll die Combobox die Auswahl eines der Listview-Items ermöglichen (ListViewItem.Text).
Den Satz habe ich nicht verstanden.
Grüssli
Die ComboBox enthält alle Elemente des ListView's (ersten Spalte).
-
Und du willst bei Auswahl eines Eintrags in der ComboBox automatisch den entsprechenden Eintrag in der ListView selektieren?
Generell ist aber bei deinem Code "Items.Text" schon mal falsch, denn Items verfügt über keine direkte Eigenschaft "Text" (ich bin mir auch nicht sicher, ob diese Punkt-Notation beim DataBinding überhaupt erlaubt ist).
Außerdem unterstützt ListView nur die SelectedItems (bzw. -Indices) als Eigenschaft, d.h. immer als Collection (selbst bei SingleSelection).
Ich denke, mit DataBinding kommst du hier nicht weiter (DataBinding sollte m.E. auch eher zwischen Control und Model und nicht zwischen zwei Controls erfolgen - sonst hieße es ja ControlBinding
-
Th69 schrieb:
Und du willst bei Auswahl eines Eintrags in der ComboBox automatisch den entsprechenden Eintrag in der ListView selektieren?
Nein, das ListView dient nur als Datenquelle.
Der oben gezeigte Schnipsel funktioniert - es wird aber immer nur das 1. Element des ListViews in die ComboBox kopiert. Dynamisch ist es leider das auch nicht (Änderungen im ListView bleiben ohne Auswirkungen für die ComboBox).
Ich dachte, das die Datenbindung zumindest ein dynamische Anbindung ermöglicht - aber das scheint dann wohl doch ein etwas zu optimistischer Gedankengang gewesen zu sein.
Danke und Grüße
.NetPhysiker
-
Also mal grundsätzliches:
1. Du musst etwasComboBox.DataSource
zuweisen.
Schau dir auch mal "Data Sources Supported by Windows Forms" an.
2. Damit dieComboBox
aktualisiert wird, muss die ListeIBindingList
implementieren. Was bei derListViewItemCollection
vonListView.Items
nicht der Fall ist.
3. Verwende eine Liste, welcheIBindingList
implementiert (z.B.BindingList<T>
) und weise diese derListView.DataSource
undComboBox.DataSource
zu. ÜberComboBox.DisplayMember
kannst du bestimmen, was vom Objekt angezeigt werden soll.Grüssli
-
Hallo ihr beiden,
die ListView unterstützt (leider) kein DataBinding via DataSource...
Alternative wäre ein DataGridView.
-
Th69 schrieb:
die ListView unterstützt (leider) kein DataBinding via DataSource...
Alternative wäre ein DataGridView.Ups, sorry. Hab an die
ListBox
gedacht statt dieListView
. Naja, man könnte auch statt derListView
einDataGrid
nehmen. Oder man erweitertListView
umDataSource
. Gibt dazu auch ein paar Einträge im Internet.Grüssli
-
Dravere schrieb:
man könnte auch statt der
ListView
einDataGrid
nehmen. Oder man erweitertListView
umDataSource
. Gibt dazu auch ein paar Einträge im Internet.Ich denke in zukünftigen Projekten werde ich wohl Abstand vom ListView nehmen - das DataGrid schein mir generell etwas mächtiger zu sein.
danke, .NetPhysiker