Foxtable(狐表)用户栏目专家坐堂 → 大神看过来,帮我优化下这段代码


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

主题:大神看过来,帮我优化下这段代码

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/5/15 16:46:00 [显示全部帖子]

加入一个辅助列【是否处理完成】。

 

加入,你重置一个四级的人,那么上级(三级、二级、一级),也是应该得到值的了吧?不需要重复find查找一次。

 

重置列之前,全部行设置成false,处理完成的行设置成true,当遇到【处理完成=true】的时候,不要再往上查找,直接使用其路径。

 

 


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/5/15 16:49:00 [显示全部帖子]

优化

 


If e.DataCol.Name = "B001HYZLB_TuiJianRen" AndAlso e.DataRow("已经完成") = False Then
    Dim pdr As DataRow = e.DataTable.Find("B001HYZLB_YongHuID = '" & e.DataRow("B001HYZLB_TuiJianRen") & "'")
    Dim dic As new Dictionary(of DataRow, String)
    dic.add(e.DataRow, "")
    Do While pdr IsNot Nothing
        If pdr("已经完成") = True Then
            For Each key As DataRow In dic.Keys
                dic(key)  = pdr("B001HYZLB_CengJiMa") & dic(key)
            Next
        Else
            For Each key As DataRow In dic.Keys
                dic(key)  = "/" & pdr("B001HYZLB_YongHuID") & dic(key)
            Next
            dic.add(pdr, "")
            pdr = e.DataTable.Find("B001HYZLB_YongHuID = '" & pdr("B001HYZLB_TuiJianRen") & "'")
           
        End If
    Loop
    For Each key As DataRow In dic.Keys
        key("B001HYZLB_CengJiMa") =  dic(key) & "/" & key("B001HYZLB_YongHuID") & "/"
        key("已经完成") = True
    Next
End If

[此贴子已经被作者于2018/5/15 17:04:49编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/5/15 16:50:00 [显示全部帖子]

具体细节自己调试,如果还是无法处理。请上传具体实例测试。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/5/15 18:51:00 [显示全部帖子]

参考代码

 

If e.DataCol.Name = "B001HYZLB_TuiJianRen" AndAlso e.DataRow("已经完成") = False Then
    Dim pdr As DataRow = e.DataTable.Find("B001HYZLB_Y")
    Dim dic As new Dictionary(of DataRow, String)
    Dim nls As new List(Of String)
    nls.add(e.DataRow("_Identify"))
    dic.add(e.DataRow, "")
    Do While pdr IsNot Nothing AndAlso nls.contains(pdr("_Identify")) = False
        application.Doevents
        output.show(dic.count & " " & pdr("_Identify"))
        If pdr("已经完成") = True Then
            Dim ls As new List(Of DataRow)
            ls.addRange(dic.keys)
            For Each key As DataRow In ls
                dic(key)  = pdr("B001HYZLB_CengJiMa") & dic(key)
            Next
            Exit Do
        Else
            Dim ls As new List(Of DataRow)
            ls.addRange(dic.keys)
            For Each key As DataRow In ls
                dic(key)  = "/" & pdr("B001HYZLB_YongHuID") & dic(key)
            Next
            dic.add(pdr, "")
            nls.add(pdr("_Identify"))
            pdr = e.DataTable.Find("B001HYZLB_Y")
        End If
    Loop
    output.show("----------")
    For Each key As DataRow In dic.Keys
        key("B001HYZLB_CengJiMa") =  dic(key) & "/" & key("B001HYZLB_YongHuID") & "/"
        key("已经完成") = True
    Next
End If


 回到顶部