public OpcionSeguridadBEList Ordenar() { //Sacamos el mínimo nivel del aplicativo. int minimoNivel = -1; for (int i = 0; i < this.Count; i++) { if (this[i].CSTRUCT.Length < minimoNivel || minimoNivel == -1) { minimoNivel = this[i].CSTRUCT.Length; } } //Sacamos todos lo elementos del mínimo nivel. OpcionSeguridadBEList oListaResultado = new OpcionSeguridadBEList(); OpcionSeguridadBEList oListaPrimerNivel = new OpcionSeguridadBEList(); for (int i = 0; i < this.Count; i++) { if (this[i].CSTRUCT.Length == minimoNivel) { oListaPrimerNivel.Add(this[i]); } } //Se llama al metodo recursivo encargado de ordenar la lista. OrdenaRecursivo(ref oListaResultado, oListaPrimerNivel, this); return(oListaResultado); }
private void OrdenaRecursivo(ref OpcionSeguridadBEList oListaResultado, OpcionSeguridadBEList oListaNivelAnt, OpcionSeguridadBEList oListaActual) { OpcionSeguridadBEList oListaSiguienteNivel = null; oListaNivelAnt.Ordenar("VDEMEN", direccionOrden.Ascending); for (int i = 0; i < oListaNivelAnt.Count; i++) { oListaResultado.Add(oListaNivelAnt[i]); oListaSiguienteNivel = new OpcionSeguridadBEList(); for (int j = 0; j < oListaActual.Count; j++) { if (oListaActual[j].CSTRUCT.Length == oListaNivelAnt[i].CSTRUCT.Length + 2 && oListaActual[j].CSTRUCT.IndexOf(oListaNivelAnt[i].CSTRUCT) == 0) { oListaSiguienteNivel.Add(oListaActual[j]); } } if (oListaSiguienteNivel.Count > 0) { OrdenaRecursivo(ref oListaResultado, oListaSiguienteNivel, oListaActual); } } }