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 шт):
Вам нужно обрабатывать событие OnCellEndEdit. В аргументах события Вы найдёте RowIndex (e.RowIndex). По нему Вы сможет получить остальные ячейки строки для проверки.
Если нужно получать данные на "лету", придётся стоит обратить внимание на OnCellBwginEdit и обработать что-то наподобие OnKeyPress.
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);
}
}