Если вы хотите запретить пользователю покидать текущую ячейку, если он установил неправильное значение, установите e.Cancel = True
в событии CellValidating. Например, этот код останавливает пользователя, покидающего ячейку во втором столбце, если он не набрал число:
Private Sub dataGridView1_CellValidating(sender as Object, e as DataGridViewCellValidatingEventArgs e) Handles dataGridView1.CellValidating
'set cancel to true if colindex is 1 and TryParse returned false (not a number)
e.Cancel = (e.ColumnIndex = 1 AndAlso Not Int32.TryParse(e.FormattedValue.ToString(), Nothing)
End Sub
Чтобы очистить редактор ввода, вы должны понимать, что вы не редактируете ячейка, вы вводите в текстовое поле, которое рисуется в верхней части места, где находится ячейка. Концептуально, только одно текстовое поле редактора для каждой таблицы данных одновременно (и оно помещает его в любое место, соответствующее текущей ячейке). Элемент управления, который редактирует значение для текущей ячейки, следовательно, не имеет ничего общего с ячейкой, но является особенностью самой сетки и доступен dataGridView1.EditingControl
. Это возвращает элемент управления; это может быть любой вид элемента управления форм (текстовое поле, флажок, datepicker и т. д. c), который редактирует ячейку, поэтому EditingControl возвращает базовый класс Control. Элемент управления имеет свойство .Text
и метод .ResetText()
, поэтому мы можем очистить текстовое поле без необходимости его приведения (но если бы мы использовали средство выбора даты и т. Д. c, возможно, ему потребовалось бы преобразование перед, например, доступом к его значению) , Это может сбросить текстовое поле:
Private Sub dataGridView1_CellValidating(sender as Object, e as DataGridViewCellValidatingEventArgs e) Handles dataGridView1.CellValidating
If e.ColumnIndex = 1 AndAlso Not Int32.TryParse(e.FormattedValue.ToString(), Nothing) Then
e.Cancel = true
dataGridView.EditingControl.ResetText()
End If
End Sub