zoukankan      html  css  js  c++  java
  • 递归获取一个树层次结构(合同清单)的部分选择项(计量合同清单),以及递归删除部分清单

    递归获取一个树层次结构(合同清单)的部分选择项(计量合同清单),以及递归删除部分清单,说明如下:

    1、递归获取一个树层次结构(合同清单)的部分选择项

    //  参数1  EQConList clst  是选择需要加入 集合两者清单项,注意 两者的是不同的,只是 编码、名称、单位、类型相同。

     private EQConSttList addSelectedandParent(EQConList clst,  CollectionSrc sttcollSource)

     {

          //首先从  sttcollSource (加入的集合)中查找,是否存在对应编码与名称的细目。

          EQConSttList curnode = sttcollSource.List.OfType<EQConSttList>().FirstOrDefault<EQConSttList>(slt => slt.Code == clst.Code && slt.Name == clst.Name);

         if ( curnode == null)
        {
               curnode = View.ObjectSpace.CreateObject<EQConSttList>();
               curnode.Type = clst.Type;
               curnode.Code = clst.Code;
              curnode.Name = clst.Name;

             if (clst.Parent != null)

             { //然后增加父
                    curnode.Parent = addcurandparent(clst.Parent, curSettle, sttcollSource);
              }               
           }

           return curnode;
     }

    2、删除选择节点 子节点 以及 没有其它同级 的父节点。

     //动作按钮事件的执行

    private void DeleteSttList_Execute(object sender, SimpleActionExecuteEventArgs e)
    {

          //表示 选中行所在的集合源  List
          PropertyCollectionSource sttcollSource = (PropertyCollectionSource)((ListView)View).CollectionSource;      

          EQConSettle curSettle = sttcollSource.MasterObject as EQConSettle;            // 分录的表头      

          EQConSttList curlst = (EQConSttList)View.CurrentObject;                               //选中的当前行对象

          EQConSttList parentlst = curlst.Parent;                                                             //选中的当前行对象 的父对象

          if (curlst != null)
          {
               delcur_children(curlst, sttcollSource);                //迭代删除子节点对象
               delparent(parentlst, sttcollSource);                    //迭代删除父节点对象,如果没有其它同级对象
          }
    }

    //迭代删除子节点对象, 参数1 是 选中的节点对象,参数2 是 节点所在集合。

    private void delcur_children(EQConSttList mynode, PropertyCollectionSource sttcoll)
    {
             HashSet<EQConSttList> childset = new HashSet<EQConSttList>();     //创建一个临时集合,用于保存将要删除的子节点
             foreach (EQConSttList childnode in sttcoll.List)
             {
                     if (mynode.Equals(childnode.Parent))
                     {
                            childset.Add(childnode);
                     }
              }
              foreach (EQConSttList childnode in childset)
              {
                     delcur_children(childnode, sttcoll);
              }
               sttcoll.Remove(mynode);
    }

    //迭代删除父节点对象,如果没有其它同级对象,参数同上

    private void delparent(EQConSttList mynode, PropertyCollectionSource sttcoll)
    {
           if (mynode == null)  return;
           foreach (EQConSttList node in sttcoll.List)
           {
                  if (mynode.Equals(node.Parent)) return;
           }
           EQConSttList parentnode = mynode.Parent;
           sttcoll.Remove(mynode);
           delparent(parentnode, sttcoll);
    }

  • 相关阅读:
    文件权限
    函数指针
    位操作
    宏定义
    GNU gcc常用编译选项
    SHELL编程(六)---------数组和函数
    26.使用中间件的方式包装日志输出
    25.最基本的日志输出方式,内置日志包使用
    24.把熔断器整合到我们的客户端代码中(初步)
    23.熔断器学习,熔断器的三种状态,状态获取
  • 原文地址:https://www.cnblogs.com/hopesun/p/7659433.html
Copyright © 2011-2022 走看看