2009-07-03 2 views
0

데이터 그램과 데이터가 무작위로 채워지는 콤보 박스가 있습니다. 그러나 새 데이터는 절대로 자동으로 표시되지 않습니다. 누군가는 컨트롤을 무효화하여 응용 프로그램에 다시 그리기를 강요하고 따라서 내용을 반복하고 컨트롤에 새 데이터를 채우라는 아이디어를 언급했습니다.C# Win Forms 자동 업데이트 컨트롤

누가 Windows Forms 응용 프로그램에서 자동 업데이트 컨트롤을 구현하는 가장 좋은 방법인지 알고 있습니까?

도움 크게 감사합니다.

답변

0

BindingSource를 사용하는 경우 BindingSource.ResetBindings 메서드가 도움이 될 수 있습니다.

0

데이터 바인딩을 사용한다고 가정 해 보겠습니다. 맞춤 개체에 데이터 바인딩을 사용합니까?

이 경우 클래스는 INotifyPropertyChanged 인터페이스를 구현해야합니다.

0

일반적으로 datagridview의 datasource 속성을 설정하면 datagridview가 자체를 무효화하고 다시 그릴 수 있습니다. 경우에 따라 datagridview.datasource = null을 먼저 설정 한 다음 데이터 소스를 다시 설정하여 업데이트해야 할 수도 있음을 상기합니다.

0

경우에 따라 컨트롤을 무효화해도 항상 작동하지는 않습니다. WM_PAINT (기본 Windows 메시지)는 메시지 큐의 가장 낮은 우선 순위 메시지 중 하나입니다. 따라서 Windows는 너무 자주 요청할 경우 페인트 요청을 무시합니다. (이것이 응답을 멈춘 응용 프로그램에서 테두리가있는 "흰색 창"이 나타나는 이유 중 하나입니다.) 이 문제를 피하려면 Application.DoEvents(); 으로 호출하면 요청을 포함하여 모든 이벤트를 처리하도록 큐가 강제로 실행됩니다.

0

응용 프로그램 외부의 데이터베이스에서 데이터로 채워지는 컨트롤에 대해 말하면 데이터베이스를 다시 쿼리하지 않으면 컨트롤이 데이터가 변경되었음을 알 수있는 방법이 없습니다.

반면 데이터 변경 자체를 수행하는 응용 프로그램이 있으면 INotifyPropertyChanged 인터페이스를 구현할 수 있습니다. 즉, PropertyChanged 이벤트를 사용할 수 있음을 의미합니다. 컨트롤이 반응하므로 무언가가 바뀌면 업데이트됩니다. 다음 페이지에는 이것을 구현하는 예제가 있습니다. http://www.codeproject.com/KB/cs/BindBetterINotifyProperty.aspx

+0

datagridview와 combobox는 XML 문서의 데이터로 채워집니다. 자동 업데이트가 가능하도록 INotifyPropertyChanged 인터페이스를 구현할 수 있습니까? – Goober

+0

XML 문서가 응용 프로그램 내에서 저장/생성 된 경우에만. 외부 소스에서 나온 것이라면 변경 사항을 적극적으로 모니터링해야합니다. XML 문서가 파일이면 FileSystemWatcher 컨트롤을 사용하여 주기적으로 수정되었는지 테스트 한 다음 컨트롤을 다시로드하여 컨트롤을 다시로드 할 수 있습니다. –

관련 문제