可以反复更改Parent吗?

时间:2014-09-26 14:28:44

标签: delphi parent delphi-5 pagecontrol

我有一个带有五个标签的PageControl。其中三个选项卡有一个DBGrid,全部使用相同的列和DataSource。当用户点击标题I时,更改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;

这样做是否有不利之处?父母可以一次改变几十次。

2 个答案:

答案 0 :(得分:1)

是的,没问题。

只要您的DBGrid的所有者不是其中一个标签页,但是在拥有链中更高。否则,the destruction of tabsheet A could lead to the destruction of your DBGrid on tabsheet B

答案 1 :(得分:0)

如果您使用的是TClientDataset,您可以做得更好:在每个选项卡上放置一个网格并使用克隆(方法CloneCursor)来更改索引。 此时,您的DBGrids都不会指向相同的数据集,但每个数据集都指向自己的数据集,您可以根据自己的行为设置IndexName(或字段)。

这将更容易维护(如果你需要更多只是添加DBGrids,每个DBGrid都不会弄乱其他的)并且可扩展(如果你需要更多的索引,你只需要创建更多的克隆)。

主要的缺点是,如果你添加一个字段,它必须进入所有克隆,如果应用程序在不断发展,这可能是一个问题。

另一个(完全不同的)选项是查看CodeCentral - John Kaster上传了一个DBGrid,它允许您按标题排序。这是很长时间之前,但它应该仍然存在。它只适用于Client数据集。 但是,你可以改变它并在需要的地方添加你自己的数据集,我认为它带有源代码。 希望它有所帮助。