假设我有下表:
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()
之前做一些处理吗?
答案 0 :(得分: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;
}
}
}