Немедленное обновление DataSridView DataSource при изменении значения TextBox - PullRequest
0 голосов
/ 27 июня 2011

У меня есть простой DataGridView, который связан со списком бизнес-объектов (только с одним редактируемым полем на объект). Мне нужны любые изменения, которые пользователь вносит в значение (которое находится в DataGridViewTextBoxColumn), чтобы обновить связанный объект. То есть вызывать обновление для каждого нажатия клавиши тем же способом, который доступен при привязке обычного текстового поля и использовании опции «OnPropertyChanged».

Причина в том, что мне просто нужно включить кнопку «ОК» в форме, когда свойство связанного объекта «IsDirty» имеет значение true.

На различных веб-сайтах, по-видимому, ведутся многочисленные дискуссии о том, как сделать это для столбцов флажков, использовать событие CurrentCellDirtyStateChanged и вызвать CommitEdit. Я пробовал это, но у этого был неприятный побочный эффект очистки ячейки всего текста при первом нажатии!

Любая помощь высоко ценится, спасибо.

1 Ответ

0 голосов
/ 27 июня 2011

Похоже, что вы хотите, чтобы включить кнопку, как только пользователь начинает вводить в любой ячейке?Нужно ли обновлять DataSource до нажатия кнопки?

Если нет, то CurrentCellDirtyStateChanged должно работать нормально - просто не вызывайте метод CommitEdit, вместо этого установите кнопку втам включен.

Когда ячейка теряет фокус, изменения будут применены к DataSource - поэтому при нажатии кнопки вы сможете работать с правильными данными.


Я думаю, что, возможно, нашел решение - не уверен на 100%, так как у меня нет контроллера MVC, вам нужно подключить изменение IsDirty и посмотреть, как все это работает - я поставил точку останова в установщике свойств на своем DataSourceобъект, и он запускается со следующим кодом, а не без него, поэтому я думаю, что это работает.

Он просто использовал CurrentCellDirtyStateChanged и перечисление CurrentCellChange для параметра DataErrorContext.

void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
    dataGridView1.CommitEdit(DataGridViewDataErrorContexts.CurrentCellChange);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...