以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 多选筛选树问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=171326) |
-- 作者:15666282205 -- 发布时间:2021/8/26 14:46:00 -- 多选筛选树问题 老师,我们的项目用的是阿里云SQL数据库,表设置为启动不加载,设置了筛选树,显示复选框,想实现多选筛选树。以下的代码在目录树的afterchecknode事件中,多选复选框时只显示最后一次的,如果实现多选显示呢?请您指导。 \'----------------------------------目录树----------------------- Dim Filter As String = "" If e.node.Name <> "显示所有行" Then \'要用Name属性,不能用Text属性 Dim d1 As Date Dim d2 As Date Dim Year As Integer = e.Node.DataRow("年") Dim Month As Integer = e.Node.DataRow("月") Dim Day As Integer = e.node.DataRow("日") Dim Product As String = e.Node.DataRow("合同序号") Dim Product1 As String = e.Node.DataRow("合同名称") \'Dim Product2 As String = e.Node.DataRow("考勤员") Select Case e.Node.Level Case 0 d1 = New Date(Year,1,1) \'取得该年的第一天 d2 = new Date(Year,12,31) \'取得该年的最后一天 Filter = "日期 >= \'" & d1 & "\' And 日期 <= \'" & d2 & "\'" Case 1 d1 = New Date(Year, Month, 1) \'取得该月的第一天 d2 = new Date(Year, Month, Date.DaysInMonth(Year,Month)) \'取得该月的最后一天 Filter = "日期 >= \'" & d1 & "\' And 日期 <= \'" & d2 & "\'" Case 2 d1 = New Date(Year, Month, day) \'取得该月的第一天 Filter = "日期 = \'" & d1 & "\'" Case 3 d1 = New Date(Year, Month, day) \'取得该月的第一天 Filter = "日期 = \'" & d1 & "\' And 合同序号 = \'" & Product & "\'" End Select End If If user.name <> "开发者" AndAlso user.group <> "会计员" AndAlso user.group <> "出纳员" Then If Filter > "" Then Filter = Filter & " and 经办人 like \'%" & user.name & "%\'" Else Filter = "经办人 like \'%" & user.name & "%\'" End If End If DataTables("现金日记账").LoadFilter = Filter DataTables("现金日记账").Load()
|
-- 作者:有点蓝 -- 发布时间:2021/8/26 14:55:00 -- 参考这里生成条件:http://www.foxtable.com/webhelp/topics/2503.htm |
-- 作者:15666282205 -- 发布时间:2021/8/26 15:23:00 -- 老师,我看过这个帮助,但是我水平比较低,难就难在怎么和我的代码整合起来,您帮忙给弄一下行吗?我把帮助的代码给贴过来,谢谢您了! Dim nms As String() = {"产品","客户","雇员"} \'指定生成目录树的各列 Dim qts As String() = {"\'","\'","\'"} \'指定将各列的值括起来的符号,这里都是字符型,所以都是单引号 Dim trv As WinForm.TreeView = e.Sender Dim flt As String Dim nd As WinForm.TreeNode For Each nd In e.node.allNodes \'清除子节点的选中标记 nd.Checked = False Next nd = e.Node.ParentNode Do While nd IsNot Nothing \'清除父节点的选中标记 nd.Checked = False nd = nd.ParentNode Loop For Each nd 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 Tables("订单").Filter = fl |
-- 作者:15666282205 -- 发布时间:2021/8/26 15:24:00 -- 老师,这是我学习狐表以来最高端的问题了,期待您的帮助! |
-- 作者:有点蓝 -- 发布时间:2021/8/26 15:25:00 -- 请上传实例测试 |
-- 作者:15666282205 -- 发布时间:2021/8/30 16:59:00 -- 老师,我从你们的qq请教了另一位老师,实现了复选的功能,还有个小问题:选择“显示所有行”复选框时出现以下错误提示,选择其他复选框没有问题。请您指导。 .NET Framework 版本:4.0.30319.1026 Foxtable 版本:2020.5.29.8 错误所在事件:窗口,财务管理,TreeView1,AfterCheckNode 详细错误信息: 未将对象引用设置到对象的实例。 以下是代码(在目录树的AfterCheckNode事件中): Dim trv As WinForm.TreeView = e.Sender Dim flt As String For Each nd As WinForm.TreeNode In e.node.Nodes \'清除子节点选中状态 nd.Checked = False Next If e.node.ParentNode IsNot Nothing Then \'去掉父节点选中状态 e.node.ParentNode.Checked = False End If Dim d1 As Date Dim d2 As Date For Each nd As WinForm.TreeNode In trv.AllNodes If nd.Checked Then If flt > "" Then flt = flt & " Or " \'注意用or而不是And End If If nd.Level = 0 Then \'注意下面的条件都要用括号括起来 d1 = New Date(nd.DataRow("年"),1,1) \'取得该年的第一天 d2 = d1.AddYears(1) \'取得该年的最后一天 flt = flt & "(日期 >= \'" & d1 & "\' And 日期 < \'" & d2 & "\')" ElseIf nd.Level = 1 Then \'注意下面的条件都要用括号括起来 d1 = New Date(nd.DataRow("年"),nd.DataRow("月"),1) \'取得该年的第一天 d2 = d1.AddMonths(1) \'取得该年的最后一天 flt = flt & "(日期 >= \'" & d1 & "\' And 日期 < \'" & d2 & "\')" ElseIf nd.Level = 2 Then \'注意下面的条件都要用括号括起来 d1 = New Date(nd.DataRow("年"),nd.DataRow("月"),nd.DataRow("日")) \'取得该年的第一天 flt = flt & "(日期 = \'" & d1 & "\')" Else d1 = New Date(nd.DataRow("年"),nd.DataRow("月"),nd.DataRow("日")) \'取得该年的第一天 flt = flt & "(日期 = \'" & d1 & "\' and 合同序号 = \'" & nd.DataRow("合同序号") & "\')" End If End If Next If user.name <> "开发者" AndAlso user.group <> "会计员" AndAlso user.group <> "出纳员" Then If flt > "" Then flt = "(" & flt & ") And 经办人 Like \'%" & user.name & "%\'" Else flt = "经办人 like \'%" & user.name & "%\'" End If End If DataTables("现金日记账").LoadFilter = flt DataTables("现金日记账").Load() |
-- 作者:有点蓝 -- 发布时间:2021/8/30 17:03:00 -- 判断一下如果勾选了“显示所有行”,就就先去掉所有其它的子节点的勾选,然后也不要生成其它勾选条件了 |
-- 作者:15666282205 -- 发布时间:2021/8/30 17:13:00 -- 这个代码我不会写,老师,麻烦您帮忙改一下好吗? |
-- 作者:有点蓝 -- 发布时间:2021/8/30 17:26:00 -- if e.node.text = "显示所有行" andalso e.node.checked then DataTables("现金日记账").LoadFilter = "" DataTables("现金日记账").Load() else e.Sender.nodes(0).checked = false 原来的事件代码 endif
|
-- 作者:15666282205 -- 发布时间:2021/8/30 18:05:00 -- 老师,功能正常,没有错误提示了。但是“显示所有行”前面的复选框不能选中,就这样吧,不影响用。谢谢! |