Как использовать код для отмены редактирования ячейки DataGridView, похожего на поведение, когда пользователь нажимает клавишу Esc? - PullRequest
0 голосов
/ 14 октября 2019

Я хочу отменить редактирование ячейки DataGridView при проверке неправильного значения, аналогичного тому, что происходит, когда пользователь нажимает Esc .

Мой код, как показано ниже, но его поведение по-прежнему отличается от нажатия Esc .

private void dgvSPS_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
    DataGridView dgv = (DataGridView)sender;
    if (e.ColumnIndex == 0)
    {
        dgv.CurrentCell.Value = string.Empty;
        e.Cancel = true;
        dgv.EndEdit()
        return;
    }
}

Я хочу, чтобы поведение при проверке было неправильным, как нажатие Esc .

  1. очистить ячейку тока

  2. удалить новую строку (если текущая ячейка - новая строка)

  3. текущий фокус на ячейку последней строки

1 Ответ

0 голосов
/ 14 октября 2019

Вы можете использовать метод CancelEdit():

private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
    DataGridView dgv = (DataGridView)sender;

    // Just an example for a "wrong value".
    bool someCondition = (e.FormattedValue.ToString() == "c");
    if (someCondition)
    {
        dgv.CancelEdit();
    }
}

Обратите внимание, что для требования № 3 это вернет фокус только на ячейку, которая редактировалась, если этоновый рядЕсли этого недостаточно, и вы хотите сфокусироваться на предыдущей ячейке, несмотря ни на что, вы можете использовать что-то вроде этого: (немного странно, но работает)

// Don't forget the async modifier
//      ↓↓↓↓↓
private async void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
    DataGridView dgv = (DataGridView)sender;

    // Just an example for a "wrong value".
    bool someCondition = (e.FormattedValue.ToString() == "c");
    if (someCondition)
    {
        dgv.CancelEdit();
        await Task.Delay(50);
        dgv.CurrentCell = dgv[e.ColumnIndex, e.RowIndex];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...