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 № 1Musisz 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