Один из вариантов будет создать свой собственный класс CustomDataGridView, который наследуется от класса DataGridView
и переопределить соответствующие методы, такие как KeyDown, ProcessDialogKey и т.д.
Другой вариант заключается в использовании следующий код, который немного сложнее. Что он делает, это принуждение пользователя вставить действительные данные. Если введено неверное значение, текущая ячейка будет окрашена в красный цвет и вернется в режим редактирования. В этом примере допустим недопустимое значение: "InavlidValue"
.
Во-первых, добавить эти поля (нам нужно, чтобы они были разделены между различными событиями):
private bool colorCell = false;
private DataGridViewCell cell;
Добавить и присоединить эти события:
private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
// Here we check for the invalid value, and store the cell position for later use
if (e.FormattedValue.ToString() == "InvalidValue")
{
colorCell = true;
cell = dataGridView1[e.ColumnIndex, e.RowIndex];
}
}
private void dataGridView1_CellValidated(object sender, DataGridViewCellEventArgs e)
{
// When value is valid, change color back to normal
dataGridView1.CurrentCell.Style.BackColor = Color.White;
}
private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
// User inserted invalid value, color the cell and return to edit mode
if (colorCell)
{
dataGridView1.CurrentCell = cell;
dataGridView1.CurrentCell.Style.BackColor = Color.Red;
dataGridView1.BeginEdit(true);
colorCell = false;
}
}
Спасибо за ваш ответ. Но я делаю 'e.Cancel = true', если проверка не прошла. Таким образом, пользователь не сможет выйти из ячейки, поэтому событие «Selection_Changed» не будет удалено. – lbrahim
В моем примере он также вернется в режим редактирования, поэтому эффект будет таким же, как e.Cancel = true. Попробуй, я думаю, это то, что ты ищешь. – etaiso
Вы были правы. Ваше решение работает, но не полностью. Поскольку курсор переместится в следующую ячейку и не остается на ячейке, отмеченной как красная. – lbrahim