1

我有一个带有五个选项卡的 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 事件中根据需要交换父级。

dgb1.Parent:=TabSheet1;

或者

dgb1.Parent:=TabSheet2;

这样做有不利的一面吗?一次可以更改数十次父级。

4

2 回答 2

1

是没有问题。

只要您的 DBGrid 的所有者不是这些选项卡表之一,而是在拥有链中更高。因为否则,标签表 A 的破坏可能会导致标签表 B 上的 DBGrid 的破坏

于 2014-09-26T14:55:58.430 回答
0

如果您使用的是 TClientDataset,您可以做得更好:在每个选项卡上有一个网格并使用克隆(方法 CloneCursor)来更改您的索引。那时,您的 DBGrid 将不会都指向同一个数据集,而是每个都指向自己的数据集,您可以在其中设置 IndexName(或字段,根据您正在执行的操作)。

这将更容易维护(每个 DBGrid 不会与其他 DBGrid 混淆,如果您需要更多,只需添加 DBGrid)和可扩展(如果您需要更多索引,您只需创建更多克隆)。

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

另一个(完全不同的)选项是查看 CodeCentral - John Kaster 上传了一个 DBGrid,它允许您按标题排序。这是很久以前的事了,但它应该还在那里。它只适用于客户端数据集。但是,您可以更改它并在需要的地方添加自己的数据集,我认为它带有源代码。希望能帮助到你。

于 2014-09-29T18:06:40.110 回答