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.


  • Administrator

    .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


  • Administrator

    Also mal grundsätzliches:
    1. Du musst etwas ComboBox.DataSource zuweisen.
    Schau dir auch mal "Data Sources Supported by Windows Forms" an.
    2. Damit die ComboBox aktualisiert wird, muss die Liste IBindingList implementieren. Was bei der ListViewItemCollection von ListView.Items nicht der Fall ist.
    3. Verwende eine Liste, welche IBindingList implementiert (z.B. BindingList<T> ) und weise diese der ListView.DataSource und ComboBox.DataSource zu. Über ComboBox.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.


  • Administrator

    Th69 schrieb:

    die ListView unterstützt (leider) kein DataBinding via DataSource...
    Alternative wäre ein DataGridView.

    Ups, sorry. Hab an die ListBox gedacht statt die ListView . Naja, man könnte auch statt der ListView ein DataGrid nehmen. Oder man erweitert ListView um DataSource . Gibt dazu auch ein paar Einträge im Internet.

    Grüssli



  • Dravere schrieb:

    man könnte auch statt der ListView ein DataGrid nehmen. Oder man erweitert ListView um DataSource . 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


Anmelden zum Antworten