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

データグリッドの使用方法について多くの情報を提供していないので、いくつかの仮定を立てる必要があります。

ユーザーがデータグリッドから行を削除したときに「ソフト削除」を実行する場合は、行の削除を有効にする必要があります。これを行うには、に設定CanUserDeleteRowsTrueます。

データグリッドの行をバインドするために、ある種のデータバインディングを使用していると仮定します。行が削除されると、の基になるオブジェクトがItemsSourceそのコレクションから削除されます。INotifyCollectionChanged(のような)を実装するコレクションを使用するObservableCollection場合、それが発生するとイベントが発生します。

DeletionDateに設定することで、そのイベントをリッスンし、それに応じて基になるモデルオブジェクトを変更できますDateTime.Nowentities.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 に答える