从另一个表单刷新所有子表单

Posted

技术标签:

【中文标题】从另一个表单刷新所有子表单【英文标题】:Refresh All Subform from Another Form 【发布时间】:2017-11-16 04:14:34 【问题描述】:

我有两种主要形式。一个是Dashboard,另一个是Edit

编辑后,我有一个重新打开仪表板的按钮。 它可以打开仪表板,但我希望它刷新该仪表板中的子表单。

【问题讨论】:

为什么需要刷新子表单?仪表板打开时应该是“新鲜的”。您的意思是仪表板保持打开状态而您只是想返回它? Froms!Dashboard.Requery 将刷新Dashboard 表单中的数据,如果它打开的话。如果它是关闭的,只需打开它,当前数据将被加载到其中。确保EDIT 表单中的数据已更新到数据库。如果没有,请使用Me.Rfresh 将表单中的更改保存到数据库中。在this link 中查找以引用子表单 或者你可以在再次打开之前关闭仪表板吗? 【参考方案1】:

此模块将刷新您传递给它的表单以及所有子表单。重新查询通常会重置所选项目,因此在我们重新查询之前,我们会保存当前记录。如果重新查询后记录不存在,它将优雅地返回顶部而不会出错。

Public Sub RefreshForm(ByRef theForm As Form)
    On Error GoTo ErrorHandling

    Dim thisRecord As Long
    thisRecord = theForm.CurrentRecord
    Echo False

    Dim childForm As Control
    For Each childForm In theForm.Controls
        If TypeOf childForm Is SubForm Then
            childForm.Requery
        End If
    Next

    With theForm
        .Requery
        .Recordset.Move thisRecord
    End With

ErrorHandling:
    Echo True
End Sub

要使用它,只需将其放在需要刷新的地方即可:

RefreshForm Me

【讨论】:

知道主表单的 simpleRequery 请求所有子表单(如果它们链接到主表单)?并且通过调暗thisRecord作为枚举(AcRecord),它幸运地得到了隐含的aLong!在Requery之后恢复表单位置的常用代码使用Bookmark属性。 您也不能依赖ControlType,因为并非所有控件都具有该属性(例如活动 x 控件)。更好用If TypeOf childForm Is Subform Then 感谢@ComputerVersteher,但我之所以写这个是因为在我的主表单上重新查询没有重新查询子表单。我的子表单将显示一个应该被过滤的条目,只有对子表单的显式重新查询才能使条目按预期过滤。它肯定与 main 相关联。 奇怪,因为它对我有用。 Mainform 是否绑定到查询?请修复代码中容易出错的部分(Dim thisRecord As LongandIf TypeOf childForm Is Subform,删除或改进错误处理程序,因为它只是在没有通知的情况下退出) @ComputerVersteher 错误处理程序的重点是确保 Echo 重新打开。这就是它所需要的。如果我删除了它,那么您可能会处于窗口不再更新的状态。【参考方案2】:

您不需要关闭并重新打开任何内容。任何打开的表单及其上的控件都可以从在任何地方运行的 VBA 代码中请求。它与子表单有点复杂。

要重新查询当前表单上的子表单控件:[SubformControlName].Requery

在当前表单的子表单控件中重新查询表单:[SubformControlName].Form.Requery

在当前窗体的子窗体中重新查询控件:[SubformControlName].Form.Controls("ControlName").Requery

要在应用程序的不同表单上执行上述任何操作,请以Forms![FormName]. 为前缀

示例:Forms![FormName].[SubformControlName].Form.Controls("ControlName").Requery

【讨论】:

以上是关于从另一个表单刷新所有子表单的主要内容,如果未能解决你的问题,请参考以下文章

如何从另一个表单刷新文本框? C#

重新查询或刷新无法更新打开表单上的子表单

当我从另一个表单调用方法时,控件不会更改颜色或文本

Zend Framework 调用表单作为表单中的子表单

MS Access 表单以更新多个表而无需子表单

如何从另一种形式调用多个方法C#