以文本方式查看主题

-  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=142141)

--  作者:yifan3429
--  发布时间:2019/10/19 15:41:00
--  目录树错误求助
语法错误:“刘春回BJID191019”运算符后缺少操作数。

Dim strs() As String = e.Node.FullName.Split("\\")
Dim flt As String = "1=1"
For i As Integer = 0 To strs.Length - 1 \'\'间接获取目录树层级(Level)
    flt +=  strs(i)
Next
If flt > "" Then
    Tables("项目选型表").Filter = flt
End If

--  作者:有点蓝
--  发布时间:2019/10/19 15:55:00
--  
msgbox(flt) \'确定这个是正确的表达式条件?

--  作者:yifan3429
--  发布时间:2019/10/19 17:01:00
--  
Dim Values() As String = e.Form.Controls("CheckedComboBox选择列").Text.Split(",")
    Dim strs() As String = e.Node.FullName.Split("\\")
    Dim flt As String = "1=1"
    For i As Integer = 0 To strs.Length - 1 \'\'间接获取目录树层级(Level)
        flt += " And " & Values(i) & "= \'" & strs(i) & "\'"
    Next
    If flt > "" Then
        Tables(Vars("表名")).Filter = flt
        \'Tables(Vars("表名")).Load
    End If
原始代码是这样的
可以执行的
Dim Values() As String = e.Form.Controls("CheckedComboBox选择列").Text.Split(",")
不想要这个控件值,
想简化下
[此贴子已经被作者于2019/10/19 17:06:30编辑过]

--  作者:有点蓝
--  发布时间:2019/10/19 17:09:00
--  
msgbox(e.Node.FullName)这个显示什么内容?想达到什么效果?
--  作者:yifan3429
--  发布时间:2019/10/19 17:37: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  = flt

实现的目的和上面的代码一样,只不过这个更简单,用指定具体的值,不管列的层次怎么变都可以

--  作者:有点蓝
--  发布时间:2019/10/19 18:12:00
--  
请回答4楼的问题

msgbox(e.Node.FullName)这个显示什么内容?最终生成的表达式需要是什么样的?

--  作者:yifan3429
--  发布时间:2019/10/19 18:34:00
--  
效果如图
图片点击可在新窗口打开查看此主题相关图片如下:企业微信截图_20191019183340.png
图片点击可在新窗口打开查看


需要达成的效果是,单击节点将结果筛选到表



.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2019.10.19.1
错误所在事件:
详细错误信息:
语法错误:“\'全新的系列\'\'房门\'\'单面/窗套\'\'nyj\'”运算符后缺少操作数。


[此贴子已经被作者于2019/10/19 19:47:37编辑过]

--  作者:有点酸
--  发布时间:2019/10/19 22:44:00
--  
如果你看懂了3楼的代码, 或者你懂一点表达式的基础常识,就知道你一楼的代码有多么的荒缪。

其实这种问题,你直接显示一下合成的表达式,就知道原因了:

Dim strs() As String = e.Node.FullName.Split("\\")
Dim flt As String = "1=1"
For i As Integer = 0 To strs.Length - 1 \'\'间接获取目录树层级(Level)
    flt +=  strs(i)
Next
If flt > "" Then
    Messagebox.Show(flt)
    Tables("项目选型表").Filter = flt
End If


既然是合成表达式,而且应用合成的表达式出错,那么显示一下合成的表达式,看看是否符合预期,这不是自然而然的事情吗?