TreeView的递归分析

TreeNodeCollection的作用就是装载TreeNode节点。

TreeNodeCollection本身不具备递归的特征。TreeNode的ChildNodes属性具备递归的特征。


递归分析:

关键语句:

 AddStandardBudgetAccountsTreeNode(pSBAMDLList, pBudgetCycleID, pBudgetTypeID, sbaNode.ChildNodes, SBAMDL.ID);
每次去当前节点ID作为循环递归的Pid。也就是寻找自己的子科目。

数据源是pSBAMDLList,每次递归都要循环pSBAMDLList.Count次。

递归的出口是:遍历的结束即为递归的出口,则循环pSBAMDLList.Count次,递归返回。

最终构造一个TreeNodeCollection的对象。此对象添加到TreeNode..ChildNodes.Add(*)中。



  /// <summary>
    /// 添加标准预算科目树节点
    /// </summary>
    /// <param name="pSBAMDL">标准预算科目信息</param>
    /// <param name="pNode">预算类型节点</param>
    public void AddStandardBudgetAccountsTreeNode(IList<StandardBudgetAccountsMDL> pSBAMDLList, string pBudgetCycleID, string pBudgetTypeID, TreeNodeCollection nodes, string pid)
    {
        foreach (StandardBudgetAccountsMDL SBAMDL in pSBAMDLList)
        {
            if (SBAMDL.ParentAccountID == pid)
            {
                TreeNode sbaNode = new TreeNode();
                sbaNode.ToolTip = SBAMDL.AccountCode;
                sbaNode.Value = SBAMDL.ID;
                sbaNode.Text = SBAMDL.AccountName;
                sbaNode.Target = "Chmain";
                sbaNode.ImageUrl = Globals.GetOrgImgUrl_t(OT.Organization.EnumOrgTreeNode.Function);
                sbaNode.NavigateUrl = "StandardBudgetAccountsList.aspx?BudgetType=" + pBudgetTypeID + "&BudgetCycleID=" + pBudgetCycleID + "&PID=" + sbaNode.Value;
                AddStandardBudgetAccountsTreeNode(pSBAMDLList, pBudgetCycleID, pBudgetTypeID, sbaNode.ChildNodes, SBAMDL.ID);
                nodes.Add(sbaNode);  //这行代码移动到AddStandardBudgetAccountsTreeNode前面,效果是一样的,并且更好理解,放在最后的话,需要理解递归的真正内涵,即找到出口点
            }
        }

其他的一个好例子: http://www.cnblogs.com/duhongyu216/articles/1702591.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值