我想用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文件中的列,生成与DataGridView具有相同列数的CSV文件,并使列数更少的文件,没有区别。
答案 0 :(得分:1)
我刚试过模拟它,它按预期工作。在切换文件时是否会抛出任何异常?
在尝试解析文件之前,您可以尝试将数据源设置为null,这样您就可以看到它是否已达到目标?
dataGridViewQuestions.DataSource = null;
DataTable dataTable = readCsvTable(openFileDialog1.FileName);
if (dataTable != null)
dataGridViewQuestions.DataSource = dataTable;
答案 1 :(得分:1)
如果从“AutoGenerateColumns = true”时填充的数据使用它。 如果以前的列是您的问题,那么您可以为该datagridview创建新实例;
...
if (dataTable != null)
{
dataGridViewQuestions = new DataGridView();
dataGridViewQuestions.DataSource = dataTable;
}
...