public ArrayList AddNivel(TreeView trvw, GISADataset.NivelRow nRow, GISADataset.NivelRow nUpperRow, IDbConnection connection) { ArrayList result = new ArrayList(); GISATreeNode node = null; // Para as EDs (em relação às quais não existem níveis superiores) if (nUpperRow == null) { node = FindTreeNodeByNivelRow(trvw.Nodes, nRow); if (node == null) { node = new GISATreeNode(Nivel.GetDesignacao(nRow)); //Node.Tag = rhRow node.NivelRow = nRow; node.NivelUpperRow = null; GISADataset.TipoNivelRelacionadoRow tnrRow = null; int iconIndex = 0; tnrRow = TipoNivelRelacionado.GetTipoNivelRelacionadoFromRelacaoHierarquica(node.NivelRow, node.NivelUpperRow); iconIndex = -1; if (tnrRow != null) { iconIndex = System.Convert.ToInt32(tnrRow.GUIOrder); } if (nRow.CatCode.Trim().Equals("CA")) { if (iconIndex == -1) { node.ImageIndex = SharedResourcesOld.CurrentSharedResources.NivelImageIncognitoControloAut(); } else { node.ImageIndex = SharedResourcesOld.CurrentSharedResources.NivelImageControloAut(iconIndex); } } else { if (iconIndex == -1) { node.ImageIndex = SharedResourcesOld.CurrentSharedResources.NivelImageIncognito(); } else { node.ImageIndex = SharedResourcesOld.CurrentSharedResources.NivelImageBase(iconIndex); } } node.SelectedImageIndex = node.ImageIndex; trvw.Nodes.Add(node); } result.Add(node); } else { ArrayList ParentNodes = new ArrayList(); GISADataset.RelacaoHierarquicaRow[] TempParentRelations = Nivel.GetParentRelations(nRow, nUpperRow, connection); //Obter os nós pai com base nas rows pai if (TempParentRelations.Length == 0) { ArrayList nodes = null; nodes = AddNivel(trvw, nUpperRow, null, connection); ParentNodes.AddRange(nodes); } foreach (GISADataset.RelacaoHierarquicaRow parentRhRow in TempParentRelations) { ArrayList nodes = null; nodes = AddNivel(trvw, parentRhRow.NivelRowByNivelRelacaoHierarquica, parentRhRow.NivelRowByNivelRelacaoHierarquicaUpper, connection); ParentNodes.AddRange(nodes); } // Neste ponto ParentNodes contém todos os nós a que um nó de nRow deverá ser adicionado foreach (TreeNode parentNode in ParentNodes) { node = FindTreeNodeByNivelRow(parentNode.Nodes, nRow); if (node == null) { node = new GISATreeNode(Nivel.GetDesignacao(nRow)); //node.Tag = rhRow node.NivelRow = nRow; node.NivelUpperRow = nUpperRow; string data = FormatYearsInterval(node.RelacaoHierarquicaRow); if (data.Length > 0) { node.Text = string.Format("{0} {1}", node.Text, data); } if (nRow.CatCode.Trim().Equals("CA")) { node.ImageIndex = SharedResourcesOld.CurrentSharedResources.NivelImageControloAut(System.Convert.ToInt32(TipoNivelRelacionado.GetTipoNivelRelacionadoFromRelacaoHierarquica(node.RelacaoHierarquicaRow).GUIOrder)); } else { node.ImageIndex = SharedResourcesOld.CurrentSharedResources.NivelImageBase(System.Convert.ToInt32(TipoNivelRelacionado.GetTipoNivelRelacionadoFromRelacaoHierarquica(node.RelacaoHierarquicaRow).GUIOrder)); } node.SelectedImageIndex = node.ImageIndex; parentNode.Nodes.Add(node); } result.Add(node); } } return result; }