我會盡力解釋。 我想跟蹤綁定到窗口上的控件(wpf)的我的數據集行中的髒記錄。ado.net數據集中的髒記錄
它工作正常。比方說,我開始編輯綁定到dataSet中的dataTable的一些文本框。在我將一個字符添加到文本框後,數據集被標記爲髒。
但是,如果我再次刪除該字符(恢復原始值),數據集仍然很髒。 我想在將原始值恢復爲dataSet之後變得不髒,因爲在reallity中它不再髒。
是否有任何方法需要調用,以便數據集可以重新計算來自綁定字段的髒記錄或一些類似的方法。謝謝。
我會盡力解釋。 我想跟蹤綁定到窗口上的控件(wpf)的我的數據集行中的髒記錄。ado.net數據集中的髒記錄
它工作正常。比方說,我開始編輯綁定到dataSet中的dataTable的一些文本框。在我將一個字符添加到文本框後,數據集被標記爲髒。
但是,如果我再次刪除該字符(恢復原始值),數據集仍然很髒。 我想在將原始值恢復爲dataSet之後變得不髒,因爲在reallity中它不再髒。
是否有任何方法需要調用,以便數據集可以重新計算來自綁定字段的髒記錄或一些類似的方法。謝謝。
嗯,有事可做,只是想分享。到現在爲止還挺好。謝謝大家的答案,幫助我很多。下一步是將此功能構建到自定義控件中:)。
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++;
}
}
DataRow.CancelEdit()
或者
DataRow.RejectChanges()
或者
DataSet.RejectChanges()
可以在你的情況下工作。
您需要保留原始實體集的副本進行比較,並在您實際需要知道是否髒的地方進行「IsDirty」確定,而不是在數據發生更改的位置,因此只有可能變髒。
您可以檢查數據行的rowstate
屬性,如果Modified
然後比較Current
和Original
DataRowVersions中的值。如果第二次更改的值與原始值相同,則可以撥打RejectChanges
,但這會拒絕該行上的所有更改。您必須手動跟蹤每個字段,因爲數據集只保留每行或每個表的更改,並且任何更改都是更改,即使您設置了相同的值。
只是要詳細說明一點。 我需要這個功能來顯示「表單」上的指標,無論數據是否已經改變,在編輯的過程中,而不是之後,所以我想我需要運行檢查,每當綁定字段以任何方式改變。 – Wally 2010-01-18 00:38:38