Reading and displaying data from CSV file on Windows Form Application using C#

27,450

Here is working example to solve your problem.but before you start you should know few things while reading CVS files or excel files. For excel file always first row is the name of columns so you do not need to add columns to Data-table manually

 try
            {
                // your code here 
     string CSVFilePathName = @"path and file name";
                string[] Lines = File.ReadAllLines(CSVFilePathName);
                string[] Fields;
                Fields = Lines[0].Split(new char[] { ',' });
                int Cols = Fields.GetLength(0);
                DataTable dt = new DataTable();
                //1st row must be column names; force lower case to ensure matching later on.
                for (int i = 0; i < Cols; i++)
                    dt.Columns.Add(Fields[i].ToLower(), typeof(string));
                DataRow Row;
                for (int i = 1; i < Lines.GetLength(0); i++)
                {
                    Fields = Lines[i].Split(new char[] { ',' });
                    Row = dt.NewRow();
                    for (int f = 0; f < Cols; f++)
                        Row[f] = Fields[f];
                    dt.Rows.Add(Row);
                }
                dataGridClients.DataSource = dt;  
 }
            catch (Exception ex )
            {
                MessageBox.Show("Error is " + ex.ToString());
                throw;
            }
Share:
27,450
Yash Saraiya
Author by

Yash Saraiya

Updated on July 18, 2020

Comments

  • Yash Saraiya
    Yash Saraiya almost 4 years

    I have written the following code for reading data from .csv file:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.IO;
    
    namespace CSVRead
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            private void buttonRead_Click(object sender, EventArgs e)
            {
                DataTable dataTable = new DataTable();
                dataTable.Columns.Add("Username");
                dataTable.Columns.Add("Password");
                dataTable.Columns.Add("MachineID");
                string filePath = textBox1.Text;
                StreamReader streamReader = new StreamReader(filePath);
                string[] totalData = new string[File.ReadAllLines(filePath).Length];
                totalData = streamReader.ReadLine().Split(',');
                while (!streamReader.EndOfStream)
                {
                    totalData = streamReader.ReadLine().Split(',');
                    dataTable.Rows.Add(totalData[0], totalData[1], totalData[2]);
                }
                dataGridView1.DataSource = dataTable;
            }
    
            private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
            {
    
            }
        }
    }
    

    Here is my CSV File data (readCSV.csv):

    Username, Password, MachineID
    abc, abc, 123
    jkl, jkl, 789
    rst, rst, 456
    

    I have a dataGridView in my Windows Form Application (see image link below as I haven't accumulated enough reputation to post an image) and want to display data from CSV file in this grid view. This code isn't throwing any error/warning but it is simply not executing the way it should. On clicking the Find button the data is not getting displayed in the dataGridView. I am using Visual Studio 2013 Professional.

    WinFormApp

    Silly Me: Oops!!! The above code is working absolutely fine... I was writing my code on Remote machine and I stored my file on local machine. Also, the name of button click event was mistyped.

    NOTE: The answer has been marked as accepted because its logic works too. The code written above in my question is also a working absolutely fine

  • Yash Saraiya
    Yash Saraiya over 8 years
    This is not having any effect on the dataGridView (not getting any error msg or warning though)
  • Yash Saraiya
    Yash Saraiya over 8 years
    Do I need to set autogenerateColumns to false? I am new to C# and VS so I need some helpful easy-to-understand pointers
  • Mohammed Ali
    Mohammed Ali over 8 years
    have you change datagrid name to follow your DG name. i have tested this code and the result is fine.regarding display error add try catch your code and exception
  • Yash Saraiya
    Yash Saraiya over 8 years
    My datagrid name is same as displayed in the properties window. Can you help me with Try catch code?
  • Mohammed Ali
    Mohammed Ali over 8 years
    here is example how to use try catch try { // your code here } catch (Exception ex ) { MessageBox.Show("Error is " + ex.ToString()); throw; } /// please check the code , already updated with try catch
  • Yash Saraiya
    Yash Saraiya over 8 years
    Tried your updated code with try-catch but still it is not having any effect on the dataGridView... not showing any MessageBox either
  • Yash Saraiya
    Yash Saraiya over 8 years
    There wasn't any error in the logic or code... I have updated how silly i was. Thanks for your efforts
  • Yash Saraiya
    Yash Saraiya over 8 years
    There wasn't any error in the logic or code... I have updated how silly i was... Thanks for your efforts
  • Yash Saraiya
    Yash Saraiya over 8 years
    I am marking your answer as accepted because your logic works too!!! My code in the question is correct either