如果维护一个老系统就总会遇到各种问题,而这次是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
的索引切换。

编写代码:
/// <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;
}