2013-03-05 116 views
0
DataGridView的一部分

我想从一个CSV数据填充第几列文件填充从CSV

的代码我使用:

... 
    DataTable dataTable = (DataTable)readCsvTable(openFileDialog1.FileName); 
    if (dataTable != null) dataGridViewQuestions.DataSource = dataTable; 
... 


private DataTable readCsvTable(string filename) 
    { 
     DataTable dtDataSource = new DataTable(); 

     try 
     { 
      string[] fileContent = File.ReadAllLines(filename); 

      if (fileContent.Count() > 0) 
      { 
       //Create data table columns 
       string[] columns = fileContent[0].Split(','); 
       for (int i = 0; i < columns.Count(); i++) 
       { 
        dtDataSource.Columns.Add(columns[i]); 
       } 

       //Add row data 
       for (int i = 1; i < fileContent.Count(); i++) 
       { 
        string[] rowData = fileContent[i].Split(','); 
        dtDataSource.Rows.Add(rowData); 
       } 
      } 
     } 
     catch (Exception ex) { 
      ... 
      //error msgbox 
      ... 
      return null; 
     } 
     return dtDataSource; 
    } 

问题:

当AutoGenerateColumns = true - 代码生成附加列(与DataGridView中前几列相同的名称,以防由同一应用程序导出的文件)被添加到gridView并填充相应的数据。

当AutoGenerateColumns = false时 - 上面的代码将正确数量的行添加到表中,并且没有添加新列,但行是空的。

已经尝试过:

在调用由列的HeaderText CSV文件和列的控制名字列,使得CSV相同数量的DataGridView列的文件,使文件具有更少的列,无差异。

回答

1

我刚刚尝试模拟此,它按预期工作。切换文件时是否收到任何异常?

尝试解析文件之前,您可以尝试将数据源设置为空,以便您可以看到它是否得到了那么多?

dataGridViewQuestions.DataSource = null; 
DataTable dataTable = readCsvTable(openFileDialog1.FileName); 
if (dataTable != null) 
    dataGridViewQuestions.DataSource = dataTable; 
1

如果从“AutoGenerateColumns = true”时填充的数据使用它。 因为如果以前的列是你的问题,那么你可以创建新的实例,该datagridview;

... 
if (dataTable != null) 
{ 
    dataGridViewQuestions = new DataGridView(); 
    dataGridViewQuestions.DataSource = dataTable; 
} 
...