
所謂的「SiteMapPath」,在ASP.NET 2.0即為下圖的紅框部分:
http://img248.imageshack.us/img248/4909/forumnavigatorbn3.gif
它是一個稱為「SiteMapPath」的控制項,讀取XML檔的階層語法來達成
可以動態修改節點的內容,但要新增/刪除節點則不知如何下手
我未使用過,只是單純看一下google資料就猜它的輪廓
即使綁在來源SiteMapPath.DataSource,好像要控制節點也很麻煩
因為就算能讀取,階層式怎麼表達就讓程式師手軟。
很多書上有寫SiteMapPath範例,但我猜書上一定會避重就輕
即已有xml的節點,只是單純切換既有節點而己 (不寫技術重點就是中文書的毛病)。
既然沒有現有資源可輕取,所以我回到原始概念去挑戰這種類似遞迴式的path寫法,
首先,我利用ParentId讓這樣的階層關係能用單一SQL table就能表達
接著為了效能考量,我一次全部下載所有清單(只作1次sql擷取遠端資料),
利用DataTable.Select()在記憶體中取出相關的record,
再透過遞迴函式一一找出每個節點的父親,
形成parent-child的表達方式。
讀大學時,對資料結構的遞迴(recursive)程式實在是看不懂,
到了職場為了避重就輕,還是不太會寫
後來function重複呼叫實在太多次了,需要用遞迴的需求清楚得不得了
真正去實作遞迴,發現只要rule很清楚,它根本就是簡單且直覺的寫法
只要留意最後一次exit的時機即可。
但我還是討厭遞迴method,並不是它難,而是它在整體工作未完成時
並不會釋放method內的區域變數宣告資源,
若是自呼太多階,記憶體可能就不夠用了 (假如method需要耗很多記憶體的話)
除此之外,只要用心去使用遞迴,它真是不難!
我們都被大學時代的書本給嚇得不敢去思考其原意了。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.115.133.93
