2012-07-11 40 views
2

在我的窗體中,我有一個DataGridView綁定到一個具有DataSet作爲數據源的BindingSource。我還通過BindingSource綁定到DataSet中不同列的窗體上有一些TextField和ComboBoxes。這個想法是,DataGridView中選定行的列中的值反映在窗體上的其他控件中。也許我聽起來有點複雜,但連接TextFields以及綁定到數據集中的表的ComboBoxes相當容易。vb.net - 與BindingSource和不同的數據源的組合框

我的問題是,這次我想從數組中設置ComboBox中的項目,而不是從DataSet中的表中設置項目。這是我已經試過:

Me.ComboBox.DataBindings.Add(New System.Windows.Forms.Binding("SelectedValue",  Me.TblBindingSource, "ColumnName", True)) 

Dim ItemArray(2) As String 
ItemArray(0) = "" 
ItemArray(1) = "Default" 
ItemArray(2) = "User-set" 
ComboBox.DataSource = ItemArray 

現在,這似乎部分工作作爲組合框填充正確,我可以選擇一個值,並將其顯示在DataGridView中。但是當我更改DataGridView中的行時,它不會更新其選定值。列(「ColumnName」)是一個ComboBoxColumn,它以上面所示的方式獲取其項目列表,並且它可以按照預期工作。

如果不明確,我有幾個組合框與工作原理類似的功能,但它們綁定到數據表列如下:

Me.ComboBox1.DataBindings.Add(New System.Windows.Forms.Binding("SelectedValue", Me.Tbl1BindingSource, "WiDMethodX", True)) 
Me.ComboBox1.DataSource = Me.Tbl2BindingSource 
Me.ComboBox1.DisplayMember = "SomeColumn" 
Me.ComboBox1.ValueMember = "SomeColumn" 

如果它的事項,該數據集來自Access數據庫。

回答

3

SelectedValueValueMember屬性一起使用,但由於您的數組列表中沒有描述性字段,所以不起作用。

嘗試使用SelectedItem您綁定:

Me.ComboBox.DataBindings.Add(New Binding("SelectedItem", _ 
             Me.TblBindingSource, "ColumnName", True)) 
+0

謝謝,這似乎工作!但現在發生了一些奇怪的事情,當我在一行中選擇一個值,然後每次更改一行時,該列的值將被新選定的值覆蓋。如果我更改爲不相鄰的行,則不會發生這種情況! – joharei 2012-07-12 07:36:26

+0

實際上,我不必改變組合框中的值;如果我上下移動行,則組合框列中的值將更改爲最後一行的值。 – joharei 2012-07-12 11:23:04

0

我意識到這個問題是舊的,但我有我解決了類似的問題。我將組合框的文本屬性綁定到與我的組合框數據源的值成員或顯示成員相關的綁定源成員。確保填充數據表(用於綁定源和組合框數據源),並在組合框的數據綁定文本之前將組合框綁定到其數據源。

Dim dtForBindingSource as DataTable 
Dim bs as BindingSource 
Dim dtForComboBox as DataTable 

'Code to fill dtForBindingSource would go here 

bs.DataSource = dtForBindingSource 

'Code to fill dtForComboBox would go here 

ComboBox.DataSource = dtForComboBox 
ComboBox.DisplayMember = "ColumnToDisplay" 
ComboBox.ValueMember = "ColumnXYZ" 

'現在數據源已經存在,並且組合框已經建立,我做了數據綁定。

ComboBox.DataBindings.Add("Text", bs, "ColumnToDisplay") 
相關問題