以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]复杂目录树筛选问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=21597)

--  作者:sunbrain
--  发布时间:2012/7/18 12:38:00
--  [求助]复杂目录树筛选问题
前一阵子在大家的帮助下,完成了负责目录树的编写,这个目录树是根据数据表自动生成的,但是对于nodemouseclick事件却带来了麻烦,我现在是这么而写的:

Dim Value()As String

Value = e.Node.FullPath.Split("\\")

Select Case e.Node.Level

    Case 0

        Tables("设备表").Filter =" "

End Select

\'如果点击的是第一层节点,那么就全部显示数据;相反如果点击的是其他的节点,那么就执行如下的筛选

 

 

Select Case  e.node.text

   

Case "动力设备"

    Tables("设备表").Filter = "[设备大类型] = \'动力设备\'"

Case "机械设备"

    Tables("设备表").Filter = " [设备大类型] = \'机械设备\' "

Case "停用"

Tables("设备表").Filter = " [使用状况] = \'停用\' "

Case "正在使用"

Tables("设备表").Filter = " [使用状况] = \'正在使用\' "

Case "未使用"

Tables("设备表").Filter = " [使用状况] = \'未使用\' "

 

End Select

 


这样也可以完成任务,但是数据表中的数据是变化的,这样的代码未必合适了,所以在此请大家帮助


 

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:管理项目10.zip


--  作者:hhbb
--  发布时间:2012/7/18 13:36:00
--  
Dim  flt1 As String
Dim Value() As String
Dim ls1 As New List(of String)
Value = e.Node.FullPath.Split("\\")
Dim vs1() As  String ={"所在部门","安装地点"}
Dim vs2() As String ={"设备大类型","设备小类型"}

Select Case e.Node.Level
    Case 0
        Tables("设备表").Filter =""
    Case Else
        Select Case  value(0)
            Case  "按部门","按设备类型"
               ls1.AddRange(iif(value(0) = "按部门",vs1,vs2))
                For n1 As Integer = 1 To value.Length-1
                    flt1+=" and " &  Ls1(n1-1) &  iif(n1=1," like \'" &  value(n1) & "%\'" ," = \'" & value(n1) & "\'")
                Next   
            Case "按设备标识"
                flt1 =" and 设备标识 =\'" & e.Node.Text & "\'"
        End Select
        Tables("设备表").Filter = flt1.substring(5)
End Select
[此贴子已经被作者于2012-7-18 13:43:03编辑过]

--  作者:程兴刚
--  发布时间:2012/7/18 14:44:00
--  

替换掉您的代码:

 

Dim s As String = e.Node.FullPath
Dim Values() As String
Values = s.split("\\")
Dim Filter As String
If Values.Length = 1
    Filter = ""
Else
    If Values(0) = "按设备标识"
        Filter = "[设备标识] = \'" & Values(1) & "\'"
    End If
    If Values(0) = "按设备类型"
        Filter = "[设备大类型] = \'" & Values(1) & "\'"
       
        If e.Node.Level > 1
            If Values(2) IsNot Nothing
                Filter = Filter & " and  [设备小类型] = \'" & Values(2) & "\'"
            End If
        End If
    End If
    If Values(0) = "按部门"
        Filter = "[所在部门] like \'" & Values(1) & "*\'"
        If e.Node.Level > 1
            If Values(2) IsNot Nothing
                Dim dr As DataRow = DataTables("设备表").find("[所在部门] = \'" & Values(1) & "\\" & Values(2) & "\'")
                If dr IsNot Nothing
                    Filter ="[所在部门] = \'" & Values(1) & "\\" & Values(2) & "\'"
                Else
                    dr = DataTables("设备表").find("[所在部门] = \'" & Values(1) & "\' and [安装地点] = \'" & Values(2) & "\'")
                    If dr IsNot Nothing
                        Filter = "[所在部门] = \'" & Values(1) & "\' and [安装地点] = \'" & Values(2) & "\'"
                    End If
                End If
            End If
        End If
    End If
End If
Tables("设备表").Filter = Filter


--  作者:程兴刚
--  发布时间:2012/7/18 15:08:00
--  
呵呵,楼主的目录树不规范,所以写代码也不能按规范一些的写法!
--  作者:sunbrain
--  发布时间:2012/7/18 23:50:00
--  
感谢hhbb和程斑竹的大力帮助,感谢你们为我提供思路,为这个纠结有段时间了,研究了很久,做的程序代码太复杂,还不能达到预期的效果,你们的都不错,认真学习中。