Вы не предоставили много информации о том, как вы используете сетку данных, поэтому мне придется сделать некоторые предположения.
Если вы хотите, чтобы «мягкое удаление» происходило, когда пользователь удаляет строку из сетки данных, вам нужно разрешить удаление строк. Вы делаете это, устанавливая CanUserDeleteRows
в True
.
Я предполагаю, что вы используете какую-то привязку данных для связывания строк в сетке данных. При удалении строки базовый объект в ItemsSource
удаляется из этой коллекции. Если вы используете коллекцию, реализующую INotifyCollectionChanged
(например, ObservableCollection
), событие происходит, когда это происходит.
Вы можете прослушать это событие и соответствующим образом изменить базовый объект модели, установив для DeletionDate
значение DateTime.Now
. Затем вам нужно будет позвонить entities.SaveChanges()
, чтобы отправить это изменение в базу данных.
private void ReloadData()
{
var viewSource = (CollectionViewSource)this.FindResource("aTableViewSource");
var aTableRows = new ObservableCollection<aTable>
(
this.entities.aTable
.Where(fibra => !fibra.DELETIONDATE.HasValue)
.Take(10)
.ToList()
);
fibras.CollectionChanged += EventHandler;
fibrasViewSource.Source = aTableRows;
}
void EventHandler(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.Action == NotifyCollectionChangedAction.Remove)
{
foreach(var oldItem in e.OldItems)
{
((aTable)oldItem).DELETIONDATE = DateTime.Now;
}
}
}