Как реализовать мягкое удаление в DataGridView

У меня есть DataGridView, привязанный к источнику данных объекта. Объект имеет свойство IsDeleted. Когда пользователь нажимает клавишу удаления, или нажимает кнопку удаления, или каким-либо другим образом удаляет строку, я хочу установить флаг "IsDeleted" вместо удаления строки. (Затем я хочу обновить datagridview).

Какая единственная точка контакта мне нужна для достижения такого поведения?

Я не хочу пытаться обрабатывать все пути пользователя по отдельности.


person DanielOfTaebl    schedule 12.09.2013    source источник
comment
removing строка будет сделана вашим кодом, поэтому просто удалите код, который это делает? Или вы больше не хотите, чтобы deleted row появлялось?   -  person King King    schedule 12.09.2013
comment
Удаление строки выполняется не моим кодом, а самим DataGridView. Обратимо удаленный объект будет удален фильтром.   -  person DanielOfTaebl    schedule 12.09.2013
comment
Вы можете запретить пользователю удалять любую строку в вашем datagridview, установив AllowUserToDeleteRows на false.   -  person King King    schedule 12.09.2013
comment
Но я хочу, чтобы они могли удалить строку, я просто хочу изменить способ удаления.   -  person DanielOfTaebl    schedule 12.09.2013


Ответы (1)


Вы можете обработать событие с UserDeletingRow по Cancel вручную и выполнить свое собственное deletion следующим образом:

private void dataGridView1_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e){
   e.Cancel = true;//Cancel the actual deletion of row
   //You can just hide the row instead
   e.Row.Visible = false;
   //Then set the IsDeleted of the underlying data bound item to true
   ((YourObject)e.Row.DataBoundItem).IsDeleted = true;
}

Вы только что сказали, что у вашего объекта есть свойство с именем IsDeleted, поэтому я полагаю, что оно называется YourObject, вам нужно привести DataBoundItem к этому типу, чтобы вы могли получить доступ к свойству IsDeleted и установить для него значение true. Это все.

person King King    schedule 13.09.2013
comment
Спасибо; но это не меняет поведение кнопки удаления. - person DanielOfTaebl; 13.09.2013
comment
@DanielOfTaebl Что delete button? Кнопка удаления твоя или какого-то navigation control? Вы имеете в виду, что row все еще удален/удален? - person King King; 13.09.2013
comment
Да, это был элемент управления навигацией по умолчанию; Такой эффект имеет элемент управления навигацией по умолчанию. - person DanielOfTaebl; 13.09.2013
comment
@DanielOfTaebl вы используете BindingNavigator? - person King King; 13.09.2013