Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何使用WPF数据网格和实体框架进行软删除?_.net_Wpf_Entity Framework 4_Datagrid_Savechanges - Fatal编程技术网

.net 如何使用WPF数据网格和实体框架进行软删除?

.net 如何使用WPF数据网格和实体框架进行软删除?,.net,wpf,entity-framework-4,datagrid,savechanges,.net,Wpf,Entity Framework 4,Datagrid,Savechanges,假设我有下表: CREATE TABLE EXAMPLETABLE ( ID NUMBER(10,0) NOT NULL, DELETIONDATE DATE, NAME VARCHAR2(100 CHAR) NOT NULL, UNIQUE (DELETIONDATE, NAME)); 如何从WPFDataGrid中软删除项目?软删除操作如下: UPDATE EXAMPLETABLE SET DELETIONDATE = NOW() WHERE

假设我有下表:

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;
我应该处理按键事件吗?
在我有一个保存按钮的表单中,在调用
entities.SaveChanges()
之前我是否应该做一些处理?

您没有提供很多关于如何使用datagrid的信息,因此我必须做出一些假设

如果希望在用户从datagrid中删除行时发生“软删除”,则需要启用行删除。您可以通过将
CanUserDeleteRows
设置为
True
来实现这一点

我假设您正在使用某种数据绑定来绑定datagrid中的行。删除行时,
itemsource
中的基础对象将从该集合中删除。如果使用实现
INotifyCollectionChanged
(类似)的集合,则在发生这种情况时会触发一个事件

您可以监听该事件,并通过将
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;
        }
    }
}
private void ReloadData()
{
var viewSource=(CollectionViewSource)this.FindResource(“aTableViewSource”);
var aTableRows=新的ObservableCollection
(
此文件为.entities.aTable
.Where(fibra=>!fibra.DELETIONDATE.HasValue)
.Take(10)
托利斯先生()
);
fibras.CollectionChanged+=EventHandler;
fibrasViewSource.Source=aTableRows;
}
void EventHandler(对象发送方,NotifyCollectionChangedEventArgs e)
{
if(e.Action==NotifyCollectionChangedAction.Remove)
{
foreach(e.OldItems中的var oldItem)
{
((aTable)oldItem).DELETIONDATE=DateTime.Now;
}
}
}