Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.NET datagrid-检测组合框选择并在不同列中选择相同的值_Vb.net_Datagridview - Fatal编程技术网

VB.NET datagrid-检测组合框选择并在不同列中选择相同的值

VB.NET datagrid-检测组合框选择并在不同列中选择相同的值,vb.net,datagridview,Vb.net,Datagridview,我有一个带有组合框的datagrid。现在我想实现的是,如果on选择列0第0行中的值x,那么列1第0行中的组合框值y将自动设置为与x相同的值 我试过了 Private Sub dataGridView1_CellValidating(ByVal sender As Object, ByVal e As DataGridViewCellValidatingEventArgs) Handles Sched_Grid.CellValidating If Sched_Grid.CurrentC

我有一个带有组合框的datagrid。现在我想实现的是,如果on选择列0第0行中的值x,那么列1第0行中的组合框值y将自动设置为与x相同的值

我试过了

 Private Sub dataGridView1_CellValidating(ByVal sender As Object, ByVal e As DataGridViewCellValidatingEventArgs) Handles Sched_Grid.CellValidating
    If Sched_Grid.CurrentCell.ColumnIndex = 0 Then
        Sched_Grid(1, Sched_Grid.CurrentCell.RowIndex).Value = Sched_Grid(0, Sched_Grid.CurrentCell.RowIndex).Value
    End If
End Sub
然而,它并不能立即起作用。我必须首先选择一个值x(0,0),然后单击另一个单元格(5,5或其他),然后单击返回到x(0,0)单元格,以便将y(1,0)设置为x(0,0)


如何解决这个问题?

您需要使用
EditingControlShowing
事件访问底层控件,然后添加另一个处理程序。不过有点乱

Private Sub Sched_Grid_EditingControlShowing(ByVal sender as Object, Byval e as DataGridViewEditingControlShowingEventArgs) Handles Sched_Grid.EditingControlShowing
  If Sched_Grid.CurrentCell.ColumnIndex = 0 Then
    Dim selectedComboBox As Combobox = DirectCast(e.Control, ComboBox)
    RemoveHandler selectedCombobox.SelectionChangeCommitted, AddressOf selectedComboBox_SelectionChangeCommitted
    AddHandler selectedCombobox.SelectionChangeCommitted, AddressOf selectedComboBox_SelectionChangeCommitted
  End If
End Sub

Private Sub selectedComboBox_SelectionChangeCommitted(ByVal sender As Object, ByVal e As EventArgs)
  Dim selectedCombobox As ComboBox = DirectCast(sender, ComboBox)
  If selectedCombobox.SelectedItem IsNot Nothing Then
    Sched_Grid(1, Sched_Grid.CurrentCell.RowIndex).Value = selectedCombobox.SelectedItem
  End If
End Sub
您可能可以使用该类将两个控件绑定到同一个集合。在
组合框中
可以使用该属性仅显示所需的列


简单示例:

谢谢您的代码!事件正确激发,但selectedCombobox值仍然为空。我不够专业,无法在你的代码中找到错误。也许其他人看到了这个bug…@user670186,selectedCombobox是否有数据源?如果是,您是否指定了
ValueMember
?如果没有,请使用
selectedCombobox.SelectedItem
获取您的值。(您可能需要将其转换为正确的数据类型。)