Search code examples
c#listviewcsv

CSV to ListView


I'm trying to export my CSV file to ListView.

ListView looks like this:

http://screenshooter.net/7827870/vrwwokd

I managed to export csv file but it puts everything in "Name" column.

private void toolStripButton1_Click(object sender, EventArgs e)
{


    using (OpenFileDialog openFileDialog1 = new OpenFileDialog())
        try
        {
            openFileDialog1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            openFileDialog1.DefaultExt = "csv";
            openFileDialog1.Title = "Open file";
            openFileDialog1.Filter = "CSV (*.csv)|*.csv";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                FileStream srcFS;
                srcFS = new FileStream(openFileDialog1.FileName, FileMode.Open);
                StreamReader srcSR = new StreamReader(srcFS,System.Text.Encoding.Default);
                do
                {
                  string ins = srcSR.ReadLine();

                  ListViewItem lvi = new ListViewItem();
                  lvi.SubItems.Add(ins);

                  if (ins != null) listView1.Items.Add(lvi);
                  else break;
                } while (true);
                srcSR.Close();
            }
        }
        catch (Exception errorMsg)
        {
            MessageBox.Show(errorMsg.Message,"Error reading a file",MessageBoxButtons.OK,MessageBoxIcon.Error);
        }

} 

Anyone has a clue ? :)

Here how it looks now:

        using (OpenFileDialog openFileDialog1 = new OpenFileDialog())
    try
    {
        openFileDialog1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
        openFileDialog1.DefaultExt = "csv";
        openFileDialog1.Title = "Open file";
        openFileDialog1.Filter = "CSV (*.csv)|*.csv";
        if (openFileDialog1.ShowDialog() == DialogResult.OK)
        {
            FileStream srcFS;
            srcFS = new FileStream(openFileDialog1.FileName, FileMode.Open);
            StreamReader srcSR = new StreamReader(srcFS,System.Text.Encoding.Default);
            do
            {
              string ins = srcSR.ReadLine();
              string[] columns = ins.Split(',');

              ListViewItem lvi = new ListViewItem(columns[0]);

              lvi.SubItems.Add(ins);

              for (int i = 1; i < columns.Count(); i++)
              {
                  lvi.SubItems.Add(columns[i]);
              }

              listView1.Items.Add(lvi);

            } while (true);
            srcSR.Close();
        }
    }
    catch (Exception errorMsg)
    {
        MessageBox.Show(errorMsg.Message,"Error reading a file",MessageBoxButtons.OK,MessageBoxIcon.Error);
    }

Solution

  • At the moment you are adding the whole line as one listviewitem. First you would need to split the line into columns:

    string[] columns = ins.Split(';');
    

    then create a listviewitem with the first columns.

    ListViewItem lvi = new ListViewItem(columns[0]);
    

    then iterate through the remaining and add a subitem for each column:

    for (int i = 1; i< columns.Count(); i++)
    {
        lvi.SubItems.Add(columns[i]);
    }
    

    finally add the listviewitem to the listview

    listView1.Items.Add(lvi);