以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  目录树节点代码  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=118038)

--  作者:yifan3429
--  发布时间:2018/4/23 22:28:00
--  目录树节点代码
Dim Filter As String
If e.node.Text = "加载所有数据" Then
    Filter = ""
Else
    Dim dr As DataRow = e.Node.DataRow \'获取生成此节点的DataRow
    Select Case e.Node.Level
        Case 0
            Filter ="[产品] = \'" & dr("产品") & "\'"
        Case 1
            Filter ="[产品] = \'" & dr("产品") & "\' And [客户] = \'" & dr("客户") & "\'"
    End Select
End If
DataTables("订单").LoadFilter = Filter
DataTables("订单").Load()

上面的是原始代码  
目录树的节点会根据 CheckedComboBox选择列 内容重新生成,
下面的代码貌似有些问题报错数据不存在



Dim Values() As String = e.Form.Controls("CheckedComboBox选择列").Text.Split(",")

Dim strs() As String = e.Node.FullName.Split("\\")
Dim dr As DataRow = e.Node.DataRow
Dim flt As String
For i As Integer = 0 To strs.Length - 1 \'\'间接获取目录树层级(Level)
    For j As Integer = 0 To Values.Length - 1
        If i = j Then \'\'只加入选定节点及以上的节点
            flt + = Values(j) & "= \'" & dr(Values(j)) & "\' And "
        End If
    Next
Next
If flt > "" Then
    Tables(Vars("表名")).Filter = flt.SubString(0,flt.Length - 5)
End If

--  作者:有点蓝
--  发布时间:2018/4/23 22:48:00
--  
看看生成的条件是什么内容?
msgbox(flt)

--  作者:yifan3429
--  发布时间:2018/4/24 0:07:00
--  
Dim Filter As String
If e.node.Text = "加载所有数据" Then
    Filter = ""
Else
    Dim dr As DataRow = e.Node.DataRow \'获取生成此节点的DataRow
    Select Case e.Node.Level
        Case 0
            Filter ="[产品] = \'" & dr("产品") & "\'"
        Case 1
            Filter ="[产品] = \'" & dr("产品") & "\' And [客户] = \'" & dr("客户") & "\'"
    End Select
End If
DataTables("订单").LoadFilter = Filter
DataTables("订单").Load()

我要的结果是和上面一样 
但是需要根据 CheckedComboBox选择列 的内容来加载数据
那么就需要动态的来加载数据,不能设计成上面的固定模式。
下面的代码需要优化不会了


Dim Values() As String = e.Form.Controls("CheckedComboBox选择列").Text.Split(",")
Dim strs() As String = e.Node.FullName.Split("\\")
Dim dr As DataRow = e.Node.DataRow
Dim flt As String
For i As Integer = 0 To strs.Length - 1 \'\'间接获取目录树层级(Level)
    For j As Integer = 0 To Values.Length - 1
        If i = j Then \'\'只加入选定节点及以上的节点
            flt + = Values(j) & "= \'" & dr(Values(j)) & "\' And "
        End If
    Next
Next
If flt > "" Then
    DataTables(订单).Filter = flt.SubString(0,flt.Length - 5)
End If

--  作者:有点甜
--  发布时间:2018/4/24 9:08: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("订单").Filter = flt
End If
[此贴子已经被作者于2018/4/25 9:41:34编辑过]

--  作者:yifan3429
--  发布时间:2018/4/25 9:06:00
--  
d
图片点击可在新窗口打开查看此主题相关图片如下:截图20180425151357.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2018/4/25 9:05:55编辑过]

--  作者:有点甜
--  发布时间:2018/4/25 9:41:00
--  

flt += " And " & Values(i) & "= \'" & strs(i)

 

改成

 

flt += " And " & Values(i) & "= \'" & strs(i) & "\'"


--  作者:yifan3429
--  发布时间:2018/4/25 17:17: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
    DataTables(Vars("表名")).LoadFilter = flt

End If


[此贴子已经被作者于2018/4/25 17:22:10编辑过]

--  作者:有点甜
--  发布时间:2018/4/25 17:43:00
--  

If flt > "" Then
    DataTables(Vars("表名")).LoadFilter = flt
    DataTables(Vars("表名")).Load
End If


--  作者:yifan3429
--  发布时间:2018/4/26 9:17:00
--  
加载所有数据失败

Dim Filter As String
If e.node.Text = "加载所有数据" Then
    DataTables(Vars("表名")).Load
Else
    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
        DataTables(Vars("表名")).LoadFilter = flt
        DataTables(Vars("表名")).Load
    End If
End If

--  作者:有点甜
--  发布时间:2018/4/26 11:05:00
--  

1、msgbox(flt) 弹出什么?

 

2、报什么错?

 

3、如果自己不会调试,请上传具体foxtable实例测试。