2009-08-03 8 views
4

가 여기에 시나리오의 BindingSource에의 마지막지며 EndEdit 호출하기 때문에 모든 변경 실행 취소 :는 (데이터 집합 내에서 DataTable에 바인딩 된 BindingSource에 사용)

  1. 사용자는 새로운 주소록 접촉을 생성하는 것은, 처음과 마지막에 채워 데이터 바인딩 된 컨트롤의 이름입니다.
  2. 그는 처리기가 BindingSource.EndEdit() 이벤트를 호출하는 적용을 누릅니다.
  3. 그런 다음 실수가 있음을 알고 전자 메일 주소를 추가합니다.
  4. 그러나 적용을 누르면 유효성 검사가 실패 (유효하지 않은 전자 메일 형식)하므로 EndEdit()가 호출되지 않습니다.
  5. 그는 편집하지 않기로 결정하고 은 이벤트 핸들러가 BindingSource.CancelEdit()을 호출하는 취소 버튼을 누릅니다.
  6. 하지만, 오히려 전체 기록의 단지 제 1 및 제 성없이 이메일의 BindingSource에 대신 얻었다 제거 와 새 연락처로 되 돌리는 것보다.

마지막으로 EndEdit()가 호출 된 이후로 작업을 실행 취소 할 수있는 방법이 있습니까? 나는 CancelEdit()이 어떻게 작동했는지에 대한 인상을 받았다.

+1

나는 비슷한 문제가있어서, 당신이 이것에 대해 좋은 대답을 얻는 지 알아봐야 할 것입니다. 내 해결 방법은 EndEdit() DataRowView 개체에 직접 호출하는 것입니다. – overslacked

+0

DataRowView에서 호출하면 DataRowState는 어떻게 변경됩니까? 여전히 추가 되었습니까? 아니면 수정되었거나 변경되지 않았습니까? – Dov

답변

2

설명대로 DataTable은 레코드의 원본 및 현재 상태를 2 개만 유지합니다. 귀하의 요청에는 여러 주들이 필요합니다.

성공적인 것을 얻으려면 Apply (적용)에 대한 응답으로 데이터베이스 (예 : Adapter.Update (table))에 변경 사항을 플러시해야합니다. 그건 당신의 Current to Original을 장려하고 다음 Cancel은 그걸 되돌릴 수 있습니다.

귀하의 요구 사항과 일치하거나 그렇지 않을 수도 있습니다.

+0

맞아, 문제는 데이터가 데이터베이스에 유지되면 Adapter.Update() 만 호출한다는 것입니다. – Dov

+1

내가해야 할 일은 사용자가 편집 작업을 시작하기 전에 각 행을 자체 임시 복사본으로 유지하고 "취소"하면 행에 값을 다시 쓰는 것입니다. – Dov

관련 문제