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


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

主题:目录树错误求助

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


加好友 发短信
等级:九尾狐 帖子:2456 积分:22663 威望:0 精华:0 注册:2011/3/29 17:14:00
目录树错误求助  发帖心情 Post By: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

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


加好友 发短信
等级:超级版主 帖子:106081 积分:539504 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/10/19 15:55:00 [只看该作者]

msgbox(flt) '确定这个是正确的表达式条件?

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


加好友 发短信
等级:九尾狐 帖子:2456 积分:22663 威望:0 精华:0 注册:2011/3/29 17:14:00
  发帖心情 Post By: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编辑过]

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


加好友 发短信
等级:超级版主 帖子:106081 积分:539504 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/10/19 17:09:00 [只看该作者]

msgbox(e.Node.FullName)这个显示什么内容?想达到什么效果?

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


加好友 发短信
等级:九尾狐 帖子:2456 积分:22663 威望:0 精华:0 注册:2011/3/29 17:14:00
  发帖心情 Post By: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

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

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


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

请回答4楼的问题

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

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


加好友 发短信
等级:九尾狐 帖子:2456 积分:22663 威望:0 精华:0 注册:2011/3/29 17:14:00
  发帖心情 Post By: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编辑过]

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


加好友 发短信
等级:五尾狐 帖子:1093 积分:6682 威望:0 精华:0 注册:2013/7/1 9:05:00
  发帖心情 Post By: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


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



 回到顶部