1

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

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

在此处输入图像描述

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

在此处输入图像描述

似乎可能存在某种数据类型猜测,它认为数据应该是数字的,而其他任何东西都无效。

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

任何帮助表示赞赏。

4

1 回答 1

2

您是否考虑过使用通用 CSV 解析器来使用数据结构来创建数据表?

是一个易于使用的通用解析器,非常适合 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
    }    
}
于 2013-05-13T18:42:27.377 回答