Я использую следующий код для обновления значения ячейки DataGridView. Это вызвано внутри обработчика события CellDoubleClick для DataGridView.
Проблема заключается в обновлении ячейки после нажатия на другую ячейку. Есть ли лучший способ сделать это?
string value = "";
if (_dataGrid1.CurrentRow.Cells[e.ColumnIndex].Value != null)
value = _dataGrid1.CurrentRow.Cells[e.ColumnIndex].Value.ToString();
FormEdit form = new FormEdit(value); // takes a string value
if (form.ShowDialog() == DialogResult.OK)
{
_dataGrid1.CurrentRow.Cells[e.ColumnIndex].Value = form.SourceText;
_dataGrid1.UpdateCellValue(e.ColumnIndex, e.RowIndex);
}
Некоторые имена переменных были изменены для защиты их личности
Я вернулся к проекту, что это на сегодня, и наш ответ был легким. Suspend/ResumeLayout было решением:
if (form.ShowDialog() == DialogResult.OK)
{
_dataGridView.SuspendLayout();
_dataGridView.CurrentRow.Cells[e.ColumnIndex].Value = form.TextBoxText;
_dataGridView.UpdateCellValue(e.ColumnIndex, e.RowIndex);
_dataGridView.ResumeLayout(true);
}
Это было для двойного щелчка по ячейке gridview и редактирования содержимого в модальной форме с помощью текстового поля.
Вызывает ли вызов _dataGrid1.CommitEdit проблему?
Попробуйте вызвать Refresh на элементе управления. Данные могут быть обновлены, но визуальное представление не может быть перерисовано до щелчка в другом месте.