Visual Studio 2010下ASPX頁面的TreeView控制元件迴圈遍歷
阿新 • • 發佈:2021-06-24
如果維護一個老系統就總會遇到各種問題,而這次是TreeView的迴圈遍歷。對於Visual Studio2010上aspx頁面的TreeView
控制元件,我感受到了什麼叫集微軟之大智慧。與二叉樹型不一樣。我解釋一下,他提供TreeNode
和集合TreeNodeCollection
,彼此上下級通過TreeNode
的ChildNodes
來實現連線的。這不就是B樹結構嗎?
思考和動手
這個模型設計上很簡單(如圖所示),但是在遍歷的時候卻多了列表List
的索引,而沒有Next()的迭代器,就導致用For
或Foreach
迭代時,無法處理父Nodes
和子Nodes
的索引切換。
編寫程式碼:
/// <summary> /// 演示主函式 /// </summary> /// <returns></returns> public void main() { var nodes = treeView.Nodes; // 遍歷列表 for (var i = 0; i < nodes.Count; i++) { NodesRecursion(nodes, i); } } /// <summary> /// 遞迴遍歷TreeNodes /// </summary> /// <param name="x">列表</param> /// <param name="idx">索引</param> /// <returns></returns> private TreeNodeCollection NodesRecursion(TreeNodeCollection x, int idx) { if (x == null) return null; var y = x[idx].ChildNodes; // 檢測是否全部遍歷,顯示全部勾選 x[idx].Checked = true; if (y.Count == 0) { return null; } else { // 遞迴 for (var i = 0; i < y.Count; i++) { NodesRecursion(y, i); } } return x; }