2010-06-12 98 views
3

我有用於構建frmSubForm過濾器的多個控件的frmParentForm。可以在子窗體數據加載前從父窗體設置子窗體上的過濾器

在frmParentForm_Load,我做(簡化的示例):

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

的問題是,在初始加載,似乎窗體負載第一次出現的,所以整個表被加載。

有沒有一種方法(在不同的事件可能)正確設置子窗體過濾器從父窗體所以它應用於子窗體初始數據加載之前? (子表單可以獨立存在,也可以作爲許多不同父表單的子表單存在(有時被過濾,有時不存在),所以我寧願不在子表單中插入一些複雜的黑客來完成此操作。)

回答

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 

這是當我跟蹤父窗體和子窗體的打開和載入事件時得到的。

fsubChild: Form_Open 
fsubChild: Form_Load 
frmParent: Form_Open 
frmParent: Form_Load 
+0

因此,基本上,**所有**子表單事件發生在父表單之前? – tbone 2010-06-12 23:00:57

+0

不確定所有情況,但如果事實證明這一切都不會感到驚訝。看看我的更新答案是否有幫助。 – HansUp 2010-06-13 01:00:52

相關問題