2016-04-23 60 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()); 
....