2013-06-14 7 views
2

내 응용 프로그램에 많은 "마스터/세부 정보"양식이 있습니다. TDBGrid 각 행은 항목의 몇 가지 핵심 값을 표시합니다. 그리드 아래에는 일반적으로 그리드에서 현재 선택된 항목의 전체 정보를 보여주는 "Detail Area"가 있습니다.델파이 5에서 DBGrid의 선택 변경을 감시하는 표준 방법은 무엇입니까?

현재 "AfterScroll"- 그리드 뒤의 TADOQuery를 듣고 있지만 너무 많은 이벤트가 발생하는 것 같습니다.

AfterScroll에 올바른 이벤트가 있습니까? 어떻게 지내니?

답변

4

데이터 인식 환경에서 "표준"방식은 GUI 컨트롤을 사용하는 것이 아니라 데이터 구성 요소를 사용하여 제어하는 ​​것입니다.

테이블 데이터 세트는 대부분 MasterSource (적절한 TDataSource 구성 요소에 링크 됨) 및 MasterFields 속성을 제공합니다. 이들을 사용하여 마스터 - 세부 관계에있는 데이터 집합을 연결합니다. 그런 다음 세부 격자 (또는 다른 데이터 인식 컨트롤)은 올바른 데이터 세트로 연결하는 데 관심이 있습니다.

편집 데이터 세트의
다른 종류 (예를 들어 TQuery, TADOQuery) 때때로 DataSource을 제공는 유사한 목적으로 사용합니다. 델파이 5 도움말에서 : "Set DataSource to automatically fill parameters in a query with fields values from another dataset."
그러나 더 많은 합병증이 있습니다 (도움말을 읽으면서 알 수 있습니다). 따라서 세부 데이터 집합에 TTable 또는 TADOTable을 사용하는 것이 좋습니다.

+0

저는 델파이 5를 사용하고 있으며, 단지 데이터 소스 인 MasterSource 속성을 보지 못했습니다. 그게 더 새로운 기능인가요? – Zalumon

+0

MasterSource와 DataSource가 동일하지 않습니다. 하지만 차이점은 사용중인 특정 구성 요소에 따라 다르기 때문에 도움말 파일을 참조하도록하겠습니다. - 물론 실험 해봐! :) 또한 MasterSource는 모든 데이터 세트 컨트롤에서 사용할 수 없습니다 (아마도 TQuery를 선택했을 것입니다). 델파이 5에서는 (도움말 파일에 따라) TADOTable, TClientDataSet, TIBTable, TTable에 있습니다. (내 대답 - ** ** ** 데이터 세트에 표시된대로) –

+0

@ Zalumon 추신 : 당신은 TQuery에서 DataSource를 시도 할 수 있지만 조심해야 할 몇 가지 사항이 더 있습니다. 다시 말하지만 도움말 파일을 참조하십시오. ;) –

1

'표준'방법이 있는지 모르겠지만 IMO AfterScroll은 괜찮습니다. 타이머를 사용하여 그리드를 스크롤하는 등 빠르게 컨트롤을 업데이트하지 못하도록합니다. 예 :

procedure TSomeForm.DataSetAfterScroll(DataSet: TDataSet); 
begin 
    if not DataSet.ControlsDisabled then begin 
    if ScrollTimer.Enabled then 
     ScrollTimer.Enabled := False; 
    ScrollTimer.Enabled := True; 
    end; 
end; 

procedure TSomeForm.ScrollTimerTimer(Sender: TObject); 
begin 
    ScrollTimer.Enabled := False; 
    UpdateGUI; 
end; 

나는 250-300ms의 간격을 즐겁게 느낄 것입니다.