可以在加载子表单数据之前从父表单设置子表单的过滤器

时间:2010-06-12 13:07:02

标签: ms-access

我有frmParentForm,其中有多个控件用于为frmSubForm构建过滤器。

在frmParentForm_Load上,我正在做(简化示例):

Me.sbfInvoice_List.Form.filter = "[created_on] >= #" & Me.RecentOrderDateCutoff & "#"
Me.sbfInvoice_List.Form.FilterOn = True

问题是,在初始加载时,似乎首先发生子窗体加载,因此加载整个表。

是否有办法(在不同的事件中可能)从父窗体正确设置子窗体过滤器,以便在子窗体初始数据加载之前应用它? (子表单可以单独存在,也可以作为许多不同父表单的子表单(有时是过滤的,有时不是),所以我宁愿不在子表单中加入一些复杂的hack来实现这一点。)

1 个答案:

答案 0 :(得分:2)

由于子窗体在父窗体之前加载,因此父窗体在初始加载子窗体之前无法设置子窗体过滤器。

如果你想灵活使用子表单(单独使用所有记录,但不同父表单中包含不同的记录子集),我认为你必须修改子表单才能完成。

Private Sub Form_Open(Cancel As Integer)
    Dim strParent As String
    Dim strMsg As String

On Error GoTo ErrorHandler

    strParent = Me.Parent.Name
    Select Case strParent
    Case "frmYourParentForm"
        'set filter to only records from today '
        Me.Filter = "[created_on] >= #" & Date() & "#"
        Me.FilterOn = True
    Case "frmSomeOtherParent"
        'do something else '
    End Select

ExitHere:
    On Error GoTo 0
    Exit Sub

ErrorHandler:
    Select Case Err.Number
    Case 2452
        'The expression you entered has an invalid reference to '
        'the Parent property. '
        Resume Next
    Case Else
        strMsg = "Error " & Err.Number & " (" & Err.Description _
            & ") in procedure Form_Open"
        MsgBox strMsg
    End Select
    GoTo ExitHere
End Sub

编辑:如果要跟踪父表单和子表单中的事件序列,可以将类似这样的过程添加到表单的模块中。

Private Sub Form_Load()
    Debug.Print Me.Name & ": Form_Load"
End Sub

以下是我跟踪父表单和子表单的Open和Load事件时得到的结果。

fsubChild: Form_Open
fsubChild: Form_Load
frmParent: Form_Open
frmParent: Form_Load