2014-09-26 23 views
1

我有一個帶有五個選項卡的PageControl。其中三個選項卡有一個DBGrid,全部使用相同的列和DataSource。當用戶點擊標題時,我更改IndexFieldNames並加粗標題。目前我在做......可以反覆更換Parent嗎?

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; 

但是,它發生,我認爲我可以有一個DBGrid中,並根據需要在的PageControl OnChange事件交換父。

dgb1.Parent:=TabSheet1; 

dgb1.Parent:=TabSheet2; 

是否有不好的一面,以這樣做呢?父母一次可以改變幾十次。

+1

好像你需要'TTabset'控件而不是'TPageControl' – whosrdaddy 2014-09-26 14:34:14

+0

缺點是它會閃爍。 – TLama 2014-09-26 14:34:18

+2

是不是其他控件TTabControl? – 2014-09-26 17:45:15

回答

1

是的,沒問題。

只要您的DBGrid的所有者不是其中的一個tabheets,但是在擁有的鏈中更高。因爲,否則,the destruction of tabsheet A could lead to the destruction of your DBGrid on tabsheet B

+0

當然,來自whosrdaddy和TLama的評論都很有用。 – NGLN 2014-09-26 14:56:48

+0

謝謝,我會惹惱它的。我有這樣的想法,即TTabControl已被棄用,如果可能的話,不要使用,因爲PageControl是所需的替代品。我會在網上查詢,看看我能學到什麼。 – user2175495 2014-09-26 19:42:33

+1

TPageControl從TTabControl派生。什麼是不贊成的是TTabSet(「Win3.1」調色板中的一個) – 2014-09-26 19:47:30

0

如果您正在使用TClientDataset,則可以做得更好:每個選項卡上都有一個網格,並使用克隆(方法CloneCursor)更改您的索引。 此時,您的DBGrid不會全部指向相同的數據集,但每個數據集都有自己的數據集,您可以根據自己的設置設置IndexName(或字段)。

這將更容易維護(每個DBGrid不會與其他人混淆,如果您需要更多隻是添加DBGrids)和可擴展(如果您需要更多索引,您只需創建更多克隆)。

主要缺點是,如果添加一個字段,它必須進入所有克隆,如果應用程序正在發展,這可能是一個問題。

另一個(完全不同的)選項是看CodeCentral - John Kaster上傳了一個DBGrid,它可以讓你按標題排序。這是一個長的時間前,但它應該仍然在那裏。但它僅適用於客戶端數據集。 但是,你可以改變它並在需要的地方添加你自己的數據集,我認爲它附帶了源代碼。 希望它有幫助。

相關問題