Foxtable(狐表)用户栏目专家坐堂 → 目录树


  共有8619人关注过本帖树形打印复制链接

主题:目录树

美女呀,离线,留言给我吧!
采菊东篱下
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/2/19 16:44:00 [显示全部帖子]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:小区车辆管理21901.foxdb

密码:888888
现在目录树已显示正常了,红色标注的字节筛选代码有问题。
'方法二:
Dim trv As WinForm.TreeView = e.Sender
Dim flt As String
If trv.Nodes(0).Name = e.Node.Name
    If e.Node.Checked
        For Each nd As WinForm.TreeNode In trv.AllNodes
            nd.Checked  = False
        Next
        e.Node.Checked = True
    Else
        flt = "1=2"
    End If
Else
    trv.Nodes(0).Checked = False
End If
If trv.Nodes(0).Name = "月租停车" Then
    Dim nms As String() = {"月租停放","住址_巷","住址_号","住址_房","户主姓名","手机号码","车牌号码"} '指定生成目录树的各列
    Dim qts As String() = {"'","'","","","'","'","'"} '指定将各列的值括起来的符号,这里都是字符型,所以都是单引号
    Dim n As WinForm.TreeNode = e.Node.ParentNode
    Do While n IsNot Nothing '取消父节点的选中标记,因为选中子节点,就不要选中父节点了
        n.Checked = False
        n = n.ParentNode
    Loop
    For Each nd As WinForm.TreeNode In e.Node.AllNodes
        nd.Checked  = e.Node.Checked
    Next
    Do While n IsNot Nothing
        Dim chhh As Boolean = True
        For Each nd As WinForm.TreeNode In n.AllNodes
            If nd.Checked = False Then
                chhh = False
                Exit For
            End If
        Next
        n.Checked = chhh
        n = n.ParentNode
    Loop
    If e.node.Checked = False Then '去除当前字节选勾
        Do While n IsNot Nothing
            n.Checked = False '去掉父节点选中状态
            n = n.ParentNode
        Loop
    End If
    For Each nd As WinForm.TreeNode In trv.AllNodes
        If nd.Checked  Then
            Dim rts() As String = nd.FullPath.Split("\")
            Dim val As String = ""
            For i As Integer = 0 To rts.length - 1
                If val > "" Then
                    val = val & " And "
                End If
                val = val & nms(i) & " = " & qts(i) & rts(i) & qts(i)
            Next
            If flt > "" Then
                flt = flt & " Or (" & val & ")"
            Else
                flt = val
            End If
        End If
    Next
ElseIf trv.Nodes(0).Name = "临时停车" Then
    Dim nms1 As String() = {"临时停车","年","月","车牌号码"} '指定生成目录树的各列
    Dim qts1 As String() = {"'","#","#","'"} '指定将各列的值括起来的符号,这里都是字符型,所以都是单引号
    Dim n1 As WinForm.TreeNode = e.Node.ParentNode
    Do While n1 IsNot Nothing '取消父节点的选中标记,因为选中子节点,就不要选中父节点了
        n1.Checked = False
        n1 = n1.ParentNode
    Loop
    For Each nd1 As WinForm.TreeNode In e.Node.AllNodes
        nd1.Checked  = e.Node.Checked
    Next
    Do While n1 IsNot Nothing
        Dim chhh As Boolean = True
        For Each nd1 As WinForm.TreeNode In n1.AllNodes
            If nd1.Checked = False Then
                chhh = False
                Exit For
            End If
        Next
        n1.Checked = chhh
        n1 = n1.ParentNode
    Loop
    If e.node.Checked = False Then '去除当前字节选勾
        Do While n1 IsNot Nothing
            n1.Checked = False '去掉父节点选中状态
            n1 = n1.ParentNode
        Loop
    End If
    For Each nd1 As WinForm.TreeNode In trv.AllNodes
        If nd1.Checked  Then
            Dim rts1() As String = nd1.FullPath.Split("\")
            Dim val1 As String = ""
            For i1 As Integer = 0 To rts1.length - 1
                If val1 > "" Then
                    val1 = val1 & " And "
                End If
                val1 = val1 & nms1(i1) & " = " & qts1(i1) & rts1(i1) & qts1(i1)
            Next
            If flt > "" Then
                flt = flt & " Or (" & val1 & ")"
            Else
                flt = val1
            End If
        End If
    Next
End If
If flt > "" Then
    flt = flt & " And "
End If
With DataTables("缴费情况")
    .LoadFilter = flt '设置加载条件
    .LoadPage = 0 '加载第一页
    .LoadTop = 20 '每页5行
    .LoadOrder = "日期 DESC,单号 DESC"
    .LoadReverse = True
    .Load()
    e.Form.Controls("TextBox3").Value = 1 & "/" & .TotalPages
End With

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/2/19 22:22:00 [显示全部帖子]

用字符显示第一、第二个字节名字不通用,另外分类会随时增加,不可能总添代码,我改为以分类行中的名字为节点名,得出的效果多了按年月显示的月租停车数据,请教如何处理?谢谢。

图片点击可在新窗口打开查看此主题相关图片如下:33.png
图片点击可在新窗口打开查看
Dim cmd As New SQLCommand
Dim dt As DataTable
'cmd.C '内部数据源,这行代码不需要
cmd.CommandText = "SELECT [_Identify],分类,住址_序号,住址_巷,住址_号,住址_房,Year(日期) As 年, Month(日期) As 月,户主姓名,手机号码,车牌号码 Fro m {车辆基本信息}"
dt = cmd.ExecuteReader()
Dim trv As WinForm.TreeView = e.Form.Controls("TreeView2")
trv.BuildTree(dt,"住址_巷|住址_号|住址_房|户主姓名|手机号码|车牌号码","[分类] = '" & dt.DataRows(0)("分类") & "'","住址_序号,住址_号,住址_房")
trv.Nodes.Insert("显示所有数据",0)
trv.Nodes.Insert(dt.DataRows(0)("分类"),1)
Do While trv.Nodes.Count > 2
    trv.Nodes(2).MoveRight
Loop
Dim c As Integer = dt.DataRows.Count
If c >= 2 Then
    For a As Integer = 1 To c - 1
        Dim trv2 As WinForm.TreeView = e.Form.Controls("TreeView3")
        trv2.BuildTree(dt,"年|月|车牌号码","[分类] = '" & dt.DataRows(a)("分类") & "'","年 DESC,月 DESC")
        Dim node As WinForm.TreeNode = trv.Nodes.Add(dt.DataRows(a)("分类"))
        For i As Integer = trv2.Nodes.Count - 1 To 0 Step -1
            Dim nn As WinForm.TreeNode = trv2.Nodes(i)
            trv2.Nodes.RemoveAt(i)
            node.basenode.Nodes.Add(nn.basenode)
        Next
    Next
End If
'加载第一页数据
With DataTables("车辆基本信息")
    .LoadFilter = "" '清除加载条件
    .LoadPage = 0 '加载第一页
    .LoadTop = 20 '每页5行
    .LoadOrder = "分类,住址_序号,住址_号,住址_房"
    .LoadReverse = True
    .Load()
    e.Form.Controls("TextBox2").Value = 1 & "/" & .TotalPages
End With

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/2/20 0:57:00 [显示全部帖子]

可以了
Dim cmd1 As New SQLCommand
Dim dt1 As DataTable
'cmd.C '内部数据源,这行代码不需要
cmd1.CommandText = "SELECT DISTINCT 分类,住址_序号,住址_巷,住址_号,住址_房,Year(日期) As 年, Month(日期) As 月,户主姓名,手机号码,车牌号码 Fro m {缴费情况}"
dt1 = cmd1.ExecuteReader()
Dim trv1 As WinForm.TreeView = e.Form.Controls("TreeView1")
trv1.BuildTree(dt1,"住址_巷|住址_号|住址_房|户主姓名|手机号码|车牌号码","[分类] = '" & dt1.DataRows(0)("分类") & "'","住址_序号,住址_号,住址_房")
trv1.Nodes.Insert(dt1.DataRows(0)("分类"),0)
Do While trv1.Nodes.Count > 1
    trv1.Nodes(1).MoveRight
Loop
Dim fls1 As List(Of String) = dt.SQLGetValues("分类","[分类] <> '" & dt1.DataRows(0)("分类") & "'","")
For Each fl1 As String In fls
    Dim trv4 As WinForm.TreeView = e.Form.Controls("TreeView4")
    trv4.BuildTree(dt1,"年|月|车牌号码","[分类] = '" & fl1 & "'","年 DESC,月 DESC")
    trv1.Nodes.Insert("显示所有数据",0)
    Dim node1 As WinForm.TreeNode = trv1.Nodes.Add(fl1)
    For i As Integer = trv4.Nodes.Count - 1 To 0 Step -1
        Dim nn As WinForm.TreeNode = trv4.Nodes(i)
        trv4.Nodes.RemoveAt(i)
        node1.basenode.Nodes.Add(nn.basenode)
    Next
Next
'加载第一页数据
With DataTables("缴费情况")
    .LoadFilter = "" '清除加载条件
    .LoadPage = 0 '加载第一页
    .LoadTop = 20 '每页5行
    .LoadOrder = "日期 DESC,单号 DESC"
    .LoadReverse = True
    .Load()
    e.Form.Controls("TextBox3").Value = 1 & "/" & .TotalPages
End With
[此贴子已经被作者于2021/2/23 15:16:39编辑过]

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/2/21 9:13:00 [显示全部帖子]

看过你给的连接例子,
http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=160318&authorid=0&page=0&star=4
例子中的
Dim nms As String() = {"单位","部门","责任人"} '指定生成目录树的各列
Dim qts As String() = {"'","'","'"}
nms = {"单位","部门","责任人"}
都是字符型,你可以用
If nd.Checked  Then
        If nd.FullPath Like "按设备*"
            nms = {"设备大类","设备二类","设备三类"}
        Else
            nms = {"单位","部门","责任人"}
        End If
简洁、明了,我的例子
Dim nms As String() = {"住址_巷","住址_号","住址_房","户主姓名","手机号码","车牌号码"} '指定生成目录树的各列
Dim qts As String() = {"'","","","'","'","'"} '指定将各列的值括起来的符号,这里都是字符型,所以都是单引号

Dim nms1 As String() = {"年","月","车牌号码"'指定生成目录树的各列

Dim qts1 As String() = {"#","#","'"'指定将各列的值括起来的符号,这里都是字符型,所以都是单引号

有字符型、有数字型、有日期型,两个集合构成不一样,还是分开各自定义好,另分类名称不一定是代码中指定的名称,且它还会添加,所以这样写不具通用性,我改过一下,但报错就暂时注识,先把效果搞出来,再想通用性。

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:小区车辆管理2212219.foxdb

密码:888888

代码过长不允许发,看主界面窗口缴费任务栏中的加载目录树AfterCheckNode事件代码。


[此贴子已经被作者于2021/2/21 22:22:54编辑过]

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  15楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/2/22 17:10:00 [显示全部帖子]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:小区车辆管理22201.foxdb

密码:888888
这样写点目录树字节没反应。
Dim trv As WinForm.TreeView = e.Sender
Dim flt,flt1,flt2 As String
If trv.Nodes(0).Name = "显示所有数据" '专处理显示所有数据的勾选选项打勾后缴费情况表的筛选问题,打勾全显,去除勾不显.
    If e.Node.Checked
        For Each nd As WinForm.TreeNode In trv.AllNodes
            nd.Checked = False
        Next
        e.Node.Checked = True
    Else
        flt = "1=2"
    End If
ElseIf trv.Nodes(0).Name = DataTables("缴费情况").DataRows(0)("分类") And trv.Nodes(0).Checked = False Then
    Dim nms As String() = {"住址_巷","住址_号","住址_房","户主姓名","手机号码","车牌号码"} '指定生成目录树的各列
    Dim qts As String() = {"'","","","'","'","'"} '指定将各列的值括起来的符号,这里都是字符型,所以都是单引号
    For Each nd As WinForm.TreeNode In e.node.allNodes  '清除子节点的选中标记
        nd.Checked = e.node.Checked
    Next
    If e.node.Checked = False
        Dim pd As WinForm.TreeNode = e.Node.ParentNode
        If pd IsNot Nothing Then
            pd.Checked = False
        End If
    End If
    For Each nd As WinForm.TreeNode In trv.AllNodes
        If nd.Checked  Then
            Dim rts() As String = nd.FullPath.Split("\")
            Dim val As String = ""
            For i As Integer = 0 To rts.length - 1
                If val > "" Then
                    val = val & " And "
                End If
                val = val & nms(i) & " = " & qts(i) & rts(i) & qts(i)
            Next
            If flt1 > "" Then
                flt1 = flt1 & " Or (" & val & ")"
            Else
                flt1 = val
            End If
        End If
    Next
Else
    trv.Nodes(0).Checked = False
    Dim fls As List(Of String) = DataTables("缴费情况").SQLGetValues("分类","[分类] <> '" & DataTables("缴费情况").DataRows(0)("分类") & "'","")
    For Each fl As String In fls
        trv.Nodes(0).Name = fl
        trv.Nodes(0).Checked = False
        Dim nms1 As String() = {"年","月","车牌号码"} '指定生成目录树的各列
        Dim qts1 As String() = {"#","#","'"} '指定将各列的值括起来的符号,这里都是字符型,所以都是单引号
        For Each nd As WinForm.TreeNode In e.node.allNodes  '清除子节点的选中标记
            nd.Checked = e.node.Checked
        Next
        If e.node.Checked = False
            Dim pd As WinForm.TreeNode = e.Node.ParentNode
            If pd IsNot Nothing Then
                pd.Checked = False
            End If
        End If
        For Each nd1 As WinForm.TreeNode In trv.AllNodes
            If nd1.Checked  Then
                Dim rts1() As String = nd1.FullPath.Split("\")
                Dim val1 As String = ""
                For i1 As Integer = 0 To rts1.length - 1
                    If val1 > "" Then
                        val1 = val1 & " And "
                    End If
                    val1 = val1 & nms1(i1) & " = " & qts1(i1) & rts1(i1) & qts1(i1)
                Next
                If flt2 > "" Then
                    flt2 = flt2 & " Or (" & val1 & ")"
                Else
                    Flt2 = val1
                End If
            End If
        Next
    Next
End If
flt = flt1
If flt > "" Then
    If flt2 > "" Then
        flt = "(" & flt1 & ") and (" & flt2 & ")"
    End If
Else
    flt = flt2
End If
Tables("主界面_Table5").Filter = flt

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  16楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/2/22 18:57:00 [显示全部帖子]

加上红色标注的一级字符也没反应!
Dim trv As WinForm.TreeView = e.Sender
Dim flt,flt1,flt2 As String
If trv.Nodes(0).Name = "显示所有数据" '专处理显示所有数据的勾选选项打勾后缴费情况表的筛选问题,打勾全显,去除勾不显.
    If e.Node.Checked
        For Each nd As WinForm.TreeNode In trv.AllNodes
            nd.Checked = False
        Next
        e.Node.Checked = True
    Else
        flt = "1=2"
    End If
ElseIf trv.Nodes(0).Name = DataTables("缴费情况").DataRows(0)("分类") And trv.Nodes(0).Checked = False Then
    Dim nms As String() = {"'" & DataTables("缴费情况").DataRows(0)("分类") & "'","住址_巷","住址_号","住址_房","户主姓名","手机号码","车牌号码"} '指定生成目录树的各列
    Dim qts As String() = {"'","'","","","'","'","'"} '指定将各列的值括起来的符号,这里都是字符型,所以都是单引号
    For Each nd As WinForm.TreeNode In e.node.allNodes  '清除子节点的选中标记
        nd.Checked = e.node.Checked
    Next
    If e.node.Checked = False
        Dim pd As WinForm.TreeNode = e.Node.ParentNode
        If pd IsNot Nothing Then
            pd.Checked = False
        End If
    End If
    For Each nd As WinForm.TreeNode In trv.AllNodes
        If nd.Checked  Then
            Dim rts() As String = nd.FullPath.Split("\")
            Dim val As String = ""
            For i As Integer = 0 To rts.length - 1
                If val > "" Then
                    val = val & " And "
                End If
                val = val & nms(i) & " = " & qts(i) & rts(i) & qts(i)
            Next
            If flt1 > "" Then
                flt1 = flt1 & " Or (" & val & ")"
            Else
                flt1 = val
            End If
        End If
    Next
Else
    trv.Nodes(0).Checked = False
    Dim fls As List(Of String) = DataTables("缴费情况").SQLGetValues("分类","[分类] <> '" & DataTables("缴费情况").DataRows(0)("分类") & "'","")
    For Each fl As String In fls
        trv.Nodes(0).Name = fl
        trv.Nodes(0).Checked = False
        Dim nms1 As String() = {"'" & fl & "'","年","月","车牌号码"} '指定生成目录树的各列
        Dim qts1 As String() = {"'","#","#","'"} '指定将各列的值括起来的符号,这里都是字符型,所以都是单引号
        For Each nd As WinForm.TreeNode In e.node.allNodes  '清除子节点的选中标记
            nd.Checked = e.node.Checked
        Next
        If e.node.Checked = False
            Dim pd As WinForm.TreeNode = e.Node.ParentNode
            If pd IsNot Nothing Then
                pd.Checked = False
            End If
        End If
        For Each nd1 As WinForm.TreeNode In trv.AllNodes
            If nd1.Checked  Then
                Dim rts1() As String = nd1.FullPath.Split("\")
                Dim val1 As String = ""
                For i1 As Integer = 0 To rts1.length - 1
                    If val1 > "" Then
                        val1 = val1 & " And "
                    End If
                    val1 = val1 & nms1(i1) & " = " & qts1(i1) & rts1(i1) & qts1(i1)
                Next
                If flt2 > "" Then
                    flt2 = flt2 & " Or (" & val1 & ")"
                Else
                    Flt2 = val1
                End If
            End If
        Next
    Next
End If
flt = flt1
If flt > "" Then
    If flt2 > "" Then
        flt = "(" & flt1 & ") and (" & flt2 & ")"
    End If
Else
    flt = flt2
End If
Tables("主界面_Table5").Filter = flt

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  17楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/2/22 22:24:00 [显示全部帖子]

  我今晚看了一晚以年、月、车牌号码为筛选目录树的相关帮助,知道我那样写不对,正想改,看到你回复,乍看有点被绕晕,不用心理解真很容易被那些逻辑运算绕晕,静下心来慢慢细看,终于明白每一行的意思了!谢谢指教,没人指正,任我怎么想也绕不到最后的条件代码,厉害!
[此贴子已经被作者于2021/2/22 22:27:56编辑过]

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  18楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/2/28 16:59:00 [显示全部帖子]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:小区车辆管理202122801.foxdb

密码:888888

图片点击可在新窗口打开查看此主题相关图片如下:2802.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:2801.png
图片点击可在新窗口打开查看



再添加两个一级节点,点击字节的目录树报错:


 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  19楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/2/28 22:10:00 [显示全部帖子]

还是报错啊!

图片点击可在新窗口打开查看此主题相关图片如下:11.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:12.png
图片点击可在新窗口打开查看


 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  20楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/2/28 22:39:00 [显示全部帖子]

可以了,谢谢。

 回到顶部
总数 65 上一页 1 2 3 4 5 6 7 下一页