如何从另一个表单引用 DBGrid

How to refence a DBGrid from another form

我有一个带有 DBGrid 的主窗体,还有一个带有 CheckListBox 的第二个窗体,它显示所有 DBGrid 列供用户选择。我需要在 Form2 中引用 MainForm 中的 DBGrid。 我希望这第二种形式能够处理连接到 dbdgrid 列的所有过程,以便我可以轻松地重用它。 那是个主意,但我没有找到传递 DBGrid 引用的方法。 可能吗?

Is it possible?

问题应该是有没有更好的方法来实现我想要的?

  • 如果 Form2 基本上使用不同形式的控件,是否可以维护?如果其他表单也需要保存对其他表单上的组件的引用怎么办?
  • 如果在不同的窗体上使用控件,一年内发现错误会有多难?
  • 这样的解决方案是否与 SOLID principles 匹配?

回答这些问题应该有助于您寻找不同的方法。

你应该考虑separate UI and business logicTDBGrid 似乎是一种从数据库中获取数据到您的应用程序的便捷方式,但它违反了 单一职责原则 ,因为它同时加载和显示数据。不要将其用作应用程序内的基本数据提供者。从更深的 UI 软件独立层执行 SQL 查询。将结果存储在容器中,并以您想要的所有方式以不同的形式显示它们。

回答您提出的问题,在您的 Form2 上定义一个 属性

TForm2 

[...]
private
  FGrid : TDBGrid
public
  property Grid : TDBGrid read FGrid write FGrid;

然后,在创建 TForm2 实例后,只需执行

Form2.Grid := MainForm.DBGrid1;

然后,在 Form2 上,您可以做任何您喜欢的有效更改 Grid,并且更改将对 MainForm.DBGrid1 进行。