Click here to Skip to main content
14,828,868 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hello

Can anyone help please,i want to import CSV File into DataGrid using WPF and C#, i have file with 5 columns , first columns is string ,second columns is byte, third is ushort, fourth int32,fifth is int32

in below code am importing only first column fields in datagrid, can anyone help how to get all data in DataGrid,

thanks
C#
private DataTable ReadCSV(string FileName)
      {

          DataTable csvDataTable = new DataTable();
          try
          {
              //no try/catch - add these in yourselfs or let exception happen
              String[] csvData = File.ReadAllLines(FileName);

              //if no data
              if (csvData.Length == 0)
              {
                  return csvDataTable;
              }

              String[] headings = csvData[0].Split(';');

              //for each heading
              for (int i = 0; i < headings.Length; i++)
              {
                  ////replace spaces with underscores for column names
                  //headings[i] = headings[i].Replace(" ", "_");

                  //add a column for each heading
                  csvDataTable.Columns.Add(headings[i]);

              }

              //populate the DataTable
              for (int i = 1; i < csvData.Length; i++)
              {
                  //create new rows
                  DataRow row = csvDataTable.NewRow();

                  for (int j = 0; j < headings.Length; j++)
                  {
                      //fill them
                      row[j] = csvData[i].Split(';')[j];

                  }

                  //add rows to over DataTable

                  csvDataTable.Rows.Add(row);
                  dataGrid1.ItemsSource = csvDataTable.DefaultView;

              }
          }

          catch (Exception ex)
          {
              System.Windows.Forms.MessageBox.Show(ex.Message.ToString());
          }
          //return the CSV DataTable

          return csvDataTable;


      }
Posted
Updated 30-Aug-12 21:46pm
v3

1 solution

You should probarbly add the type of column in the table you are creating:
http://msdn.microsoft.com/en-us/library/hfx3s9wd%28v=vs.80%29.aspx[^]
   
Comments
getanswer 31-Aug-12 4:28am
   
hi, thanks for reply, can you help me please , i tried but getting error, "Column name already belongs to DataTable", thanks
Kenneth Haugland 31-Aug-12 4:42am
   
All columnnames must be unique, otherwise you'll get that error.
getanswer 31-Aug-12 4:45am
   
hi, yes i have all columns unique name,

am taking Heading from this csvDataTable.Columns.Add(headings[i]);

i think this is irrespctive of variable, either string or ushort or int.

thanks
Kenneth Haugland 31-Aug-12 4:51am
   
csvDataTable.Columns.Add(headings[i].ToString(), , typeof(String))?
getanswer 31-Aug-12 4:56am
   
same error, "Column name already belongs to DataTable",
Kenneth Haugland 31-Aug-12 5:33am
   
Have you already constructed the table with the columns? If so you need to clear the DataTable before adding the columns.
getanswer 31-Aug-12 6:30am
   
Hi, yes i have predefined Columns,
try
{
//no try/catch - add these in yourselfs or let exception happen
String[] csvData = File.ReadAllLines(FileName);

//if no data
if (csvData.Length == 0)
{
return csvDataTable;
}

String[] headings = csvData[0].Split(';');

//for each heading
for (int i = 0; i < headings.Length; i++)
{
////replace spaces with underscores for column names
//headings[i] = headings[i].Replace(" ", "_");

//add a column for each heading
csvDataTable.Columns.Add(headings[i]);

}

see this code, may be you get some idea to get answer, thanks
Kenneth Haugland 31-Aug-12 6:45am
   
You cant add the columns if they exist. You could just delete the code if DataTable.Column.Count > 0 ....
getanswer 31-Aug-12 8:05am
   
yes i did, error is "could not find Column 0"

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)




CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900