DataGridView.IsCurrentRowDirty
остается true
после того, как я передаю изменения в базе данных. Я хочу установить его на false
таким образом, это не инициировало RowValidating
когда это теряет фокус.
У меня есть a DataGridView
связанный с a BindingList<T>
. Я обрабатываю CellEndEdit
событие и сохраняет изменения в базе данных. После сохранения тех изменений я хотел бы DataGridView.IsCurrentRowDirty
быть установленным на true
, так как все ячейки в строке актуальны; однако, это установлено на false
.
Это вызывает проблемы для меня, потому что, когда строка действительно теряет фокус, это инициирует RowValidating
, в котором я обрабатываю и проверяю все три ячейки. Таким образом даже при том, что все ячейки допустимы, и ни один не грязен, это все еще проверит их всех. Это - отходы.
Вот пример того, что я имею:
void dataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
// Ignore cell if it's not dirty
if (dataGridView.isCurrentCellDirty)
return;
// Validate current cell.
}
void dataGridView_RowValidating(object sender, DataGridViewCellCancelEventArgs e)
{
// Ignore Row if it's not dirty
if (!dataGridView.IsCurrentRowDirty)
return;
// Validate all cells in the current row.
}
void dataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
// Validate all cells in the current row and return if any are invalid.
// If they are valid, save changes to the database
// This is when I would expect dataGridView.IsCurrentRowDirty to be false.
// When this row loses focus it will trigger RowValidating and validate all
// cells in this row, which we already did above.
}
Я прочитал сообщения, в которых было сказано, что я мог назвать форму Validate()
метод, но это вызовет RowValidating
стрелять, который является тем, чего я стараюсь избегать.
Любая идея, как я могу установить DataGridView.IsCurrentRowDirty
кому: true
? Или возможно способ предотвратить RowValidating
от ненужной проверки всех ячеек?
Пытались ли вы после сохранения данных в БД вызвать DataGridView1.EndEdit().