1

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

如何解决?

4

2 回答 2

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
于 2012-07-24T16:42:28.733 回答
0

您可能能够使用CurrencyManager类将两个控件绑定到同一个集合。ComboBox您可以使用DisplayMember属性仅显示您想要的列。

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

于 2012-07-24T18:04:35.027 回答