遞迴呀遞迴,簡單的2種方法=前端js一個遞迴+後端C#一個遞迴
阿新 • • 發佈:2020-10-29
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動態計算值,算力轉移至前端瀏覽器 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 } } } } }
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();//儲存修改的結果。 } } } } }