2010-01-18 1 views
0

설명하려고합니다. 창 (wpf)의 컨트롤에 바인딩 된 데이터 집합 행에서 더티 레코드를 추적하려고합니다.ado.net 데이터 집합의 더티 레코드

잘 작동합니다. 그 dataSet의 dataTable에 바인딩 된 일부 텍스트 상자를 편집하기 시작한다고 가정 해 보겠습니다. 한 문자를 텍스트 상자에 추가하면 데이터 집합이 더티라고 표시됩니다.

그러나 다시 문자를 삭제하면 (원래 값 복원) 데이터 세트가 여전히 더럽습니다. 데이터 세트에 원래 값을 복원 한 후에는 더 이상 유효하지 않습니다. 왜냐하면 reallity에서는 더티가 아니기 때문입니다.

데이터 집합이 바인딩 필드 또는 유사한 aproach에서 더티 레코드를 다시 계산할 수 있도록 호출해야하는 메서드가 있습니까? 감사.

답변

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

1

데이터 경로의 rowstate 속성을 확인한 다음 ModifiedCurrentOriginal DataRowVersions의 값을 비교할 수 있습니다. 두 번째 변경으로 값이 원본과 동일하면 RejectChanges으로 전화 할 수 있지만 해당 행의 모든 ​​변경 사항은 거부됩니다. 데이터 세트는 행 단위 또는 표 단위 변경 만 유지하므로 동일한 값을 설정하더라도 모든 변경 사항이 변경되므로 각 필드를 수동으로 추적해야합니다.