2016-04-23 13 views
1

複数行のExcelテーブルがあり、.csvファイルをインポートすると最初の行のみが表示されます。 私が望むのは、すべての行でリストを埋めることです。 cargarCSV()=)形式(.csvファイル validarをロードし、あなたの実際のコードのあまりを変更することなく、リストビューListViewは.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

にcsvファイルを渡していますが、ファイル内の各ラインの存在のためのループをする必要がありinsering = go to

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()); 
....