以文本方式查看主题

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

--  作者:physics
--  发布时间:2013/9/3 11:19:00
--  [求助]改进BOM目录树的生成方式

情况如下:

有一份完整的 BOM  表,有3900+多项目。发现 生成一份完成所有产品  目录树时 ,但耗时间 (约40S )。

 

想这样实现,先筛选某个产品,然后生成该产品的目录树 ,可发现 还是生产 整个目录树 。 代码如下 ,该如何改正 ,才不是生成所有的目录树呢 ?

 

 tr As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim nd As WinForm.TreeNode
Dim dt As DataTable = DataTables("BOM")
tr.StopRedraw()
tr.Nodes.Clear

For Each dr As DataRow In dt.datarows
    If dr.IsNull("科目代码") = False AndAlso dr("科目代码").Length = 2 Then
        nd = tr.Nodes.Add(dr("科目代码"), dr("科目名称"))
        Functions.Execute("AddChildren",nd,dt)
    End If
Next
tr.ResumeRedraw()

 

 

 

 

 


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20130903111725.jpg
图片点击可在新窗口打开查看

--  作者:Bin
--  发布时间:2013/9/3 11:25:00
--  
循环table  不要循环datatable
--  作者:狐狸爸爸
--  发布时间:2013/9/3 11:28:00
--  

1、耗时问题的解决方法:

http://www.foxtable.com/help/topics/2439.htm

 

2、Table才是筛选后的行,DataTable始终包括所有行:

 

For Each dr As Row In Tables("xxx").rows
    If dr.IsNull("科目代码") = False AndAlso dr("科目代码").Length = 2 Then
        nd = tr.Nodes.Add(dr("科目代码"), dr("科目名称"))
        Functions.Execute("AddChildren",nd,dt)
    End If
Next

好好看看:

http://www.foxtable.com/help/topics/1467.htm