• 递归呀递归,简单的2种方法=前端js一个普通list递归+前端js一个树结构数据(Ztree)的获取当前选中节点的所有无子节点的叶子节点的递归(return result)+后端C#一个递归


    1.摆数据源

    2.前端js递归==>对SUM动态计算值,将算力放在前端浏览器

        //===>调用递归的函数--获取原始数据+调用递归
         function gettreeList() {
            $.ajax({
                url: "/B_Certificate/GetTreeData",//发送请求的地址  
                type: "POST",// POST,默认是GET  
                dataType: 'json',//根据返回数据类型可以有这些类型可选:xml html script json jsonp text
                async: true,//是否异步请求
                success: function (data) {//请求成功  
                    setNodeChildren(-1, data)
                    console.log(data)
                },
            });
        }
        //===>递归函数
        //对SUM动态计算值,算力转移至前端浏览器
    PS:treeList必须是list或数组格式的数据比如![](https://img2020.cnblogs.com/blog/1261986/202012/1261986-20201202163936427-640132967.png)
    
        function setNodeChildren(pid, treeList) {
            for (var i = 0; i < treeList.length; i++) {
                if (treeList[i].PID == pid) {
                    setNodeChildren(treeList[i].ID, treeList)
                }
            }
        //以下为递归到最终节点的操作
            for (var j = 0; j < treeList.length; j++) {
                if (pid == treeList[j].ID) {
    
                    for (var n = 0; n < treeList.length; n++) {
                        if (treeList[n].ID == treeList[j].PID) {
                            treeList[n].SUM += treeList[j].SUM
                        }
                    }
                }
            }
        }
    
    
    2.5:前端js一个树结构数据(Ztree)的获取当前选中节点的所有无子节点的叶子节点的递归(return result)
    
    console.log(treeNode);
    var str = '';
    str= getAllChildrenNodes(treeNode,str);
    console.log(str);
    
    function getAllChildrenNodes(treeNode, result) {
    if (treeNode.isParent) {
    var childrenNodes = treeNode.children;
    if (childrenNodes) {
    for (var i = 0; i < childrenNodes.length; i++) {
    result = getAllChildrenNodes(childrenNodes[i], result);
    }
    return result;
    }
    }
    result += ',' + treeNode.ID;
    return result;
    }
    ![](https://img2020.cnblogs.com/blog/1261986/202012/1261986-20201202213718211-596797968.png)
    
     ,348,351,355,349,354,353
    

    3.后端C#递归==>后端直接生成数据

    
     //递归
            public void setTreeData(string pid,DataTable dt)
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    if (dt.Rows[i]["PID"].ToString()== pid)
                    {
                        setTreeData(dt.Rows[i]["ID"].ToString(), dt);
                    }
                }
        //以下为递归到最终节点的操作
                for (int n = 0; n < dt.Rows.Count; n++)
                {
                    //找到最终子节点
                    if (dt.Rows[n]["ID"].ToString()==pid)
                    {
                        for (int m = 0; m < dt.Rows.Count; m++)
                        {
                            //找到父节点
                            if (dt.Rows[m]["ID"].ToString()== dt.Rows[n]["PID"].ToString())
                            {
                                //将最终子节点的SUM+=给父节点的SUM
                                dt.Rows[m].BeginEdit();//开始编辑行
                                dt.Rows[m]["SUM"] = Convert.ToInt32(dt.Rows[m]["SUM"]) + Convert.ToInt32(dt.Rows[n]["SUM"]);
                                dt.Rows[m].EndEdit();//结束编辑
                                dt.AcceptChanges();//保存修改的结果。
                            }
                        }
    
                    }
                }
            }
    
    
    
  • 相关阅读:
    ASP.NE网站发布注意事项
    jQuery中使用$.ajax提交表单
    DataTable类Clone及Copy方法的区别
    DataList控件使用初步
    一个非常标准的Java连接Oracle数据库的示例代码
    详细解析用C#写的小游戏《彩色连珠》(附源代码)
    VS 2010 复制代码到word出现乱码解决办法
    Java之简单的图片动态显示(实现类似GIF动画效果)
    Class.forName(String driverClassName)加载JDBC驱动程序时,底层都做了些什么???
    Java设计好看的窗体必加的代码(使用内置皮肤控件):
  • 原文地址:https://www.cnblogs.com/jsll/p/13895615.html
Copyright © 2020-2023  润新知