2012-01-23 2 views
0

현재 내 응용 프로그램에서 그리드 행을 클릭하면 그리드 행 항목이있는 페이지의 컨트롤을 채 웁니다. 변경 사항을 저장하기위한 UPDATE 버튼이 있습니다. 그러나 컨트롤 값을 수정하지 않고 [업데이트] 버튼을 클릭하더라도 업데이트는 동일한 값으로 수행됩니다. 로그 테이블에 항목을 트리거합니다.양식 항목이 변경되지 않을 때 업데이트를 피하는 방법

컨트롤의 값이 그리드를 클릭 할 때로드되는 것과 다른 경우에만 업데이트를 호출하도록 폼을 만들 수 있습니까?

업데이트 : 응용 프로그램은 MVVM과 같은 패턴을 사용하지 않습니다. 뒤 따르는 구조는 UI를 제외하고는 폼을 획득하는 것이 매우 희박합니다. db 상호 작용 ADO.net. 그것은 내가 wpf에 새로운이 프로젝트 &조차에 가입 할 때 이미 건축되었다.

아무도 도와 줄 수 있습니까?

+0

MVVM과 같은 패턴을 사용하고 있습니까? 신청서의 디자인을 설명하십시오. –

+0

GridView의 ItemsSource가 바인딩되어 있습니까? –

+0

나는 데이터 그리드의 아이템 소스를 가지고있다.하지만 그리드 자체의 항목을 업데이트하지 않습니다. 텍스트 상자, 콤보 상자 등의 컨트롤을 별도로로드합니다. –

답변

0

이 작업을 수행하는 가장 쉬운 방법은 컨트롤에 핸들러를 추가하는 것입니다. 사용자 입력을받는 데 사용되며, 부울 속성 인 e.d를 설정합니다. RowWasEdited를 true로 설정합니다. 그런 다음 UPDATE 버튼 클릭 이벤트에서이 속성을 확인하고 필요한 조치를 취한 다음 false로 설정하십시오.

그러나 나는 이것보다 더 우아한 것이 있다고 확신합니다.

+0

솔루션이 작동하지만 여전히 "냄새"가납니다. 업데이트를 확인하기 위해 폼에 전용 부울을 유지하는 대신 비즈니스 엔터티 자체의 변경 사항을 추적하는 것이 더 좋습니다. –

2

그리드에 표시된 엔티티에 대한 변경 추적이 필요하다고 생각합니다. 업데이트가 실행될 때마다 엔티티의 상태를 확인하고 필요한 엔티티 만 업데이트합니다. 기본적으로 엔터티의 변경 사항을 추적하기 위해 속성 설정자 수준에서 가로 챌 필요가 있습니다. 생각해보십시오 :

  1. 엔티티 상태를 추적 할 수있는 몇 가지 기능이있는 기본 클래스를 사용하십시오. 매우 간단 : 부울 hasChanged 또는 더 복잡한 "Enum"이 추가, 수정 및 삭제되거나 무언가 있습니다.
  2. 이 기본 클래스에서 다른 엔티티 파생
  3. 특성 변형을 차단하는 공용 속성 및 전용 백킹 필드
  4. 작업 속성 변형 기본 클래스
  5. 에 부울 또는 열거에 저장에게 정보를 실행
  6. 업데이트는 그리드에 표시된 엔터티를 통해 사용자 루프에 의해 시작되고 변경 사항이있는 항목을 선택하여 데이터베이스로 보냅니다.

이에 대한 몇 가지 helpfull 이론은 수 있습니다 :

Change tracking on businees objects

Using Properties C# programming guide

ADO.NET Self Tracking Entities

내가 커플 링은 사용자 인터페이스 사이에 얼마나 밀접하게 질문에서 모른다 및 데이터베이스 (ADO.NET DataTables 또는 그 ...). 위에 제시된 아이디어는 사물의 "감 결합 (decoupling)"을 필요로합니다. 하지만, 응용 프로그램의 추가 기능을위한 좋은 기초이며 작업의 용이성, 명확한 프레임 워크, 향상된 유지 관리 및 성능 향상을 제공 할 수 있습니다.

관련 문제