2010-01-18 67 views
0

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

它工作正常。比方說,我開始編輯綁定到dataSet中的dataTable的一些文本框。在我將一個字符添加到文本框後,數據集被標記爲髒。

但是,如果我再次刪除該字符(恢復原始值),數據集仍然很髒。 我想在將原始值恢復爲dataSet之後變得不髒,因爲在reallity中它不再髒。

是否有任何方法需要調用,以便數據集可以重新計算來自綁定字段的髒記錄或一些類似的方法。謝謝。

回答

1

嗯,有事可做,只是想分享。到現在爲止還挺好。謝謝大家的答案,幫助我很多。下一步是將此功能構建到自定義控件中:)。

 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++; 
      } 
     } 
1

您需要保留原始實體集的副本進行比較,並在您實際需要知道是否髒的地方進行「IsDirty」確定,而不是在數據發生更改的位置,因此只有可能變髒。

+0

只是要詳細說明一點。 我需要這個功能來顯示「表單」上的指標,無論數據是否已經改變,在編輯的過程中,而不是之後,所以我想我需要運行檢查,每當綁定字段以任何方式改變。 – Wally 2010-01-18 00:38:38

1

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

相關問題