在C#WinForms中将CSV加载到DataGridView时丢弃数据

时间:2013-05-13 18:02:18

标签: c# winforms csv datagridview

我正在尝试使用用户选择的csv或逗号分隔的txt文件中的数据填充DataGridView。 csv被加载到DataGridView中,但是在某个包含alpha或numeric值混合的列中,如果前几个值是数字,然后数据切换到alpha字符,它们就会被删除。见下文:

这里我在封面栏中导入了一个混合了字母或数字值的csv。应包含alpha值的单元格为null。

enter image description here

这里我导入的csv只有null(第一个值应为null)或alpha值。它没有问题。

enter image description here

似乎可能存在某种类型的数据类型猜测,它认为数据应该是数字并且无效。

以下是我用来导入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;

感谢任何帮助。

1 个答案:

答案 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
    }    
}