none
Listar un directorio y rellenar un checkbox o datagridview C# RRS feed

  • Pregunta

  • Estimados

          Junto con saludar vengo con la siguiente consulta, necesito llenar un checkbox o datagridview con los nombre de los archivos PDF que se encuentran en un directorio especifico, luego de esto cada vez que se haga clic sobre una fila del checkbox o datagridview este me indique la ruta del archivo y se muestre dicho archivo en un picture box. Al realizar el check de estos se puedan enviar masivamente por medio de FTP.

    Por el momento utilice dicho codigo para rellenar el datagridview, bajo este concepto logro llenar cada fila con la ruta del archivo pero no con su nombre.

    string[] files = Directory.GetFiles(@"D:\FirmaDigital", "*.pdf");
                List<Archivo> lista = new List<Archivo>();
    
                foreach (string item in files)
                {
                    lista.Add(new Archivo()
                    {
                        name = item
                    });
    
                }
                dgvPdfDocument.DataSource = lista;

    Anteriormente utilice este codigo, el cual me mostraba por cada caracteristica del archivo.

    FileInfo[] archivos = folder.GetFiles();
                        foreach (var a in archivos)
                        {
                            checkedListBox1.Items.Add(a.Name);
                        }
    Bueno realmente no se como solucionar dicho problema, si es posible que alguien pueda guiarme, se lo agradeceria
    lunes, 11 de junio de 2018 14:53

Todas las respuestas

  • Ah pues está de suerte, porque justamente en mis repositorios GIT (el enlace aparece en mi firma) tengo un proyecto llamado wj.DataBinding.  El resumen y el Wiki está en inglés y español.  Veo que tiene una clase Archivo que representa el archivo.  ¡Genial!  Lo mejor es vincular a colecciones de objetos tal y como lo está haciendo usted.

    Entonces veo que necesita resolver dos problemas:  Obtener el nombre del archivo, y permitir la selección con casillas de verificación.

    Imagino que su clase Archivo luce algo así:

    public class Archivo
    {
        public string name { get; set; }
    }

    Le recomiendo usar un único lenguaje para nombrar cosas.  Yo personalmente programo siempre en inglés.  En fin, baje la versión 1.2 de wj.DataBinding, agréguelo como referencia a su proyecto, y reescriba su clase así:

    public class Archivo : wj.DataBinding.NotifyPropertyChanged
    {
        //Esta era su propiedad name, que renombré porque deseo usar "name" para el nombre del archivo.
        private string m_fullPath;
        public string FullPath
        {
            get { return m_fullPath; }
            set
            {
                bool changed = SaveAndNotify(ref m_fullPath, value);
                if (changed)
                {
                    RaisePropertyChanged(nameof(Name));
                }
            }
        }
    
        //Propiedad calculada.  Resolución de uno de sus problemas.
        public string Name
        {
            get { return System.IO.Path.GetFileName(FullPath); }
        }
    }

    Luego cree la clase Selectable que puede encontrar en el Wiki.  La reproduzco aquí por facilidad:

    public class Selectable<TEntity> : wj.DataBinding.Container<TEntity>
        where TEntity:  System.ComponentModel.INotifyPropertyChanged
    {
        private bool m_selected;
        public bool Selected
        {
            get { return m_selected; }
            set { SaveAndNotify(ref m_selected, value); }
        }
    
        public Selectable(TEntity dataObject)
            : base(dataObject)
        { }
    }

    Ya puede resolver el problema de las casillas de verificación.  Para llenar la grilla:

    string[] files = Directory.GetFiles(@"D:\FirmaDigital", "*.pdf");
    List<Selectable<Archivo>> lista = new List<Selectable<Archivo>>();
    foreach (string item in files)
    {
        Archivo arch = new Archivo()
        {
            FullPath = item
        };
        lista.Add(new Selectable<Archivo>(arch));
    }
    dgvPdfDocument.DataSource = lista;

    Si su DGV está configurado para generar columnas automáticamente, pues verá 3 columnas:  Una que muestra una casilla de verificación, otra que muestra el nombre del archivo, y otra que muestra la ruta completa del archivo.

    Si no genera columnas automáticamente, entonces usando el diseñador de Visual Studio agregue una columna de tipo Checkbox (si quiere le pone título, si no quiere no) y asigna el valor Selected a la propiedad DataPropertyName.  Agregue otra columna más, de tipo texto y asigna el valor Name a su propiedad DataPropertyName.  Y listo, diría yo.


    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT

    lunes, 11 de junio de 2018 20:16
    Moderador
  • Gracias webJose pero tome la decision de usar un checklistbox sobre un datagridview por lo tanto requiero solo el nombre del documento y este al ser clic sobre uno de los items del check me muestre en un mensaje la ruta del archivo
    lunes, 11 de junio de 2018 21:02