vb.net - 带有BindingSource和不同DataSource的ComboBox

时间:2012-07-11 14:12:16

标签: database vb.net datagridview combobox bindingsource

在我的表单中,我有DataGridView绑定到BindingSource,其DataSetDataSource。我在表单上还有一些TextFields和ComboBoxes,它们绑定到DataSetBindingSource中的不同列。我们的想法是DataGridView中所选行的列中的值反映在表单上的其他控件中。也许我觉得它听起来有点复杂,但是连接TextFields以及绑定到数据集中的表的ComboBox都相当容易。

我的问题是,这次我要从数组中设置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

现在,这似乎部分有效,因为ComboBox已正确填充,我可以选择一个值,它会显示在DataGridView中。但是当我更改DataGridView中的行时,它不会更新其选定的值。列("ColumnName")是一个ComboBoxColumn,它按照上面显示的方式获取其项目列表,并且它会按预期工作。

如果不清楚;我有几个具有相似功能的ComboBox,但它们绑定到DataTable中的列,如下所示:

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"

如果重要,DataSet来自Access Database

2 个答案:

答案 0 :(得分:3)

SelectedValueValueMember属性一起使用,但由于您的数组列表没有描述性字段,因此无效。

尝试使用SelectedItem进行绑定:

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

答案 1 :(得分:0)

我意识到这些问题已经过时了,但我解决了类似的问题。我将组合框的text属性绑定到与我的组合框数据源的值成员或显示成员相关的绑定源成员。确保填充数据表(用于绑定源和组合框数据源)并在组合框组合文本之前将组合框绑定到其数据源。

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