Underc0de

Foros Generales => Dudas y pedidos generales => Mensaje iniciado por: fleshworm en Julio 28, 2017, 12:04:59 AM

Título: [SOLUCIONADO] CsvFileReader en C# Visual Studio (Populate DataGridView1)
Publicado por: fleshworm en Julio 28, 2017, 12:04:59 AM
Saludos, bueno comento soy algo nuevo para la plataforma de Visual Studio C# (.Net) y pues tengo algunos meses realisando algunos ejersicios donde utilizo una libreria de manipulacion de archivos de datos separados por comma que me permite leer y escribir en estos (Comento que tengo unos dos diaz utilizandola y solo he conseguido hechar a andar la classe de CsvFileRead pero no dudo que la de escritura funcione igual.) queria saber como reproducir el contenido en el control de dataGridView1 de windows form, si me dirigieran en la direccion correcta o resolvieran mi duda se los agradeceria?

Código (csharp) [Seleccionar]

private void readValues(){
List<string> columns = new List<string>();
string value = string.Empty;
using(var reader = new CsvFileReader(@"C:\csvEditor\appData\data.csv")){
  while(reader.ReadRow(columns)){
   value = value + reader.CurrLine;
  }
  dataGridView1.Columns.Add(value);
}
}


Pd Gracias por leer!
Título: Re:[DUDA] CsvFileReader en C# Visual Studio (Populate DataGridView1)
Publicado por: fleshworm en Julio 30, 2017, 10:45:51 PM
Saludos, comento gracias por leer! Ya encontre como leer los valores escritos en el .csv en el control dataGridView1 y trata en convertir los valores leidos por la rutina en un arreglo o cadena (Array) para que el control los organize alrededor de la cantidad de columnas si no me equivoco. Hasta ahora me ha funcionado de la manera que lo explico, sugerencias son bienvenidas.

Código (csharp) [Seleccionar]

string[] Lines = values.Split(new string[]{","}, StringSplitOptions.None);
dataGridView1.Rows.Add(Lines);

Algo que no tome muy en cuenta es que pues ahora que estudio ciencias de computos hay temporadas de conding que los indices son secuenciales lo que significa que si la rutina de escribir el estilo de el control esta despues de que la rutina organise el contenido de esta se desploma o evita cambios al estilo y el control se reescribe.
Código (csharp) [Seleccionar]

private static void btnRead_Click(Object sender, EventArgs e){
styleDataGridView1();
readCsvValues();
}


PD Yolo...
Título: Re:[SOLUCIONADO] CsvFileReader en C# Visual Studio (Populate DataGridView1)
Publicado por: fudmario en Agosto 03, 2017, 12:08:28 AM

Hola,
De forma alternativa podrias usar el NameSpace: Microsoft.VisualBasic.FileIO (https://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio(v=vs.110).aspx), solo debes referenciarla.


Una vez  hecho esto, usar la Clase: TextFieldParser (https://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.textfieldparser(v=vs.110).aspx).


Un ejemplo de Uso:


Código (csharp) [Seleccionar]

StringReader csv = new StringReader("underc0de, Net, Developer");


var tfp = new TextFieldParser(csv);
tfp.SetDelimiters(",");
string[] fieldData = tfp.ReadFields();


//Debug.Assert(fieldData != null, "fieldData != null");
//if (fieldData == null) return;
foreach (string value in fieldData)
{
MessageBox.Show(value);
}





Para lo que pides, podrias hacerlo de esta forma:




Código (csharp) [Seleccionar]



        private static DataTable ReadCSVToDT(string filepath)
        {
            DataTable dt = new DataTable();


            try
            {


                using (var tfp = new TextFieldParser(filepath))
                {
                    tfp.SetDelimiters(",");
                    tfp.HasFieldsEnclosedInQuotes = true;
                    var colFields = tfp.ReadFields();
                    if (colFields != null)
                        foreach (var column in colFields)
                        {
                            var datecolumn = new DataColumn(column) {AllowDBNull = true};
                            dt.Columns.Add(datecolumn);
                        }


                    while (!tfp.EndOfData)
                    {
                        string[] fieldData = tfp.ReadFields();
                       // Debug.Assert(fieldData != null, "fieldData != null");
                        for (var i = 0; i < fieldData.Length; i++)
                        {
                            if (fieldData[i] == "")
                            {
                                fieldData[i] = null;
                            }
                        }
                        dt.Rows.Add(fieldData);
                    }
                }
            }
            catch (Exception ex)
            {
               // MessageBox.Show(ex.ToString());
            }
            return dt;
        }







Ejemplo de Uso:


Código (csharp) [Seleccionar]

dataGridView1.DataSource = ReadCSVToDT(@"C:\Users\fudmario\Desktop\Sample.csv");