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; } }
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);//设置新值 } }
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); }