lunes, 15 de febrero de 2016

Directorios

PRIMER FORMULARIO

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Taller4_Directorios
{
    public partial class Form1 : Form
    {
        private MiBD mibase = new MiBD();
        private string nuevo;
        Directorio directorioSeleccion;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            agregarImagenesListview();
            mostrarArchivosTree();
        }
        
        private void mostrarArchivosTree()
        {
            Directorio dirPadre = new Directorio();
            List<Directorio> directorioLista = new List<Directorio>();
            
            var consulta1 = from archivoRaiz in mibase.directorio
                            where archivoRaiz.id_padre == null
                            select archivoRaiz;
            foreach (var iter in consulta1)
            { dirPadre=iter; }

            TreeNode nodoRaiz = new TreeNode(dirPadre.nombre);
            nodoRaiz.Tag = dirPadre;
            treeDirectorios.Nodes.Add(nodoRaiz);
            
            var consulta2 = from archivo in mibase.directorio
                            where archivo.id_padre == dirPadre.id
                            select archivo;

            foreach (var iter in consulta2)
            {
                directorioLista.Add(iter);
            }
                agregarNodos(treeDirectorios.Nodes[0], directorioLista);            
        }
        private void agregarNodos(TreeNode nodoPadre, List<Directorio> directoriosHijo)
        {
            try
            {
                          
                List<Directorio> directorioLista2 = new List<Directorio>();
                                
                foreach (var iter in directoriosHijo)
                {
                    TreeNode nodoHijo = new TreeNode(iter.nombre);
                    nodoHijo.Tag = iter;
                    nodoPadre.Nodes.Add(nodoHijo);
                    var consulta2 = from dirHijo in mibase.directorio
                                    where dirHijo.id_padre == iter.id
                                    select dirHijo;
                    foreach (var iterHijo in consulta2)
                    {
                        directorioLista2.Add(iterHijo);
                        agregarNodos(nodoHijo, directorioLista2);
                        directorioLista2.Clear();
                    }
                }                               
            }
            catch (Exception)
            { }
        }
        public void agregarArchivo(Directorio padreBuscado, Directorio hijo)
        {
            Directorio directorioBuscado = new Directorio();
            List<Directorio> directorioLista = new List<Directorio>();

            var consulta3 = from archivoRaiz in mibase.directorio
                            //where archivoRaiz.id_padre == null
                            select archivoRaiz;
            foreach (var iter in consulta3)
            {
                directorioBuscado = iter; directorioLista.Add(iter);
                if (directorioBuscado.Equals(padreBuscado))
                {
                    Console.WriteLine("Archivo padre localizado:" + directorioBuscado);
                    Directorio insertarDir = new Directorio();
                    insertarDir.nombre = hijo.nombre;
                    insertarDir.id_padre = padreBuscado.id;
                    mibase.directorio.InsertOnSubmit(insertarDir);
                    mibase.SubmitChanges();
                }
            }         
            
            //if (directorioBuscado.Equals(padreBuscado))
            //{
            //    Console.WriteLine("Archivo padre localizado:" + directorioBuscado);
            //    Directorio insertarDir = new Directorio();
            //    insertarDir.nombre = hijo.nombre;
            //    insertarDir.id_padre = padreBuscado.id;
            //    mibase.directorio.InsertOnSubmit(insertarDir);
            //    mibase.SubmitChanges();
            //}
            //else
            //{
            //    Console.WriteLine("Estructura iterada:");
            //    Console.WriteLine(directorioBuscado);                
            //    Directorio padre = buscarArchivo(directorioLista, padreBuscado);
            //    Console.WriteLine("Valor final de archivo padre:" + padre);
            //    hijo.id_padre = padre.id;             
            //    mibase.directorio.InsertOnSubmit(hijo);
            //    mibase.SubmitChanges();
                
            //}
        }
        public Directorio buscarArchivo(List<Directorio> listaArchivos, Directorio padreBuscado)
        {
            Directorio auxiliar = new Directorio("AUX");
            List<Directorio> directorioLista = new List<Directorio>();
            var consulta3 = from archivoRaiz in mibase.directorio
                            select archivoRaiz;
            foreach (var iter in consulta3)
            {
                directorioLista.Add(iter);
            }  

            foreach (var iterArchivo in listaArchivos)
            {
                Console.WriteLine(iterArchivo);

                if (auxiliar.Equals(padreBuscado))
                {
                    Console.WriteLine("Archivo padre localizado:" + auxiliar);
                    return auxiliar;
                }
                else if (iterArchivo.Equals(padreBuscado))
                {
                    Console.WriteLine("Archivo padre localizado:" + iterArchivo);
                    return iterArchivo;
                }
                else
                {
                    if (directorioLista.Count() > 0)
                    {
                        auxiliar = buscarArchivo(directorioLista, padreBuscado);
                    }
                }
            }
            return auxiliar;
        }


        //Metodos para llenar el ListView
        private void agregarImagenesListview()
        {/*
            ImageList imagenes = new ImageList();
           // imagenes.Images.Add(new Bitmap(@"E:\EPN\sexto\phv\PHV\ListView1_TreeView1\ListView1\Imagenes\carpeta.jpg"));
            //imagenes.Images.Add(new Bitmap(@"E:\EPN\sexto\phv\PHV\ListView1_TreeView1\ListView1\Imagenes\documento2.JPG"));
            imagenes.Images.Add(new Bitmap(@"C:\Users\Sony\Desktop\Taller4_finalPHV\ListView1\ListView1\Imagenes\triste.JPEG"));
            imagenes.Images.Add(new Bitmap(@"C:\Users\Sony\Desktop\Taller4_finalPHV\ListView1\ListView1\Imagenes\tulipan.JPEG"));


            lstvDirectorios.LargeImageList = imagenes;

        */    
        }
        
        private void mostrarListaIco(List<Directorio> archivos)
        {
            try
            {
                lstvDirectorios.View = View.LargeIcon;
                lstvDirectorios.Items.Clear();
                foreach (Directorio iterArchivo in archivos)
                {
                    ListViewItem itemLista = new ListViewItem(Convert.ToString(iterArchivo.nombre), 0);
                    itemLista.Tag = iterArchivo;
                    lstvDirectorios.Items.Add(itemLista);
                    itemLista.SubItems.Add(iterArchivo.nombre);
                }
            }
            catch (Exception)
            { }
        }
        private void traerHijos(Directorio archivoH)
        {
            var consultaDir = from selDirLis in mibase.directorio
                              where selDirLis.id_padre == archivoH.id
                              select selDirLis;
            lstvDirectorios.Items.Clear();                
            foreach (var iterDir in consultaDir)
            {
                ListViewItem itemLista = new ListViewItem(iterDir.nombre, 1);
                itemLista.Tag = iterDir;
                lstvDirectorios.Items.Add(itemLista);
                itemLista.SubItems.Add(iterDir.nombre);
            }
        }
        private void mostrarHijos()
        {
            try
            {
                Directorio archivoSel = (Directorio)lstvDirectorios.SelectedItems[0].Tag;
                this.Text = archivoSel.nombre;
                traerHijos(archivoSel);
            }
            catch (Exception ex)
            { }
        }

        private void atras()
        {
            try
            {
                //directorioSeleccion = (Directorio)lstvDirectorios.SelectedItems[0].Tag;
                List<Directorio> directorioLista = new List<Directorio>();
                var consultaDir = from selDirLis in mibase.directorio
                                  where selDirLis.id_padre ==1
                                  select selDirLis;
                foreach (var iter in consultaDir)
                { directorioLista.Add(iter); }

                mostrarListaIco(directorioLista);
            }
            catch (Exception)
            { }
        }
        // eventos
        private void nuevoDir_Click(object sender, EventArgs e)
        {
            FrmCrearNuevo crearNuevo = new FrmCrearNuevo(nuevo);
            crearNuevo.ShowDialog();
            directorioSeleccion = (Directorio)treeDirectorios.SelectedNode.Tag;

            Directorio archivoNuevo = new Directorio(crearNuevo.NuevoArchivo);
            agregarArchivo(directorioSeleccion, archivoNuevo);
            treeDirectorios.Nodes.Clear();
            mostrarArchivosTree();

        }

        private void treeDirectorios_AfterSelect(object sender, TreeViewEventArgs e)
        {
            directorioSeleccion = (Directorio)treeDirectorios.SelectedNode.Tag;
            List<Directorio> dirListaSeleccion = new List<Directorio>();
            var consultaDir = from dirP in mibase.directorio
                              where dirP.id_padre == directorioSeleccion.id
                              select dirP;
            foreach(var iterDir in consultaDir)
            {
                dirListaSeleccion.Add(iterDir);
            }
            mostrarListaIco(dirListaSeleccion);
        }

        private void lstvDirectorios_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            mostrarHijos();
        }

        private void btnAtras_Click(object sender, EventArgs e)
        {
            atras();
        }
    }
}


==========================FRM CREAR NUEVO========================
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Taller4_Directorios
{
    public partial class FrmCrearNuevo : Form
    {
        private string nuevoArchivo;

        public string NuevoArchivo
        {
            get { return nuevoArchivo; }
            set { nuevoArchivo = value; }
        }

        public FrmCrearNuevo()
        {
            InitializeComponent();
        }

        public FrmCrearNuevo(string nuevo)
        {
            InitializeComponent();
            this.nuevoArchivo = nuevo;
        }
        private void btnGuardar_Click(object sender, EventArgs e)
        {
            nuevoArchivo = @"\" + txtNuevo.Text;
            this.Close();
        }

        private void FrmCrearNuevo_Load(object sender, EventArgs e)
        {

        }
    }
}

================================DIRECTORIO============================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq.Mapping;
using System.Data.Linq;

namespace Taller4_Directorios
{
    [Table(Name="directorio")]
    public class Directorio
    {
        [Column(IsPrimaryKey=true, IsDbGenerated=true, AutoSync=AutoSync.OnInsert )]
        public int id {get; set;}
        [Column]
        public String nombre { get; set; }
        [Column]
        public int? id_padre { get; set; }
        //[Column]
        //public byte imagen { get; set; }
        public Directorio()
        { }
        public Directorio(String iniNombre)
        { this.nombre = iniNombre; }
        public override string ToString()
        {            
            return nombre;
        }
             
    }
    public class directorioJerarquia
    {
        public int id { get; set; }
        public String nombre { get; set; }
        public byte imagen { get; set; }
        public List<directorioJerarquia> directorioHijo { get; set; }
    }
}


==========================JERARQUIA DIRECTORIO========================

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Web.UI.WebControls;

namespace Taller4_Directorios
{
    class JerarquiaDirectorios
    {
      /*  public static List<Directorio> obtenerDirectorios()
        {
            string sql = @"select d.id, c.nombre, c.id_padre, c.imagen
                            from directorio d
                            order by c.id";
            List<Directorio> directorios = new List<Directorio>();

            SqlConnection conn = MiBD.obtenerConexion();
            SqlCommand cmd = new SqlCommand(sql, conn);
            IDataReader reader = cmd.ExecuteReader();

            while (reader.Read())
            {
                directorios.Add(convertirDirectorio(reader));
            }
            return directorios;
        }
        public static Directorio convertirDirectorio(IDataReader leer)
        {
            return new Directorio()
            {
                id = Convert.ToInt32(leer["id"]),
                id_padre = leer["id_padre"] == DBNull.Value ? null : (int?)Convert.ToInt32(leer["id_padre"]),
                nombre = Convert.ToString(leer["nombre"]),
                imagen = Convert.ToByte(leer["imagen"])
            };
        }

        public static List<directorioJerarquia> obtenerDirectorioJerarquico()
        {
            List<Directorio> directoriosList = obtenerDirectorios();
            List<directorioJerarquia> query = (from item in directoriosList
                                               where item.id_padre == null
                                               select new directorioJerarquia
                                               {
                                                   id = item.id,
                                                   nombre = item.nombre,
                                                   directorioHijo = obtenerHijos(item.id, directoriosList)
                                               }).ToList();
            return query;
        }

        private static List<directorioJerarquia> obtenerHijos(int idDir, List<Directorio> directorioList)
        {
            List<directorioJerarquia> query = (from item in directorioList
                                               let tieneHijos = directorioList.Where(o => o.id_padre == item.id).Any()
                                               where item.id_padre == idDir
                                               select new directorioJerarquia
                                               {
                                                   id = item.id,
                                                   nombre = item.nombre,
                                                   directorioHijo = tieneHijos ? obtenerHijos(item.id, directorioList) : null
                                               }).ToList();
            return query;
        }

        private void CrearNodoHijo(List<directorioJerarquia> directorio, System.Web.UI.WebControls.TreeNode parentNode)
        {
            directorio.ForEach(x =>
            {
                System.Web.UI.WebControls.TreeNode node = new System.Web.UI.WebControls.TreeNode(x.nombre, Convert.ToString(x.id));
                if (x.directorioHijo != null)
                {
                    CrearNodoHijo(x.directorioHijo, node);
                }
                if (parentNode == null)
                    treeDirectorios.Nodes.Add(node);
                else
                    parentNode.ChildNodes.Add(node);
            });
        }*/
    }
}


=================================CONEXION============================

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq;
using System.Data.Sql;
using System.Data.SqlClient;

namespace Taller4_Directorios
{
    public class MiBD:DataContext
    {
        public Table<Directorio> directorio;
        public MiBD() : base(Properties.Settings.Default.conexion) { }
        public static SqlConnection obtenerConexion()
        {
            SqlConnection con = new SqlConnection(Properties.Settings.Default.conexion);
            con.Open();
            return con;
        }
    }
}





No hay comentarios:

Publicar un comentario