【问题标题】:How to refence a DBGrid from another form如何从另一个表单引用 DATAGrid
【发布时间】:2016-10-04 02:02:00
【问题描述】:

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

【问题讨论】:

    标签: delphi dbgrid


    【解决方案1】:

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

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

    然后,在你创建了一个 TForm2 的实例之后,就这样做

    Form2.Grid := MainForm.DBGrid1;
    

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

    【讨论】:

    • 感谢您的建议。我试过了,它看起来有效。现在,在 form2 中,当主窗体中的 DBGrid 列被移动时,我需要做一些事情。在 MainForm 中我会使用 OnColumnMoved ...
    • 好吧,我已经回答了你原来的问题,所以如果你点击绿色的“勾号”图标接受它会很好。对于您的 OnColumMoved 事件,您给 Form2 一个具有相同参数签名的过程,在其中编写代码并将 MainForm.DBGrid1 的 OnColumnMoved 分配给它。
    【解决方案2】:

    有可能吗?

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

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

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

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

    【讨论】:

    • 我认为您原则上是对的,但我不知道从哪里开始寻找更好的方法。此外,在这种情况下,显示 DBGrid 列布局的辅助表单始终使用 DBGrid..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 2016-01-06
    • 2011-04-27
    相关资源
    最近更新 更多