我有一个带有五个选项卡的PageControl。其中三个选项卡有一个DBGrid,所有选项卡都使用相同的列和DataSource。当用户单击标题时,我会更改IndexFieldNames并将相应的标题加粗。目前我正在做。。。
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事件中根据需要交换Parent。
dgb1.Parent:=TabSheet1;
或
dgb1.Parent:=TabSheet2;
这样做有坏处吗?家长一次可以换几十次。
是的,没问题。
只要DBGrid的所有者不是这些选项卡中的一个,而是拥有链中的更高层。因为否则,表A的破坏可能会导致表B上DBGrid的破坏。
如果您使用的是TClientData集,您可以做得更好:在每个选项卡上有一个网格,并使用克隆(方法CloneCursor)来更改索引。在这一点上,DBGrids不会全部指向同一个数据集,而是每个数据集都指向自己的数据集,在那里您可以设置IndexName(或字段,根据您正在做的操作)。
这将更容易维护(如果您需要更多,只需添加DBGrids,每个DBGrid就不会干扰其他DBGrid)和可扩展性(如果需要更多索引,只需创建更多克隆)。
主要的缺点是,如果添加一个字段,它必须进入所有克隆,如果应用程序正在发展,这可能会成为一个问题。
另一个(完全不同的)选项是查看CodeCentral——John Kaster上传了一个DBGrid,可以让你按标题订购。这是很久以前的事了,但它应该还在。不过,它只适用于客户端数据集。然而,你可以改变这一点,并在需要的地方添加你自己的数据集,我认为这是源代码附带的。希望能有所帮助。