Я решил, что нужно изменить только цвет фона текущих ячеек, и начал использовать EditControl DataGridViewCell.
Чтобы захватить это, мне пришлось захватить EditControl (Type DataGridViewTextBoxEditingContorl) в событии DataGridView «EditControlShowing» и связать EditControl ячеек с локальной переменной формы, а затем добавить обработчик в событие TextChagned (поскольку Cells TextChanged не происходит до завершения редактирования). (Первая процедура).
После этого я могу изменить цвет ячейки, изменив EditControls BackColor, который изменяется немедленно. (Вторая процедура)
Мне нужно освободить EditControl для события DataGridViews CellEndEdit, чтобы повторно использовать мою личную переменную. (Третья процедура)
Я не проверял попытки изменить строку из-за изменения в использовании, но, похоже, она работает нормально. Я надеюсь, что это помогает любому с подобной проблемой. Если есть более эффективные способы сделать это, пожалуйста, дайте мне знать!
Private EditingControl As DataGridViewTextBoxEditingControl
Private Sub dgvMain_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles dgvMain.EditingControlShowing
If TypeOf (e.Control) Is DataGridViewTextBoxEditingControl Then
EditingControl = DirectCast(e.Control, DataGridViewTextBoxEditingControl)
If DirectCast(e.Control, DataGridViewTextBoxEditingControl).EditingControlDataGridView.CurrentCell.OwningColumn Is PartNumber Then
AddHandler EditingControl.TextChanged, AddressOf EditingControl_TextChanged
End If
End If
End Sub
Private Sub Error_Cell(ByVal [Error] As Boolean)
If [Error] Then
If EditingControl IsNot Nothing Then EditingControl.BackColor = Color.Red
Else
If EditingControl IsNot Nothing Then EditingControl.BackColor = Color.Empty
End If
Me.dgvMain.Refresh()
End Sub
Private Sub dgvMain_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvMain.CellEndEdit
If EditingControl IsNot Nothing Then
RemoveHandler EditingControl.TextChanged, AddressOf EditingControl_TextChanged
End If
EditingControl = Nothing
End Sub
Примечание: Множество шагов, которые у меня есть внутри If / Then, были удалены для защиты невинных, в противном случае они были бы встроены, когда это возможно.