2014-09-26 4 views
1

다섯 개의 탭이있는 PageControl이 있습니다. 세 개의 탭에는 모두 동일한 열과 DataSource를 사용하는 DBGrid가 있습니다. 사용자가 제목을 클릭하면 IndexFieldNames를 변경하고 적절한 제목을 굵게 표시합니다. 현재 나는 내가 한 DBGrid를이 있고 PageControl OnChange 이벤트에 필요에 따라 부모를 바꿀 수 있다는 것을 나에게 발생했습니다 ...부모를 반복해서 바꿔도 되나요?

for i:=0 to dbg1.Columns..Count-1 do 
begin 
    dbg1.Columns[i].Title.Font.Style:=[]; 
    dbg2.Columns[i].Title.Font.Style:=[]; 
    dbg3.Columns[i].Title.Font.Style:=[]; 
end; 
dbg1.Columns[Column.Index].Title.Font.Style:=[fsBold]; 
dbg2.Columns[Column.Index].Title.Font.Style:=[fsBold]; 
dbg1.Columns[Column.Index].Title.Font.Style:=[fsBold]; 
tblCustomer.IndexFieldNames:=Column.Name; 

을하고 그러나입니다.

dgb1.Parent:=TabSheet1; 

또는

dgb1.Parent:=TabSheet2; 

이 일에 아래쪽이 있습니까? 학부모는 한 번에 수십 번 변경할 수 있습니다.

+1

'TPageControl' 대신'TTabset' 컨트롤이 필요합니다. – whosrdaddy

+0

단점은 깜박임입니다. – TLama

+2

다른 컨트롤 인 TTabControl이 아닙니까? –

답변

1

예. 문제가 없습니다.

DBGrid의 소유자가 해당 탭 시트 중 하나가 아니며 소유 체인에서 더 높습니다. 그렇지 않으면 the destruction of tabsheet A could lead to the destruction of your DBGrid on tabsheet B입니다.

+0

물론 whosrdaddy와 TLama의 의견이 못을 쳤습니다. – NGLN

+0

고마워, 나는 그걸로 어지럽 힐 것이다. PageControl이 원하는 대체품 이었기 때문에 TTabControl이 더 이상 사용되지 않고 사용되지 않을 것이라는 생각이 들었습니다. 나는 온라인으로 확인하고 내가 배울 수있는 것을 보게 될 것이다. – user2175495

+1

TPageControl은 TTabControl에서 파생되었습니다. 더 이상 사용되지 않는 것은 TTabSet ("Win3.1"팔레트에있는 것)입니다. –

0

TClientDataset을 사용하는 경우 더 나은 작업을 수행 할 수 있습니다. 각 탭마다 하나의 표를 사용하고 클론 (CloneCursor 메서드)을 사용하여 인덱스를 변경합니다. 그 시점에서 DBGrid는 모든 데이터 집합을 가리키는 것이 아니라 자신이 수행하는 작업에 따라 IndexName (또는 필드)을 설정하는 고유 한 데이터 집합을 가리 킵니다.

DBGrid를 추가하는 것이 더 필요하다면 각 DBGrid가 다른 DBGrid와 혼동되지 않고 확장 성이 뛰어납니다 (더 많은 복제본을 생성해야하는 인덱스가 더 필요할 경우).

주된 단점은 필드를 추가하면 모든 복제본에 들어가야한다는 것입니다. 응용 프로그램이 진화하면 문제가 될 수 있습니다.

또 다른 (완전히 다른) 옵션은 CodeCentral을 살펴 보는 것입니다. John Kaster는 DBGrid를 업로드하여 제목으로 주문할 수 있도록했습니다. 이것은 시간 전 이었지만 여전히 있어야합니다. 클라이언트 데이터 세트에서만 작동합니다. 그러나, 당신은 그것을 바꿀 수 있고 필요할 때마다 자신의 데이터 세트를 추가 할 수 있습니다. 소스 코드가 포함되어 있다고 생각합니다. 도움이 되길 바랍니다.