我正在尝试使用用户选择的csv或逗号分隔的txt文件中的数据填充DataGridView。 csv被加载到DataGridView中,但是在某个包含alpha或numeric值混合的列中,如果前几个值是数字,然后数据切换到alpha字符,它们就会被删除。见下文:
这里我在封面栏中导入了一个混合了字母或数字值的csv。应包含alpha值的单元格为null。
这里我导入的csv只有null(第一个值应为null)或alpha值。它没有问题。
似乎可能存在某种类型的数据类型猜测,它认为数据应该是数字并且无效。
以下是我用来导入CSV的代码:
string conStr = @"Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" + Path.GetDirectoryName(loadPath) + ";Extensions=csv,txt";
OdbcConnection conn = new OdbcConnection(conStr);
OdbcDataAdapter da = new OdbcDataAdapter("Select * from [" + Path.GetFileName(loadPath) + "]", conn);
DataTable dt = new DataTable(loadPath);
da.Fill(dt);
csvTable.DataSource = dt;
感谢任何帮助。
答案 0 :(得分:2)
您是否考虑过使用通用的CSV解析器来使用数据结构来创建数据表?
This是一款易于使用的通用解析器,非常适合CSV文件等平面文件。
编辑:
要扩展Jims的评论,这里是在C#中使用TextFieldParser的一个例子。这只处理你的前3个字段,但应该足以看看它是如何工作的。
String myFilePath = @"c:\test.csv";
DataTable dt = new DataTable();
dt.Columns.Add("HAB_CODE");
dt.Columns.Add("SIZE");
dt.Columns.Add("COVER");
using (var myCsvFile = new TextFieldParser(myFilePath)){
myCsvFile.TextFieldType = FieldType.Delimited;
myCsvFile.SetDelimiters(",");
myCsvFile.CommentTokens = new[] { "HEADER", "COMMENT", "TRAILER" };
while (!myCsvFile.EndOfData) {
string[] fieldArray;
try {
fieldArray = myCsvFile.ReadFields();
dt.Rows.Add(fieldArray);
}
catch (Microsoft.VisualBasic.FileIO.MalformedLineException ex) {
// not a valid delimited line - log, terminate, or ignore
continue;
}
// process values in fieldArray
}
}