以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  关于多选筛选树  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=130920)

--  作者:玩具人
--  发布时间:2019/2/11 21:01:00
--  关于多选筛选树
老师新年好!
请教一下,下边例子中,为什么CASE 2和CASE 3里,按年月筛选后的结果不是多选,而是只保留一个选项。
我想实现的结果是可以显示同一个联系人跨年度跨月份的记录。
比如,筛选后显示2018年11月和2019年1月的记录,
但以下代码筛选的结果只能显示其中一个月的记录,无法实现多选。

Dim trv As WinForm.TreeView = e.Sender
Dim flt As String

Dim ids As String
Dim nd0 As WinForm.TreeNode
Dim pd As WinForm.TreeNode
For Each nd0 In e.node.allNodes \'清除子节点的选中标记
    nd0.Checked = False
Next
pd = e.Node.ParentNode
Do While pd IsNot Nothing \'清除父节点的选中标记
    pd.Checked = False
    pd = pd.ParentNode
Loop
For Each nd0 In trv.AllNodes
    pd = nd0
    Do While pd IsNot Nothing
        If pd.Checked  Then
            If ids > "" Then
                ids= ids &  ","
            End If
            ids = ids & "\'" & nd0.name & "\'"
            Exit Do
        Else
            pd = pd.ParentNode
        End If
    Loop
Next

Dim Year As Integer = e.Node.DataRow("年")
Dim Month As Integer = e.Node.DataRow("月")
Dim d1 As Date = New Date(Year,1,1) \'取得该年的第一天
Dim d2 As Date= new Date(Year,12,31) \'取得该年的最后一天
Dim dm1 As Date= New Date(Year, Month, 1) \'取得该月的第一天
Dim dm2 As Date= new Date(Year, Month, Date.DaysInMonth(Year,Month)) \'取得该月的最后一天

For Each nd As WinForm.TreeNode In trv.AllNodes
    If nd.Checked Then
        If flt > "" Then
            flt = flt & " or "  \'注意用or而不是And
        End If
        
        Select Case nd.Level
            Case 0
                flt =  flt & "( 类型 = \'" & nd.DataRow("类型") & "\')"
            Case 1
                flt =  flt & "( 类型 = \'" & nd.DataRow("类型") & "\' And 联系人 = \'" & nd.DataRow("联系人") & "\')"
            Case 2
                flt  = flt & "( 类型 = \'" & nd.DataRow("类型") & "\' And 联系人 = \'" & nd.DataRow("联系人") & "\' AND 日期 >= #" & d1 & "# And 日期 <= #" & d2 & "# )"
            Case 3
                flt  = flt & "( 类型 = \'" & nd.DataRow("类型") & "\' And 联系人 = \'" & nd.DataRow("联系人") & "\' AND 日期 >= #" & dm1 & "# And 日期 <= #" & dm2 & "# )"
        End Select
    End If
Next

Dim T3 As WinForm.Table = e.Form.Controls("Table3")
T3.Table.Filter = flt

--  作者:有点蓝
--  发布时间:2019/2/11 21:24:00
--  
msgbox(flt) \'看看最后生成的条件是怎么样的?
--  作者:玩具人
--  发布时间:2019/2/11 22:55:00
--  

谢谢老师指导!

问题已解决。