joharei
joharei

Reputation: 597

vb.net - ComboBox with a BindingSource and a different DataSource

In my form I have a DataGridView bound to a BindingSource that has a DataSet as DataSource. I also have some TextFields and ComboBoxes on the form that are bound to different columns in the DataSet through the BindingSource. The idea is that the values in the columns on the selected row in the DataGridView are reflected in the other controls on the form. Maybe I make it sound a bit complicated, but it's fairly easy to connect the TextFields, and also the ComboBoxes bound to tables in the dataset.

My problem is that this time I want to set the items in the ComboBox from an array and not from a table in the DataSet. This is what I've tried:

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

Now, this seems to work partially as the ComboBox is populated correctly, and I can select a value, and it appears in the DataGridView. But it doesn't update its selected value as I change rows in the DataGridView. The column ("ColumnName") is a ComboBoxColumn that gets its item list in the way shown above, and it seams to work as expected.

If it wasn't clear; I have several ComboBoxes with similar functionality that works, but they are bound to a column in a DataTable, as follows:

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"

If it matters, the DataSet comes from an Access Database.

Upvotes: 2

Views: 30995

Answers (2)

user3692405
user3692405

Reputation: 1

I realize this questions is old, but I had similar problem I resolved. I bound the text property of the combo box to the binding source member that relates to the value member or display member of my combo box datasource. Make sure that you fill your data tables (for binding source and combo box datasource) AND bind your combo box to its datasource prior to databinding text of combo box.

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"

'Now that datasources exist and combo box is set up I do databindings.

ComboBox.DataBindings.Add("Text", bs, "ColumnToDisplay")

Upvotes: 0

LarsTech
LarsTech

Reputation: 81610

SelectedValue is used in conjunction with the ValueMember property, but since your array list doesn't have descriptive fields, that won't work.

Try using SelectedItem for your binding:

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

Upvotes: 4

Related Questions