遞迴方法繫結多級動態目錄

2022-07-18 01:30:19 字數 1186 閱讀 8752

在程式設計中很可能使用到多級動態目錄,如果使用一般的方法將多級目錄繫結到treeview就顯得非常侷促了,所以,最好的辦法就是使用遞迴,使用遞迴就完全不用去考慮目錄的層次有多深.

**其實很簡單.

view code

1

protected

void page_load(object

sender, eventargs e)211

private

void bindtree(datatable dt, treenode parentnode, int

parentid)12"

, parentid));

15foreach (datarow row in

rows)

1625

else

2629}30

31 }

在遞迴方法中,傳遞乙個我們從資料庫中查詢出來的datatable資料來源,乙個treenode,以及目錄的父級id.

下面這句話可能有些人不理解,dt.select是系統的方法,按照主鍵順序匹配每一條資料.這裡的主鍵並非資料庫中的主鍵,而是後面括弧中的指定的主鍵.

string.format是格式化字串

datarow rows = dt.select(string.format("parentid=", parentid));

後面的**就是開始迴圈並遞迴了.

遞迴演算法有這樣第一特點,就是先迴圈遍歷的終點,然後從終點開始遞迴計算.

在將目錄繫結到treeview的時候進行乙個判斷,判斷此節點是否為根節點.

但是,如果這個時候你在if處打上斷點,然後f11,會發現,我們開始給parentnode復的null值,這時候判斷卻不是為空的,這是為什麼呢?難道給treenode賦null與parentnode=null不一樣?還是遞迴演算法不是迴圈到終點在從終點遞迴?其實不然.

if (parentnode == null)

else

我們回過去看if上面的**,bindtree(dt, node,convert.toint32( row["id"]));

在呼叫自身方法的時候是需要傳遞乙個parentnode引數的,而這個node已經在迴圈的時候已經賦值了,在開始遞迴的時候這個node的值不是開始的null值,而是你目錄的最後乙個子節點.

所以,遞迴開始從最後子節點開始的.最終遞迴到根節點.

VBS遞迴建立多級目錄資料夾的方法

核心 rkdfn createfolders d jb51test程式設計客棧1 2 3 4 5 function createfolders path set fso createobject scripting.filesystemobject createfolderex fso,path s...

遞迴的方式查詢出多級目錄

1 資料庫關係 mysql id 自增的id pid 父級目錄的id rolename 目錄名稱 10 一級目錄21 二級目錄32 目錄43 四級目錄 2 程式持久層 2 1 程式持久層介面 通過pid查詢單條資料 param pid 父級主鍵 return 例項物件 list querybypid...

動態繫結方法

bind 單事件繫結 selector bind event,data,function 多事件繫結 selector bind 多個觸發條件進行不同的操作 selector bind event1 event2 event3 data,function 多個觸發條件進行同樣的操作 live sel...