2012-04-04 6 views
7
List<Customer> _customers = getCustomers().ToList(); 
BindingSource bsCustomers = new BindingSource(); 
bsCustomers.DataSource = _customers; 
comboBox.DataSource = bsCustomers.DataSource; 
comboBox.DisplayMember = "name"; 
comboBox.ValueMember = "id"; 

Wie stelle ich nun das Element der Combobox auf etwas anderes als das erste in der Liste ein? Versucht comboBox.SelectedItem = someCustomer; ... und viele andere Sachen, aber kein Glück so weit ...Set SelectedItem auf einem an die Datenquelle gebundenen Kombinationsfeld

Antwort

9

Sie

comboBox.SelectedValue = "valueToSelect"; 

oder

comboBox.SelectedIndex = n; 

oder

comboBox.Items[n].Selected = true; 
+0

comboBox.Items [n] .Selected = true; funktioniert nicht für mich (könnte ein CF-Problem sein), aber SelectedValue tut es, ich habe es vorher versucht, aber mit dem falschen Wert. Vielen Dank. – mdc

+0

Ich möchte anmerken, dass ich das Feld, das der Wert Mitglied war, nicht nur das Objekt angeben musste, um dies zur Arbeit zu bringen. Bei den oben genannten Kunden musste ich 'comboBox.SelectedValue = customerToSelect.id' verwenden. – AdamMc331

2

Ihre Bindung Code tun sollten Ist nicht vollständig. Versuchen Sie folgendes:

BindingSource bsCustomers = new BindingSource(); 
bsCustomers.DataSource = _customers; 

comboBox.DataBindings.Add(
    new System.Windows.Forms.Binding("SelectedValue", bsCustomers, "id", true)); 
comboBox.DataSource = bsCustomers; 
comboBox.DisplayMember = "name"; 
comboBox.ValueMember = "id"; 

In den meisten Fällen werden Sie diese Aufgabe im Designer erreichen können, statt es im Code zu tun.

Beginnen Sie mit dem Hinzufügen einer Datenquelle im Fenster "Datenquellen" in Visual Studio. Öffnen Sie es im Menü Ansicht> Andere Windows> Datenquellen. Fügen Sie eine Objektdatenquelle vom Typ Customer hinzu. In den Datenquellen sehen Sie die Eigenschaften des Kunden. Durch einen Rechtsklick auf die Eigenschaften können Sie das dazugehörige Standard-Steuerelement ändern.

Jetzt können Sie einfach eine Eigenschaft aus dem Datenquellenfenster in Ihr Formular ziehen. Visual Studio fügt Ihrem Formular automatisch eine BindingSource und eine BindingNavigator Komponente hinzu, wenn Sie das erste Steuerelement löschen. Das BindingNavigator ist optional und Sie können es sicher entfernen, wenn Sie es nicht benötigen. Visual Studio übernimmt auch die gesamte Verkabelung. Sie können es durch das Eigenschaftenfenster optimieren. Manchmal ist dies für Kombinationsfelder erforderlich.

Es gibt nur eine Sache in Ihrem Code zu tun hat: eine tatsächliche Datenquelle an die Bindungsquelle zuordnen:

customerBindingSource.DataSource = _customers; 
+0

Damit stürzt es ab comboBox.ValueMember = "id"; aus irgendeinem Grund? – mdc

+2

Ich empfehle Ihnen, die 'BindingSource' als Komponente zu Ihrem Formular im Designer hinzuzufügen (siehe' Data'-Bereich der 'Toolbox'). Dann können Sie alle diese Eigenschaften über das Eigenschaftenfenster festlegen. Es ist noch einfacher, wenn Sie eine Objektdatenquelle im Fenster 'Datenquellen' in VS definieren. Dann können Sie einfach die Felder aus diesem Fenster in Ihr Formular ziehen und der Bindedraht wird automatisch ausgeführt. Eine BindingSource und ein BindingNavigator werden automatisch eingefügt, wenn Sie dies tun. Dann können Sie den BindingNavigator sicher entfernen, wenn Sie ihn nicht benötigen. –

Verwandte Themen