如何使用私有数据模块与全局实例

how to use a private datamodule vs the global instance

我的框架有一个数据模块,它使用一个全局实例。(dmData) 数据组件 linked 到 dmData 实例上的数据源

现在我想使用框架私有的数据模块实例,因为我希望同时显示包含框架的多个表单实例。

我不知道如何在代码或设计中做到这一点。

在框架中,我将数据模块创建为 dmLocalData := tdmData.Create(self),但在设计中我没有选择 link dmLocalData,只能选择 link 到 dmData(所以我所有的数据控件都是空白的(除了具有在代码中设置的本地数据源的那个)

我的意思是,在代码中,我可以一个一个地手动检查每个组件并更改数据源,但认为确实必须有更好的方法,维护起来会非常可怕。

关于更好的方法有什么想法吗?

实际上有一种方法可以避免 hand-wiring 动态创建的数据模块的控件。简而言之 - 像这样覆盖数据模块 CreateNew 构造函数:

constructor TMainDM.CreateNew(AOwner: TComponent; Dummy: Integer);
begin
  Dummy := -1;
  inherited;
end;

这避免了数据模块的多个实例获得不同的名称,因此引用按预期解析。由于数据模块无论如何都是框架私有的,因此它们不需要具有全局唯一的名称。

可以在这两篇文章中找到更长更详细的解释,它们使用非常相似的任务作为示例:

Tweaking DFM Loading (update)

Tweaking DFM Loading