以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何可以做到一次全部展开多阶层的BOm  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=98679)

--  作者:2900819580
--  发布时间:2017/4/5 9:28:00
--  如何可以做到一次全部展开多阶层的BOm

图片点击可在新窗口打开查看此主题相关图片如下:3.png
图片点击可在新窗口打开查看
数据表如上


如下代码,我单层展开的方法如下,如何可以做到一次全部展开,不定层次的BOM表,BOM阶层如上,可能会有4层,5层,或者更多。

Dim tb As Table = Tables(e.Form.Name & "_" & "Table1")
Dim cn() As String = {"i","总序号","父阶代码","子阶代码","名称","规格型号","单位","用量","选用料","车间","组别","默认仓库名称","备注","序号"}
Dim r As Row = tb.Current
Dim t As String = r("i")
Dim sn As String,sn1 As String
If t = "+" Then
    tb.StopRedraw
    sn = r("排序号")
    sn1 = r("总序号")
    r("i") = "-/\\-"
    Dim drs As List(of DataRow)
    drs = DataTables("BOM").Select("父阶代码 =\'" & r("子阶代码") & "\'")
    For Each dr As DataRow In drs
        Dim r1 As Row = tb.AddNew
        For i As Integer = 0 To cn.Length - 1
            If cn(i) <> "总序号" Then
                r1(cn(i)) = dr(cn(i))
            Else
                r1("总序号") = sn1 & "." & dr("序号")
                r1("排序号") = sn & "." & Format(dr("序号"),"000")
                Dim str As String = r1("总序号")
                r1("阶层") = str.split(".").length
            End If
        Next
    Next
    tb.Sort = "排序号"
    tb.ResumeRedraw
End If
[此贴子已经被作者于2017/4/5 9:32:12编辑过]

--  作者:有点色
--  发布时间:2017/4/5 11:02:00
--  

最简单脑残的方法,把循环的语句复制粘贴写4到5或者10个。

 

如果你的父代码是全部显示的,可以取巧用模糊匹配 drs = DataTables("BOM").Select("父阶代码 like \'" & r("子阶代码") & "%\'")

 

最靠谱的方法是递归,参考 http://www.foxtable.com/webhelp/scr/2416.htm

 


--  作者:2900819580
--  发布时间:2017/4/5 14:24:00
--  
有点色老师,我的明细表不是通过筛选得出来的,而是通过增加行得到的,这样才可以将序号及排序做上去。
看来前两种 方法不太合适我,可是递归函数看完了,跟着教程做,可以做到教程的效果,可是没办法用在我这里,
老师可以帮忙改一下我的代码吗?

--  作者:有点色
--  发布时间:2017/4/5 15:14:00
--  
 上传具体例子项目说明你的问题。
--  作者:2900819580
--  发布时间:2017/4/5 17:05:00
--  

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:bom.foxdb

老师,如附件,全部展开


--  作者:有点色
--  发布时间:2017/4/5 18:11:00
--  

全部展开按钮,具体细节自己调整。

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:bom.foxdb