2014-04-25 3 views
0

사용자 정의 개체 인 DomainModel.Member에 바인딩 된 MemberBS라는 바인딩 소스에 바인딩 된 컨트롤이있는 winform이 있습니다. 구성원 개체는 구성원이라고하는 SQL Server 데이터베이스의 테이블에 바인딩됩니다.winform 컨트롤을 새로 고치면 데이터 소스가 변경된 후 바인딩 소스에 바인드 된 바인딩 소스에 바인딩됩니다.

양식의 컨트롤 중 4 개의 텍스트 상자가 있는데, 다음과 같이 바인딩됩니다.

 DuesOwingCE.DataBindings.Add("Text", MemberBS, "DuesOwing", true, DataSourceUpdateMode.OnPropertyChanged); 
     InitOwingCE.DataBindings.Add("Text", MemberBS, "InitOwing", true, DataSourceUpdateMode.OnPropertyChanged); 
     OtherOwingCE.DataBindings.Add("Text", MemberBS, "OtherOwing", true, DataSourceUpdateMode.OnPropertyChanged); 
     AmountOwingCE.DataBindings.Add("Text", MemberBS, "AmountOwing", true, DataSourceUpdateMode.OnPropertyChanged); 

사용자가 트랜잭션을 입력하기 위해 버튼을 클릭합니다. 현재 편집중인 멤버의 멤버 객체를 대화 상자로 전달합니다. 사용자는 구성원에 대한 트랜잭션을 입력 한 다음 저장을 클릭합니다. 저장 단추는 CalculateOwing이라는 메서드를 호출합니다. 이 메소드는 멤버에 대한 회비, 개시, 기타 및 총 청구 금액을 다시 계산하고 멤버 오브젝트를 저장하며,이 멤버 오브젝트는 저장을 기본 데이터 소스로 커밋합니다.

거래 양식이 닫히고 사용자가 회원 양식으로 돌아갑니다. 이제 텍스트 상자를 업데이트하여 새 잔액이 표시되도록하는 방법은 무엇입니까? MemberBS.ResetBindings (false) 시도했지만 그 doesnt 작동합니다.

는 데이터 소스로부터 객체를 다시 재 장전 할 수있는 유일한 솔루션

MemberBS.DataSource = Repository.GetMember (socSecNo);

또는 더 좋은 것이 있습니까?

답변

0

컨트롤이 바인딩 소스의 동적 변경 사항을 자동으로 반영하도록하려면 클래스가 적절한 속성 변경 알림을 제공해야합니다. ExampleINotifyPropertyChanged을 구현하는 클래스를 만드는 방법을 보여줍니다. 개념은 this을 참조하십시오.

구현되면 인터페이스는 비즈니스 개체의 속성 변경 내용을 바인딩 된 컨트롤과 통신합니다.

0

이것은 아주 오래된 스레드입니다 ... 개인적으로 저는 Invoke 호출에서 bindingsource.ResetBindings (false)를 사용하여 컨트롤을 새로 고칩니다. 예를 들어

:

if (InvokeRequired) 
{ 
    this.Invoke(new Action(()=>this.bindingSource.ResetBindings(false))); 
} 
else 
{ 
    this.bindingSource.ResetBindings(false); 
} 
관련 문제