看板 C_Sharp 關於我們 聯絡資訊
所謂的「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