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

現在如何將組合框的Item設置爲列表中第一個以外的內容? 試過 comboBox.SelectedItem = someCustomer; ......和許多其他的東西,但到目前爲止,還沒有運氣...在與數據源綁定的組合框上設置SelectedItem

回答

9

你應該做

comboBox.SelectedValue = "valueToSelect"; 

comboBox.SelectedIndex = n; 

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

comboBox.Items [N] .Selected = TRUE;不爲我工作(可能是一個CF問題),但是SelectedValue,我以前嘗試過,但錯誤的價值。謝謝。 – mdc 2012-04-04 18:45:51

+0

我想指出的是,爲了讓我得到這個工作,我不得不指定作爲值成員的字段,而不僅僅是對象。所以在上述客戶的情況下,我不得不使用'comboBox.SelectedValue = customerToSelect.id'。 – AdamMc331 2015-07-21 15:42:59

2

你的綁定代碼不完整。試試這個:

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"; 

在大多數情況下,你可以在設計完成的,而不是在代碼中做這個任務。

首先在Visual Studio的「數據源」窗口中添加數據源。從菜單打開它查看>其他窗口>數據源。添加一個對象數據源Customer類型。在數據源中,您將看到客戶的屬性。通過右鍵單擊屬性,可以更改與其關聯的默認控件。

現在您可以簡單地將屬性從「數據源」窗口拖到窗體中。當您放棄第一個控件時,Visual Studio會自動將A BindingSourceBindingNavigator組件添加到您的窗體中。 BindingNavigator是可選的,如果你不需要它,你可以安全地移除它。 Visual Studio也完成所有的連線。你可以通過屬性窗口調整它。有時這對於組合框是必需的。

這裏只有一件事留在你的代碼來完成:指定一個實際的數據源綁定源:

customerBindingSource.DataSource = _customers; 
+0

因爲它在comboBox.ValueMember =「id」;因爲某些原因? – mdc 2012-04-04 17:51:38

+2

我建議你在設計器中將'BindingSource'作爲一個組件添加到你的表單中(參見'Toolbox'的'Data'部分)。然後,您可以通過屬性窗口設置所有這些屬性。如果你首先在VS中的'Data Sources'窗口中定義一個對象數據源,那更容易。然後,您可以簡單地將這個窗口中的字段拖到您的表單中,並自動完成綁定。如果您這樣做,則會自動插入「BindingSource」和「BindingNavigator」。然後,如果你不需要它,你可以安全地移除'BindingNavigator'。 – 2012-04-05 14:29:03

相關問題