天天看點

Visual Studio 2010下ASPX頁面的TreeView控件循環周遊

如果維護一個老系統就總會遇到各種問題,而這次是TreeView的循環周遊。對于Visual Studio2010上aspx頁面的TreeView控件,我感受到了什麼叫集微軟之大智慧。與二叉樹型不一樣。我解釋一下,他提供TreeNode和集合TreeNodeCollection,彼此上下級通過TreeNode的ChildNodes來實作連接配接的。這不就是B樹結構嗎?

如果維護一個老系統就總會遇到各種問題,而這次是TreeView的循環周遊。對于Visual Studio2010上aspx頁面的

TreeView

控件,我感受到了什麼叫集微軟之大智慧。與二叉樹型不一樣。我解釋一下,他提供

TreeNode

和集合

TreeNodeCollection

,彼此上下級通過

TreeNode

ChildNodes

來實作連接配接的。這不就是B樹結構嗎?

思考和動手

這個模型設計上很簡單(如圖所示),但是在周遊的時候卻多了清單

List

的索引,而沒有Next()的疊代器,就導緻用

For

Foreach

疊代時,無法處理

父Nodes

子Nodes

的索引切換。

Visual Studio 2010下ASPX頁面的TreeView控件循環周遊

編寫代碼:

/// <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;
}           
c#