在程式設計中很可能使用到多級動態目錄,如果使用一般的方法將多級目錄繫結到treeview就顯得非常侷促了,所以,最好的辦法就是使用遞迴,使用遞迴就完全不用去考慮目錄的層次有多深.
**其實很簡單.
view code
1在遞迴方法中,傳遞乙個我們從資料庫中查詢出來的datatable資料來源,乙個treenode,以及目錄的父級id.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 }
下面這句話可能有些人不理解,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...