예제 #1
0
        private void LoadOrgNodes()
        {
            var orgs = _trans.GetAllOrgnizationInfo();
            IList <ITreeNodeModel> roots = new List <ITreeNodeModel>();


            var orgDicts = orgs.ToDictionary(c => c.Index, c => c);

            foreach (var org in orgs)
            {
                //获取org对应节点
                ITreeNodeModel orgNode = GetOrCreateCacheOrgsNode(org);

                //获取父节点
                //1、判断当前节点是否为根节点(根节点的父节点组织信息是不存在的

                if (!orgDicts.ContainsKey(org.ParentIndex)) //org为根节点
                {
                    roots.Add(orgNode);                     //记录根节点。
                    _roots.Add(orgNode);
                    continue;
                }

                //2、创建父节点
                ITreeNodeModel orgParentNode = GetOrCreateCacheOrgsNode(orgDicts[org.ParentIndex]);

                //3、添加到父节点
                orgParentNode.NodesVM.Add(orgNode);
                orgNode.ParentNodeVM = orgParentNode;
            }
        }
예제 #2
0
        private void LoadDeviceNodes()
        {
            var devs     = _trans.GetAllDevicesInfo();
            var devDicts = devs.GroupBy(g => g.ParentIndex).ToDictionary(g => g.Key, g => g.ToList());

            //设备添加到组织,并给组织计算直接挂载的设备节点数量
            foreach (var kv in devDicts)
            {
                if (_cacheOrgs.ContainsKey(kv.Key))
                {
                    ITreeNodeModel orgNode = _cacheOrgs[kv.Key];
                    foreach (var dev in kv.Value)
                    {
                        ITreeNodeModel devNode = _trans.TransFromNodeInfo(dev);
                        orgNode.NodesVM.Add(devNode);
                        _cacheDeves.Add(dev.Index, devNode);
                    }
                    orgNode.DevCountVM = kv.Value.Count;
                }
                else
                {
                    //异常冗余数据
                }
            }

            //way 1 组织的父节点存在,那么该父节点需要增加子节点的设备数据量;,逐层计算

            var orgs    = _trans.GetAllOrgnizationInfo();
            var orgDict = orgs.ToDictionary(g => g.Index, g => g);   //利用缓存中已存在数据,不要重新查找

            var curOrgHasDevList = new List <string>(devDicts.Keys); //最末节点组织集合,有设备子节点的所有组织

            while (true)
            {
                var orgCountChangeDict = new Dictionary <string, int>();//父组织设备计数变化的集合

                foreach (var item in curOrgHasDevList)
                {
                    if (orgDict.ContainsKey(item))
                    {
                        var orgInfo = orgDict[item];
                        if (orgDict.ContainsKey(orgInfo.ParentIndex))
                        {
                            _cacheOrgs[orgInfo.ParentIndex].DevCountVM += _cacheOrgs[item].DevCountVM;
                            if (!orgCountChangeDict.ContainsKey(orgInfo.ParentIndex))
                            {
                                orgCountChangeDict.Add(orgInfo.ParentIndex, 0);
                            }
                        }
                    }
                }
                if (orgCountChangeDict.Count == 0)
                {
                    break;
                }
                curOrgHasDevList = new List <string>(orgCountChangeDict.Keys);//设置新值
            }
        }
예제 #3
0
파일: TreeList.cs 프로젝트: xbadcode/Rubezh
		internal void InsertNewNode(TreeNode parent, ITreeNodeModel tag, int rowIndex, int index)
		{
			TreeNode node = new TreeNode(this, tag);
			if (index >= 0 && index < parent.Children.Count)
				parent.Children.Insert(index, node);
			else
			{
				index = parent.Children.Count;
				parent.Children.Add(node);
			}
			Rows.Insert(rowIndex + index + 1, node);
		}