DataGridView C# проверка на ввод данных в ячейке

Прошу помощи. Есть DataGridView и я пытаюсь реализовать проверку строки при вводе текста в ячейку. Пока нашел только как получать нажатые символы:

private void MyDataGridSpace_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        TextBox tb = (TextBox)e.Control;
        tb.KeyPress += new KeyPressEventHandler(tb_KeyPress);
    }

    void tb_KeyPress(object sender, KeyPressEventArgs e)
    {
        e.Handled = testingEnterChar(sender as TextBox, e.KeyChar);
    }

Но мне нужно получать целую строку в процессе набора для поиска и пока никак не найду решение.


Ответы (2 шт):

Автор решения: Streletz

Вам нужно обрабатывать событие OnCellEndEdit. В аргументах события Вы найдёте RowIndex (e.RowIndex). По нему Вы сможет получить остальные ячейки строки для проверки.

Если нужно получать данные на "лету", придётся стоит обратить внимание на OnCellBwginEdit и обработать что-то наподобие OnKeyPress.

→ Ссылка
Автор решения: aepot

tb.KeyPress += вы подписываетесь на событие, но не отписываетесь, это приведет к глюкам и утечкам памяти. Ну используйте свойство TextBox.Text.

Правильная реализация будет выглядеть вот так:

private DataGridViewTextBoxEditingControl currentEditingControl;

private void MyDataGridSpace_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    if (currentEditingControl != null)
    {
        currentEditingControl.KeyPress -= EditingControl_KeyPress;
        currentEditingControl = null;
    }
}

private void MyDataGridSpace_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    if (currentEditingControl == null && e.Control is DataGridViewTextBoxEditingControl tb)
    {
        currentEditingControl = tb;
        currentEditingControl.KeyPress += EditingControl_KeyPress;
    }
}

private void EditingControl_KeyPress(object sender, KeyPressEventArgs e)
{
    if (sender is DataGridViewTextBoxEditingControl tb)
    {
        e.Handled = testingEnterChar(tb.Text, e.KeyChar);
    }
}
→ Ссылка