2014-11-23 59 views
0

我有一个主表单,其中包含三个列表框和一个子表单。我想建立一个例程,它允许我切换子窗体和三个列表框之间的链接。这可能吗?或者我必须创建相同子表单的三个副本,并隐藏两个而另一个被激活?将表单链接到多个列表框

为了切实可行,我的表单将如下工作:子表单包含参与项目的人员的记录列表,他们的具体角色以及他们来自哪个内部团队。我想用三个列表框,以允许用户通过任何过滤这种形式:

(1)所有参与者都从某个球队来 (2)角色(职称)的所有参与者 (3)过滤器参赛者姓名

我在这里简短介绍如何重新链接子窗体上的过滤器,以便在用户从过滤器过滤到过滤器时从列表框更改为列表框。

在下面使用Krish的建议作为一个简单的测试,我正在尝试下面的代码,但在记录源行上得到编译错误消息,声明不可能找到方法或数据成员..不知道这是什么意思:

Private Sub lstRoles_AfterUpdate() 

Dim SQL_GET As String 
SQL_GET = "SELECT * from tblProjectGovernanceResources where ((role like '" & lstRoles.Value & "')" 
Me.frmProjectGovernanceResources.RecordSource = SQL_GET 

End Sub 
+1

请更具体地说明您想要实现的内容,表单应该如何表现。 – paulroho 2014-11-23 20:51:19

+0

我编辑了解释。谢谢 – 2014-11-23 21:22:09

+1

您可以将代码添加到每个列表框的'AfterUpdate'事件中。在代码中,创建所需的过滤器('WHERE'子句'),然后创建所需的SQL,并更新子窗体的RECORDSOURCE。即'select * from Table1 where MyID ='xxxx';' – 2014-11-23 22:18:55

回答

1

您可以从列表框中检索选定的值,只需通过listbox1.value。正如韦恩G指出的那样。你会在你的listbox_after_update事件中添加一个代码来更新你的子窗体的记录源。

类似:

dim SQL_GET as string 
sql_get = "SELECT * from tbl_myTAble where ((condition like '" & listbox1.value & "') OR (condition2 like '"& listbox2.value &"') OR (condition3_number like "& listbox3.value &")) 

me.mysubform.recordsource = sql_Get 

显然,你需要提高该按您的要求。 试试这个和更好的回答,产生你迄今为止编码的东西。

+0

这么简单,但userul。谢谢Krish。 – 2014-11-24 21:03:53

+0

克里希,我的赞美为一个梦幻般的职业生涯(我看着你的博客)..我正在寻找你的电子邮件地址,因为我想问你几个问题,我认为你可能会感兴趣,因为我认为我们的专业野心非常符合。我想知道,如果我们交换一些单词,你介意吗? Andrew [email protected] – 2014-11-24 21:05:30

+0

先生们,我尝试添加代码,但它在记录源上返回一条错误消息。我列在上面。 – 2014-11-24 21:25:03

1

我为最简单的版本创建了一些代码。这意味着你的所有列表框的'多重选择'属性设置为'无'(这意味着你不能选择列表中的多个项目,并且你不能通过再次单击它来“取消”一个项目。我的表单有三个列表框,一个子表单和两个按钮,其中一个按钮将清除所有列表框中的所有选择,另一个按钮适用于所有列表框。过滤器子窗体。

Option Compare Database 
Option Explicit 

'*** NOTE!!! THIS CODE ASSUMES YOU HAVE SET YOUR LISTBOX PROPERTY to 'NONE'. 

' IF YOU SET 'MULTI SELECT' To 'SIMPLE' or 'EXTENDED', you MUST use different code to find all selected items. 

Dim strWhereTeam  As String 
Dim strWhereRole  As String 
Dim strWhereParticipant As String 

Private Sub cmdClear_Click() 
' Clear all selections in all listboxes 
Dim i As Integer 
    For i = 0 To Me.lstParticipant.ListCount  'Deselect ALL rows in Listbox 
     lstParticipant.Selected(i) = False 
    Next i 
    For i = 0 To Me.lstRole.ListCount    'Deselect ALL rows in Listbox 
     lstRole.Selected(i) = False 
    Next i 
    For i = 0 To Me.lstTeam.ListCount    'Deselect ALL rows in Listbox 
     lstTeam.Selected(i) = False 
    Next i 
    strWhereTeam = "" 
    strWhereRole = "" 
    strWhereParticipant = "" 
    Me.MySubForm.Form.Filter = ""     ' Reste filter to NONE 
    Me.MySubForm.Form.FilterOn = False 
End Sub 

Private Sub cmdFilter_Click() 
'Build Filter (concatenate three selections) 
Dim strFilter As String 
    strFilter = "" 
    If strWhereTeam & "" <> "" Then 
     strFilter = strWhereTeam 
     If strWhereRole & "" <> "" Then 
      strFilter = strFilter & " AND " & strWhereRole 
      If strWhereParticipant & "" <> "" Then 
       strFilter = strFilter & " AND " & strWhereParticipant 
      End If 
     Else 
      If strWhereParticipant & "" <> "" Then 
       strFilter = strFilter & " AND " & strWhereParticipant 
      End If 
     End If 
    ElseIf strWhereRole & "" <> "" Then 
     strFilter = strWhereRole 
     If strWhereParticipant & "" <> "" Then 
      strFilter = strFilter & " AND " & strWhereParticipant 
     End If 
    ElseIf strWhereParticipant & "" <> "" Then 
     strFilter = strWhereParticipant 
    End If 

    If strFilter = "" Then 
     Me.MySubForm.Form.Filter = "" 
     Me.MySubForm.Form.FilterOn = False 
    Else 
     Me.MySubForm.Form.Filter = strFilter 
     Me.MySubForm.Form.FilterOn = True 
    End If 
End Sub 

Private Sub lstParticipant_Click() 
    strWhereParticipant = "[Participant] = '" & Me.lstParticipant.ItemData(Me.lstParticipant.ListIndex) & "'" 
    Debug.Print strWhereParticipant 
End Sub 

Private Sub lstRole_Click() 
    strWhereRole = "[Role] = '" & Me.lstRole.ItemData(Me.lstRole.ListIndex) & "'" 
    Debug.Print strWhereRole 
End Sub 

Private Sub lstTeam_Click() 
    If Me.lstTeam.MultiSelect <> 0 Then 
     MsgBox "You have set the 'Multi Select' property to either Simple or Extended. This code may not work!", vbOKOnly + vbCritical, "ListBox MultiSelect not 'None'" 
    End If 
    strWhereTeam = "[Team] = '" & Me.lstTeam.ItemData(Me.lstTeam.ListIndex) & "'" 
    Debug.Print strWhereTeam 
    'Simple_Code 
End Sub 

'' Sample code if set 'Multi Select' to 'Simple' or 'Extended' 
'Sub Simple_Code() 
' Dim var  As Variant 
' strWhereTeam = "" 
' For Each var In Me.lstTeam.ItemsSelected 
'  strWhereTeam = strWhereTeam & "[Team] = '" & Me.lstTeam.ItemData(var) & "' OR " 
' Next var 
' strWhereTeam = "(" & left(strWhereTeam, Len(strWhereTeam) - 4) & ")" 
' Debug.Print strWhereTeam 
'End Sub 
+0

谢谢韦恩。太棒了..当我有能量的时候,我会很快地经历这个。从一目了然看来,您似乎已经涵盖了我真正想要确定的一些重要概念。 – 2014-11-24 21:03:27

0

感谢!这没有这一切!

私人小组lstRoles_AfterUpdate()

昏暗SQL_GET作为字符串 SQL_GET = “SELECT * FROM tblProjectGovernanceResources其中([作用] = '” & lstRoles.Value & “')”

Me.frmProjectGovernanceResources.Form.RecordSource = SQL_GET

End Sub