2012-07-11 113 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")