簡體   English   中英

ado.net數據集中的臟記錄

[英]ado.net dirty records in dataset

我會盡力解釋。 我想跟蹤綁定到窗口(wpf)控件上的數據集行中的臟記錄。

工作正常。 可以說我開始編輯綁定到該dataSet中的dataTable的一些文本框。 將一個字符添加到文本框后,數據集被標記為臟。

但是,如果我再次刪除該字符(恢復原始值),則數據集仍然很臟。 我想要在將原始值恢復為dataSet之后變得不臟,因為實際上它不再臟了。

我是否需要調用任何方法,以便數據集可以從綁定字段或某些類似方法中重新計算臟記錄。 謝謝。

DataRow.CancelEdit()
要么
DataRow.RejectChanges()
要么
DataSet.RejectChanges()

可能會根據您的情況工作。

您需要保留原始實體集的副本以進行比較,並在實際需要知道是否臟的時候進行“ IsDirty”確定,而不是在數據更改時才做出“ IsDirty”確定,因此僅可能是臟的。

您可以檢查數據行的rowstate屬性,如果已Modified則可以比較CurrentOriginal DataRowVersions中的值。 如果第二次更改使值與原始值相同,則可以調用RejectChanges ,但這將拒絕該行上的所有更改。 您將必須手動跟蹤每個字段,因為數據集僅保留每行或每表更改,並且即使設置了相同的值,任何更改都是更改。

好吧,有什么工作了,只想分享。 到現在為止還挺好。 謝謝大家的回答,對我有很大幫助。 下一步是將此功能構建到自定義控件中:)。

        private bool dirty = false;
        private int currentRowIndex;

        void Products_RowChanged(object sender, System.Data.DataRowChangeEventArgs e)
        {
           currentRowIndex=ProductsViewSource.View.CurrentPosition;
            int i=0;
            foreach (object o in originalProducts[currentRowIndex].ItemArray)
            {
                if (o.Equals(restouranDataSet.Products[currentRowIndex].ItemArray[i]))
                    dirty = false;
                else
                {
                    dirty = true;
                    return;
                }
                i++;
            }
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM