1

假设我有下表:

CREATE TABLE EXAMPLETABLE (
     ID NUMBER(10,0) NOT NULL,
     DELETIONDATE DATE, 
     NAME VARCHAR2(100 CHAR) NOT NULL, 
     UNIQUE (DELETIONDATE, NAME));

如何从 WPF 中软删除项目DataGrid?软删除是下面的操作:

UPDATE EXAMPLETABLE 
SET DELETIONDATE = NOW()
WHERE ID = SOMEID;

我应该处理 KeyPress 事件吗?在我有一个保存按钮的表单中,我应该在调用之前做一些处理entities.SaveChanges()吗?

4

1 回答 1

2

你没有提供很多关于如何使用数据网格的信息,所以我必须做出一些假设。

如果您希望在用户从数据网格中删除一行时发生“软删除”,您需要启用行的删除。你可以通过设置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;
        }
    }
}
于 2012-02-16T12:31:04.270 回答