Foxtable(狐表)用户栏目专家坐堂 → 如 id=1 就去找foid中等于1的数据 然后对应获取到id=2,3,4 然后又以id=2,3,4去找foid=5,6,7 然后又以foid=5,6,7去找id=……一直循环 怎么操作呢?


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

主题:如 id=1 就去找foid中等于1的数据 然后对应获取到id=2,3,4 然后又以id=2,3,4去找foid=5,6,7 然后又以foid=5,6,7去找id=……一直循环 怎么操作呢?

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


加好友 发短信
等级:超级版主 帖子:109489 积分:557107 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/9/8 20:29:00 [显示全部帖子]


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


加好友 发短信
等级:超级版主 帖子:109489 积分:557107 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/9/8 21:55:00 [显示全部帖子]

设计步骤:

1、在内部函数中新建一个函数,名为AddChildren,代码为:

Dim dr1 as datarow = args(0)
Dim
 
faIDpath As string = args(1)
Dim
 dt As DataTable = args(2)
Dim drs As List(of DataRow)
drs = dt.
Select(
"faID ='" & dr1("ID")  & "'")

if drs.count = 0 then

Dim dr2 As DataRow = DataTables("测试表").AddNew()

dim sr() as string = faIDpath.split(".")

for i as integer = 0 to sr.length - 1

dr2("第" & (i+1) & "节") = sr(i)

                    dr2("窗体id") = dr2("id")
                    dr2("导航名") = dr2("name")

next

else
For
 Each dr As DataRow In drs

    Functions.Execute(
"AddChildren",
dr("ID"),faIDpath & "." & dr("ID"),dt)

Next

end if


按钮

If DataTables.Contains("测试表")  Then '如果表C已经加载
    DataTables.Unload("测试表") '卸载表C
End If
Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.C
cmd.CommandText = "Sele ct * From sys_Navigation"
dt = cmd.ExecuteReader()

Dim dtb As New DataTableBuilder("测试表")
dtb.AddDef("第1节", Gettype(String), 32)
dtb.AddDef("第2节", Gettype(String), 32)
dtb.AddDef("第3节", Gettype(String), 32)
dtb.AddDef("第4节", Gettype(String), 32)
dtb.AddDef("窗体id", Gettype(String), 32)
dtb.AddDef("导航名", Gettype(String), 32)
dtb.Build()

Dim drs As List(of DataRow)
drs = dt.
Select(
"faID  is null")

For Each dr As DataRow In drs
    Functions.Execute(
"AddChildren",
dr("ID"),dr("ID"),dt)

Next




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


加好友 发短信
等级:超级版主 帖子:109489 积分:557107 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/9/9 8:43:00 [显示全部帖子]

dtb.Build()

Dim drs As List(of DataRow)
drs = dt.Select("faID  is null")

For Each dr As DataRow In drs
    Functions.Execute("AddChildren",dr ,dr("ID"),dt)

Next

MainTable=Tables("测试表")


 

内部函数代码如下

 

Dim dr1 As DataRow = args(0)
Dim faIDpath As String = args(1)
Dim dt As DataTable = args(2)


Dim drs As List(of DataRow)
drs = dt.S elect("faID ='" & dr1("ID") & "'")


If drs.count = 0 Then
    Dim dr2 As DataRow = DataTables("测试表").AddNew()
    Dim sr() As String = faIDpath.split(".")
    For i As Integer = 0 To sr.length - 1
        dr2("第" & (i+1) & "节") = sr(i)
    Next
         dr2("窗体id") = dr1("窗体id")
         dr2("导航名") = dr1("name")
Else
    For Each dr As DataRow In drs
        Functions.Execute("AddChildren",dr,faIDpath & "." & dr("ID"),dt)
    Next
End If



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


加好友 发短信
等级:超级版主 帖子:109489 积分:557107 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/9/9 9:37:00 [显示全部帖子]

第一段红色代码去掉,不需要多次一举,在函数里有又查一次表格,表格已经在按钮里查询,然后传入函数就可以使用了,不然调用函数100次,要查100次数据库?是觉得程序太快了,要减慢速度运行吗!!

名称和faIDpath参数用法一样,合并传入函数使用即可

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


加好友 发短信
等级:超级版主 帖子:109489 积分:557107 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/9/9 16:30:00 [显示全部帖子]

理论上id和名称的个数应该是一致的

    Dim dr2 As DataRow = DataTables("测试表").AddNew()
    Dim sr() As String = faIDpath.split(".")
    Dim sr1() As String = namepath.split(".")
    For i As Integer = 0 To sr.length - 1
        dr2("第" & (i+1) & "节") = sr(i)
dr2("第" & (i+1) & "节名称") = sr1(i)
    Next
    dr2("窗体id") = dr1("formid")

 回到顶部