C# txt到datagridview错误

C# txt到datagridview错误,c#,datagridview,io,C#,Datagridview,Io,我有一个文本文件 No TMNo EnNo Name GMNo Mode IN/OUT Antipass DaiGong DateTime 1 1 00000001 1 1 1 0 2014-03-19 16:16:14 2 1 00000001 1 1 3 0 2014-03-19 16:16:20 3 1 00000001 1

我有一个文本文件

No  TMNo    EnNo    Name        GMNo    Mode    IN/OUT  Antipass    DaiGong DateTime
1   1   00000001        1   1       1   0   2014-03-19  16:16:14
2   1   00000001        1   1       3   0   2014-03-19  16:16:20
3   1   00000001        1   1       3   0   2014-03-19  16:17:03
4   1   00000001        1   1       3   0   2014-03-19  16:17:17
当我在datagridview中统治它时,它显示

可能是因为两个选项卡/t之间没有空格

我的代码是

        var lines = File.ReadAllLines(@"D:\Nisar\workspace\biometric\backup data\AGL_001.TXT");
        if (lines.Count() > 0)
        {
            foreach (var columnName in lines.FirstOrDefault()
                .Split(new[] { '\t' }, StringSplitOptions.RemoveEmptyEntries))
            {
                dataGridView1.Columns.Add(columnName, columnName);
            }
            foreach (var cellValues in lines.Skip(1))
            {
                var cellArray = cellValues
                    .Split(new[] { '\t' }, StringSplitOptions.RemoveEmptyEntries);
                //if (cellArray.Length == dataGridView1.Columns.Count)
                    dataGridView1.Rows.Add(cellArray);
            }
        }

我假设在Name和gMNo列之间的标题行中,两个tab字符之间有一个空格。这个空间被认为是一个列名,您可以在dataGrid中看到它,名称为Column1

您可以将此空白添加到split方法使用的分隔符列表中。 幸运的是,您似乎没有包含嵌入空格的列名称

   foreach (var columnName in lines.FirstOrDefault()
        .Split(new[] { '\t', ' ' }, StringSplitOptions.RemoveEmptyEntries))
    {
        dataGridView1.Columns.Add(columnName, columnName);
    }
然后,问题似乎也出现在带有值的行中,但这次无效序列似乎位于EnNo列和Name列之间。同样,在Split使用的分隔符字符之间添加空格应该可以解决问题

foreach (var cellValues in lines.Skip(1))
{
    var cellArray = cellValues
        .Split(new[] { '\t', ' ' }, StringSplitOptions.RemoveEmptyEntries);
        dataGridView1.Rows.Add(cellArray);
}
当然,您需要确保无关字符是空格。十六进制编辑器、显示不可打印字符的文本编辑器或调试器本身可以帮助找到要添加到拆分分隔符列表中的确切字符

我刚换了

foreach (var cellValues in lines.Skip(
{
    var cellArray = cellValues
        .Split(new[] { '\t' }, StringSplitOptions.RemoveEmptyEntries);
    //if (cellArray.Length == dataGridView1.Columns.Count)
        dataGridView1.Rows.Add(cellArray);
}


EnNo和Name列之间存在一些不可见的字符。您需要使用十六进制编辑器或显示不可打印字符的文本编辑器检查文件。调试器也能帮上忙是的我知道。。但我必须处理同一个文件。。任何解决方案plz。。。它们之间有两个选项卡。
foreach (var cellValues in lines.Skip(1))
{
    var cellArray = cellValues
        .Split(new[] { '\t' }, StringSplitOptions);
    //if (cellArray.Length == dataGridView1.Columns.Count)
        dataGridView1.Rows.Add(cellArray);
}