/ / VB.NET datagrid - wykrywa zaznaczenie pola kombi i wybiera tę samą wartość w innej kolumnie - vb.net, datagridview

VB.NET datagrid - wykrywa wybór pola kombi i wybiera tę samą wartość w innej kolumnie - vb.net, datagridview

Mam siatkę danych z polami kombi. Teraz chcę to osiągnąć, jeśli on wybierze wartość x w kolumnie 0 wiersz 0, a następnie wartość pola kombi y w kolumnie 1 wiersz 0 zostanie automatycznie ustawiona na taką samą wartość jak x.

próbowałem

 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

Jednak nie działa natychmiast. Najpierw muszę wybrać wartość x (0,0), następnie kliknąć inną komórkę (5,5 lub coś innego), a następnie kliknąć ponownie komórkę x (0,0), aby y (1,0) zostało ustawione na x (0,0).

Jak można to rozwiązać?

Odpowiedzi:

2 dla odpowiedzi № 1

Musisz użyć EditingControlShowing zdarzenie, aby uzyskać dostęp do podstawowej kontrolki, a następnie dodać inną procedurę obsługi. Robi się jednak trochę bałagan.

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

0 dla odpowiedzi nr 2

Możesz być w stanie CurrencyManager klasa, aby powiązać obie kontrolki z tą samą kolekcją. Na ComboBox możesz użyć DisplayMember właściwość, aby wyświetlić tylko żądaną kolumnę.

Prosty przykład: http://www.vb-tips.com/CurrencyManager.aspx