kevtho
Usuario (Ecuador)

1 formulario con treeview, id, nombre genero, dos clases Persona y la derivada del formulario ******Clase Pincipal Persona*************** class Persona { private int id; private String nombre; private String genero; private List<Persona> personas; encapsular todo public Persona() { this.id = 0; this.nombre = ""; this.personas = new List<Persona>(); } public Persona(int initialId, String initialNombre) { this.id = initialId; this.nombre = initialNombre; this.personas = new List<Persona>(); } public Persona(int initialId, String initialNombre ,String initialGenero,List<Persona> initialPersona) { this.id = initialId; this.nombre = initialNombre; this.genero=initialGenero; this.personas = initialPersona; } public override string ToString() { return id + " - " + nombre; } } ******form1 principal*************** public partial class Form1 : Form { private Persona listaPersonas; internal Persona ListaPersonas { get { return listaPersonas; } set { listaPersonas = value; } } public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { setEstado("INI"; this.listaPersonas = new Persona(); this.listaPersonas.Id = 1; this.listaPersonas.Nombre = "Personas"; this.listaPersonas.Genero = ""; llenarArbol(); } private void llenarArbol() { treePersonas.Nodes.Clear(); TreeNode nodo = new TreeNode(); nodo.Text = this.listaPersonas.Nombre; nodo.Tag = this.listaPersonas; treePersonas.Nodes.Add(nodo); imprimirRamas(this.listaPersonas.Personas,treePersonas.Nodes[0]); //lista de nodos derivados de nodo padre, nodo padre } private void imprimirRamas(List<Persona> personas, TreeNode nodoPadre) { int i = 0; foreach (Persona persona in personas) //nodo de la lista { TreeNode nodoHijo = new TreeNode(); nodoHijo.Text = persona.Nombre; nodoHijo.Tag = persona; nodoPadre.Nodes.Add(nodoHijo); if (persona.Personas.Count > 0) { imprimirRamas(persona.Personas, nodoPadre.Nodes); } i++; } } private void imprimirRamas(List<Persona> personas) { foreach (Persona persona in personas) { System.Console.WriteLine(persona.Id + " - " + persona.Nombre); if (persona.Personas.Count > 0) { imprimirRamas(persona.Personas); } } } private void buscarPadre(List<Persona> personas, Persona personaPadre, Persona personaHijo) { foreach (Persona persona in personas) { //interes=objeto de la primera lista if (persona.Id == personaPadre.Id) { persona.Personas.Add(personaHijo); break; } if (persona.Personas.Count > 0) { buscarPadre(persona.Personas, personaPadre, personaHijo); } } } private void btnActualizar_Click(object sender, EventArgs e) { Persona persona = new Persona(); persona.Id = Convert.ToInt16(txtId.Text); persona.Nombre = txtNombre.Text; persona.Genero = cmbGenero.SelectedItem.ToString(); Persona personaPadre = (Persona)treePersonas.SelectedNode.Tag; if (this.listaPersonas.Id == personaPadre.Id) listaPersonas.Nombre = personaPadre.Nombre; else actualizaLista(listaPersonas.Personas, personaPadre, persona);//LISTA DEL NODO RAIZ,NODO SELECCIONADO, NODO INGRESADO llenarArbol(); setEstado("INI"; } private void actualizaLista(List<Persona> personas, Persona personaPadre,Persona personaHijo) { foreach (Persona persona in personas) { //interes=objeto de la primera lista if (persona.Id == personaPadre.Id) { persona.Nombre = personaHijo.Nombre; break; } if (persona.Personas.Count > 0) { actualizaLista(persona.Personas, personaPadre, personaHijo); } } } private void btnEliminar_Click(object sender, EventArgs e) { Persona personaPadre = (Persona)treePersonas.SelectedNode.Tag; if (personaPadre.Id != 1) { if (this.listaPersonas.Id == personaPadre.Id) { listaPersonas.Nombre = ""; listaPersonas.Personas.Clear(); } else borrarLista(listaPersonas.Personas, personaPadre);//LISTA DEL NODO RAIZ,NODO SELECCIONADO, NODO INGRESADO llenarArbol(); setEstado("INI"; } else { MessageBox.Show("No se puede eliminar nodo raiz"; } } private void borrarLista(List<Persona> personas, Persona personaPadre) { for (int i = personas.Count - 1; i >= 0; i--) //foreach (Interes interes in intereses) { //interes=objeto de la primera lista if (personas.Id == personaPadre.Id) { personas.Remove(personas); break; } if (personas.Personas.Count > 0) { borrarLista(personas.Personas, personaPadre); } } } private void btnNuevo_Click(object sender, EventArgs e) { setEstado("INS"; } private void btnGuardar_Click(object sender, EventArgs e) { Persona persona = new Persona(); persona.Id = identificador();//Convert.ToInt16(txtId.Text); persona.Nombre = txtNombre.Text; persona.Genero = cmbGenero.SelectedItem.ToString(); /* TreeNode nuevoNodo = new TreeNode(); nuevoNodo.Text = interes.Nombre; nuevoNodo.Tag = interes; treeInteres.SelectedNode.Nodes.Add(nuevoNodo); */ try { Persona personaPadre = (Persona)treePersonas.SelectedNode.Tag; if (this.listaPersonas.Id == personaPadre.Id) listaPersonas.Personas.Add(persona); else buscarPadre(listaPersonas.Personas, personaPadre, persona);//LISTA DEL NODO RAIZ,NODO SELECCIONADO, NODO INGRESADO llenarArbol(); } catch { MessageBox.Show("Seleccionar Nodo padre"; } } private int identificador() { int i = listaPersonas.Personas.Count() + 2; return i; } private void setEstado(String modo) { if (modo == "INI" { txtId.Enabled = false; treePersonas.Enabled = true; txtNombre.Enabled = false; cmbGenero.Enabled = false; btnActualizar.Enabled = false; btnEliminar.Enabled = false; btnNuevo.Enabled = true; btnGuardar.Enabled = false; } if (modo == "INS" { txtId.Enabled = false; treePersonas.Enabled = true; txtNombre.Enabled = true; cmbGenero.Enabled = true; btnActualizar.Enabled = false; btnEliminar.Enabled = false; btnNuevo.Enabled = false; btnGuardar.Enabled = true; } if (modo == "UPD" { txtId.Enabled = false; treePersonas.Enabled = true; txtNombre.Enabled = true; cmbGenero.Enabled = true; btnActualizar.Enabled = true; btnEliminar.Enabled = true; btnNuevo.Enabled = true; btnGuardar.Enabled = false; } } private void treePersonas_AfterSelect(object sender, TreeViewEventArgs e) { Persona personas = new Persona(); personas = (Persona)treePersonas.SelectedNode.Tag; txtId.Text = personas.Id.ToString(); txtNombre.Text = personas.Nombre; cmbGenero.Text = personas.Genero; setEstado("UPD"; } }