DataGridView.IsCurrentRowDirty
остается true
после того, как я фиксирую изменения в базе данных. Я хочу установить false
, чтобы он не срабатывал RowValidating
при потере фокуса.
У меня есть DataGridView
, привязанный к 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
всех ячеек?