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

时间:2012-07-24 15:44:02

标签: vb.net datagridview

我有一个带有组合框的数据网格。现在我想要实现,如果在第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)。

如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

您需要使用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

答案 1 :(得分:0)

您可以将CurrencyManager类绑定到同一个集合。在ComboBox上,您可以使用DisplayMember属性仅显示所需的列。

简单示例:http://www.vb-tips.com/CurrencyManager.aspx