2016-04-23 61 views
1

我有一个包含多行的excel表格,当我导入我的.csv文件时,它只显示第一行。 我想要的是填满每一行的列表。 cargarCSV()=负载.csv文件 validar()= CSV文件传递到ListViewListView只获取.csv文件的第一行

 private void cargarCSV() //Load .csv 
    { 
     OpenFileDialog dialogoCargar = new OpenFileDialog(); 
     dialogoCargar.Filter = "Archivos CSV|*.csv"; 
     dialogoCargar.FilterIndex = 1; 
     if(dialogoCargar.ShowDialog() == DialogResult.OK) 
     { 
      filepath = dialogoCargar.FileName; 
      txtbox_ArchivoCargado.Text = filepath; 
     } 
    } 

     private void Validar() //Pass .csv to ListView 
    { 
     empleadosValido = true; 
     try { 
      FileStream fileStreamNew = File.Open(filepath, FileMode.Open, FileAccess.ReadWrite); 
      StreamReader streamRead = new StreamReader(fileStreamNew); 
      string strView = streamRead.ReadToEnd(); 
      streamRead.Close(); 
      fileStreamNew.Close(); 
      String[] strArray = strView.Split(new char[] { ',' }); 
      ListViewItem item = new ListViewItem(strArray[0].ToString()); 

      item.SubItems.Add(strArray[1].ToString()); 
      item.SubItems.Add(strArray[2].ToString()); 
      item.SubItems.Add(strArray[3].ToString()); 
      item.SubItems.Add(strArray[4].ToString()); 
      item.SubItems.Add(strArray[5].ToString()); 
      item.SubItems.Add(strArray[6].ToString()); 

      list_Previ.Items.Add(item); 
      }catch (Exception ex) 
     { 
      if (ex is IOException) 
      { 
       MessageBox.Show("El archivo se encuentra en uso por otro     programa\nPor favor cierra otros programas e intenta de nuevo.", "Corporativo Acosta | Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
       empleadosError = true; 
       MessageBox.Show(ex.ToString()); 
      } 
      if (ex is IndexOutOfRangeException) 
      { 
       MessageBox.Show("Hay un problema con tus columnas.\nVerifica que correspondan las columnas a importar\ncon las de la tabla (7 columnas)", "Corporativo Acosta | Error", MessageBoxButtons.OK ,MessageBoxIcon.Error); 
       empleadosError = true; 
       MessageBox.Show(ex.ToString()); 
      } 

     } 
    } 
+1

拆分它然后为每条线添加新行,并用逗号分隔。那是你的问题。但请确保csv不会包含转义逗号 –

回答

1

没有在您的文件,你应该改变你太多的实际代码,但insering一个循环的每一行本去

foreach(string strView = File.ReadLines(filepath)) 
{ 
    String[] strArray = strView.Split(new char[] { ',' }); 
    ListViewItem item = new ListViewItem(strArray[0].ToString()); 

    item.SubItems.Add(strArray[1].ToString()); 
    item.SubItems.Add(strArray[2].ToString()); 
    item.SubItems.Add(strArray[3].ToString()); 
    item.SubItems.Add(strArray[4].ToString()); 
    item.SubItems.Add(strArray[5].ToString()); 
    item.SubItems.Add(strArray[6].ToString()); 
    list_Previ.Items.Add(item); 
} 

当然,你可以删除所有对FileStream和StreamReader变量的引用。另外,如果您预测某些行中包含的元素少于7个,则建议在将元素添加到ListView Items集合之前添加一个数组长度检查,并且不要依赖异常处理来继续。使用异常来驱动你的代码是一个不好的做法,打的异常在性能方面是昂贵的(很多比把一个如果添加元素之前),所以这样的事情应该首先考虑

if(strArray.Length > 1) item.SubItems.Add(strArray[1].ToString()); 
if(strArray.Length > 2) item.SubItems.Add(strArray[2].ToString()); 
....