2014-04-07 57 views
0

我有一個填充組合框,我想綁定到Integer。
想要的行爲是當數據源更改爲新對象時,組合框選定值將相應地更改爲綁定到它的整數。VB.net DataBindingSource:將Integer綁定到Combobox中

問題是,默認綁定(我簡單地拖動和從數據源pannel拖放整個組合框)將綁定組合框的文本屬性,而不是SelectedIndex。

現在我還挺使它以這種方式工作:

BindingSourceName.DataSource = Object 
cmbType.SelectedIndex = Object.Type 

但我必須手動管理它也同時節省了在用戶修改綁定的對象。
有沒有適當的方法來改變默認的bindig bahaviour,使其自動綁定Integer到我的ComboBox的SelectedIndex?

回答

1

最接近我能達到你想要的是如果我使用ValueMember索引。例如:

我填補我的組合框,像這樣一對夫婦項目:

Public Class NameValue 
Property Name as String 
Property Type as Integer 
Public Sub New(ByVal pName as String, ByVal pVal as Integer) 
Name = pName 
Type = pValue 
End Sub 
End Class 

Dim cmbList As New List(Of NameValue) 
cmbList.Add(New NameValue("Name",1) 
cmbList.Add(New NameValue("Name2",2) 
cmbList.Add(New NameValue("Name3",3) 

cmbType.Items = cmbList 
cmbType.ValueMember = "Value" 
cmbType.DisplayMember = "Type" 

現在第一階段已經完成。 Combobox包含三個名稱和值綁定在一起的項目。下一步是設置你所要求的:將ComboboxValue綁定到Object類。

cmbType.DataBindings.Add(New Binding("SelectedValue", BindingSourceName, "Type", False, DataSourceUpdateMode.OnPropertyChanged)) 

只要BindingSource「BindingSourceName.DataSource」發生更改,應更新組合框。如果您更改組合框,Object.Type將更改爲選定的值。

+0

那麼,obv這不能編譯(cmb.Items是隻讀等),但該方法似乎工作。我用一個字典(這是一個vb.net標準)替換了自定義類,並使用SelectedIndex更改了綁定中指定的屬性。而不是項目= ...這是不可行的我用cmbType.DataSource =新的BindingSource(cmbTypeItems,無),從cmbTypeItems,這是我的字典中的鍵值。最後一個問題是:它似乎工作,是否有兩個綁定在同一控件上處於活動狀態是正確的? – DkSw

+0

對不起,項目是數據源。 – WozzeC

+1

我不能看到有兩個綁定的任何問題,因爲他們是兩個不同的東西。一個綁定用於內容,一個綁定用於值(在這種情況下爲索引)。 – WozzeC