[英]ado.net dirty records in dataset
我會盡力解釋。 我想跟蹤綁定到窗口(wpf)控件上的數據集行中的臟記錄。
工作正常。 可以說我開始編輯綁定到該dataSet中的dataTable的一些文本框。 將一個字符添加到文本框后,數據集被標記為臟。
但是,如果我再次刪除該字符(恢復原始值),則數據集仍然很臟。 我想要在將原始值恢復為dataSet之后變得不臟,因為實際上它不再臟了。
我是否需要調用任何方法,以便數據集可以從綁定字段或某些類似方法中重新計算臟記錄。 謝謝。
DataRow.CancelEdit()
要么
DataRow.RejectChanges()
要么
DataSet.RejectChanges()
可能會根據您的情況工作。
您需要保留原始實體集的副本以進行比較,並在實際需要知道是否臟的時候進行“ IsDirty”確定,而不是在數據更改時才做出“ IsDirty”確定,因此僅可能是臟的。
您可以檢查數據行的rowstate
屬性,如果已Modified
則可以比較Current
和Original
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.