Visual Studio 2010下ASPX页面的TreeView控件循环遍历

本文探讨了在Visual Studio 2010的ASP.NET环境中,如何处理TreeView控件的循环遍历问题。作者指出,TreeView的数据结构类似于B树,但遍历时缺乏迭代器,导致在使用For或Foreach时处理父子节点的切换变得复杂。文章提供了递归遍历的代码示例,并在后续更新中提及了该问题实际上属于N叉树的遍历问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果维护一个老系统就总会遇到各种问题,而这次是TreeView的循环遍历。对于Visual Studio2010上aspx页面的TreeView控件,我感受到了什么叫集微软之大智慧。与二叉树型不一样。我解释一下,他提供TreeNode和集合TreeNodeCollection,彼此上下级通过TreeNodeChildNodes来实现连接的。这不就是B树结构吗?

思考和动手

这个模型设计上很简单(如图所示),但是在遍历的时候却多了列表List的索引,而没有Next()的迭代器,就导致用ForForeach迭代时,无法处理父Nodes子Nodes的索引切换。

思考图

编写代码:

/// <summary>
/// 演示主函数
/// </summary>
/// <returns></returns>
public void main()
{
    var nodes = treeView.Nodes;
    // 遍历列表
    //for (var i = 0; i < nodes.Count; i++)
    //{
    //		NodesRecursion(nodes);
    //}
	
	for (var node in nodes) {
		NodesRecursion(nodes.ChildNodes);
	}
}

/// <summary>
/// 递归遍历TreeNodes
/// </summary>
/// <param name="x">列表</param>
/// <param name="idx">索引</param>
/// <returns></returns>
private void NodesRecursion(TreeNodeCollection x)
{
    //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;
    
	for (var tn in x)
	{
		NodesRecursion(tn.ChildNodes);
	}
}

Change in Dec.3rd.2021:

最近研究算法,发现属于N叉树所以修改了遍历。但我留下原来的代码已警示自己。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值