Foxtable(狐表)用户栏目专家坐堂 → 多选筛选树问题,自己把自己搞晕了


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

主题:多选筛选树问题,自己把自己搞晕了

帅哥哟,离线,有人找我吗?
foxyuan
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:307 积分:2614 威望:0 精华:0 注册:2018/2/3 10:48:00
多选筛选树问题,自己把自己搞晕了  发帖心情 Post By:2019/8/29 11:53:00 [只看该作者]

搞了挺长时间,越搞头越大,问题想复杂了
问题:
1)选一个总类下的分类,再选另一个总类下的分类,会报错。
2)反复点显示全部或是某个总类,会不时地出现√出现的不对的情况。

总是照猫画虎,基础还是不扎实,请高手帮忙看看。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:多选筛选树.table


 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107474 积分:546649 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/8/29 12:06:00 [只看该作者]

测试没有问题呀。关闭退出项目,删除项目所在的文件夹里的bin目录,然后重启项目试试。

另外目录树的勾选操作不能太快,这个问题暂时无法解决

 回到顶部
帅哥哟,离线,有人找我吗?
foxyuan
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:307 积分:2614 威望:0 精华:0 注册:2018/2/3 10:48:00
  发帖心情 Post By:2019/8/29 12:13:00 [只看该作者]

谢谢。先勾选一个小分类,再去勾选另一个大类下的小分类,肯定会报错的。

 回到顶部
帅哥哟,离线,有人找我吗?
foxyuan
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:307 积分:2614 威望:0 精华:0 注册:2018/2/3 10:48:00
  发帖心情 Post By:2019/8/29 12:16:00 [只看该作者]

如图。
图片点击可在新窗口打开查看此主题相关图片如下:{1de067d0-f61e-4d6c-83d3-ac8a00af004f}_20190829121459.jpg
图片点击可在新窗口打开查看

 回到顶部
帅哥,在线噢!
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107474 积分:546649 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/8/29 13:50:00 [只看该作者]

……
Else
    For Each nd In e.node.Nodes '清除子节点选中状态
        nd.Checked = False
    Next
    If e.node.ParentNode IsNot Nothing Then '去掉父节点选中状态
        e.node.ParentNode.Checked = False
    End If
    For Each nd In trv.AllNodes
        If nd.Checked = True Then
            If Filter > "" Then
                Filter = Filter & " Or "  '注意用or而不是And
            End If
            Select Case nd.Level
                Case 0                          '注意下面的条件都要用括号括起来
                    Dim T1 As String = nd.Text
                    Filter = Filter & "([总类] = '" & T1 & "')"
                Case 1
                    Dim T1 As String = nd.Text
                    Dim T2 As String = nd.ParentNode.Text
                    Filter = Filter & "( 总类 = '" & T2 & "' And 分类 = '" & T1 & "')"
            End Select
        Else
            Select Case e.Node.Level
                Case 0
                    If nd.Nodes.Count > 0
                        For Each nd1 In nd.AllNodes
                            nd1.Checked = False
                        Next
                    End If
                    
            End Select
        End If
    Next
End If


 回到顶部
帅哥哟,离线,有人找我吗?
foxyuan
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:307 积分:2614 威望:0 精华:0 注册:2018/2/3 10:48:00
  发帖心情 Post By:2019/8/29 15:32:00 [只看该作者]

谢谢蓝大师。按你的代码测了一下,能做到按需筛选了,但与我最初想法不太一致,看看能不能再完美些:
1)做不到选子节点时,父节点也要打个√。或点选父节点时其子节点全部打上√。当然这仅要求在外观上。
2)可以先选大类PD01,再去选第二个大类PD02下的CS01,但做不到先选PD01下的CS01再后选第二个大类PD02。当然操作时可以反过来操作能做到筛选目的。
3)可以同时选不同的大类,也可以同时选不同大类下的小类,还可以先选不同的大类再去选小类,但不能先选任一个小类,再去选别的大类,那样所有的小类会去选。


 回到顶部
帅哥,在线噢!
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107474 积分:546649 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/8/29 16:14:00 [只看该作者]

5楼的用法就可以了,搞那么复杂干啥,控制麻烦不说,还给用户增加负担。

用户做个筛选,任意勾选都应该可以继续筛选,还非得勾选大类才能勾选小类,麻烦不!

 回到顶部
帅哥哟,离线,有人找我吗?
foxyuan
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:307 积分:2614 威望:0 精华:0 注册:2018/2/3 10:48:00
  发帖心情 Post By:2019/8/29 17:51:00 [只看该作者]

有道理。不过没有表达清楚,我是说现在还有这三个问题存在,不是要达成这三条。

 回到顶部
帅哥,在线噢!
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107474 积分:546649 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/8/30 11:28:00 [只看该作者]

去掉这段代码

Else
            Select Case e.Node.Level
                Case 0
                    If nd.Nodes.Count > 0
                        For Each nd1 In nd.AllNodes
                            nd1.Checked = False
                        Next
                    End If
                    
            End Select

 回到顶部
帅哥哟,离线,有人找我吗?
foxyuan
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:307 积分:2614 威望:0 精华:0 注册:2018/2/3 10:48:00
  发帖心情 Post By:2019/8/30 16:35:00 [只看该作者]

ok,谢谢蓝大师

 回到顶部