如果在过滤后没有记录,如何使用VBA禁用Datagridview的过滤器?
这是我的第一次尝试:
<button (click)="toggleBackgroundColor()" ion-button [style.background-color]="hexColor">Click me!</button>
这是第二次尝试:
Private Sub Form_ApplyFilter(Cancel As Integer, ApplyType As Integer)
If Me.RecordsetClone.RecordCount = 0 Then
MsgBox ("Kein Datensatz gefunden. Filter wird entfernt.")
Me.Form.FilterOn = False
Me.Form.Requery
End If
End Sub
在第二个代码中,我得到错误3061.第一个代码&#34;工作&#34;,但最终不想要我。
由于:
我有3张表格。 MAIN,Sub1和Sub2。
在MAIN中有Sub1,Sub2和单个TextBox。 TextBox是调用&#34; psoudoID&#34;。 Sub1是一个普通的表格,用于显示不同记录集的详细信息,位于MAIN的顶部。 Sub1以下是Sub2。 Sub2是Datagridview。当用户点击Sub2上的记录集时,来自Sub2&#34;的ID将变为&#34;到psoudoID并从那里到Sub1。你明白?
现在的问题是,用户可以过滤Datagrid中的每一列以查找此处需要的记录集并显示上面的所有详细信息。但是当过滤后数据网格为空时,因此Sub2不能为psoudoID提供ID,因此Sub1不会在MAIN中显示更长时间。那个地方的屏幕是空的。通过单击网格中的过滤器按钮,再次在屏幕上显示Sub1。
我想通过点击&#34; Ok&#34;来禁用过滤器。一个MsgBox或自动,而不是通过单击gridview上的过滤器按钮。
我希望你能理解我的描述。抱歉我的英语不好: - )
THX。
Vegeta
答案 0 :(得分:0)
我相信您在使用过滤器Null
时遇到问题,并且在实际应用过滤器之前使用Me.Filter。此外,将对象重新分配给自己的属性/成员之前已经给我带来了问题,所以我尽量避免这样做。
以下内容应该有效:
Dim strOldFilter As String
Private Sub Form_ApplyFilter(Cancel As Integer, ApplyType As Integer)
Me.TimerInterval = 50
strOldFilter = Nz(Me.Filter, "")
End Sub
Private Sub Form_Timer
Me.TimerInterval = 0
If Me.Filter = strOldFilter Then Exit Sub
Dim rs As DAO.Recordset
Dim strFilter As String
strFilter = Nz(Me.Filter, "")
If strFilter = "" Then
'Handle this specific scenario
Exit Sub
End if
Set rs = Me.RecordsetClone
rs.Filter = Replace(strFilter, "[Tabelle1].", "")
Dim rsf as DAO.Recordset
Set rsf = rs.OpenRecordset
If rsf.EOF Then
Me.Filter = strOldFilter
End If
End Sub
注意如果更改过滤器导致0个记录到另一个过滤器导致0个记录,则可能导致每50毫秒重复一次的无限循环(但是如果过滤器导致0个记录,则不应该功能有效)