2014-03-26 39 views
0

我有一个文本文件TXT到datagridview的错误

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的它显示称霸一方,

enter image description here

可能是因为在两个之间没有空格选项卡(/ 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); 
      } 
     } 
+0

在EnNo和Name列之间有一些不可见的字符。您需要使用十六进制编辑器或显示不可打印字符的文本编辑器来检查文件。 (也可以帮助调试器) – Steve

+0

是的,我知道..但我必须使用相同的文件..任何解决方案PLZ ...之间有两个选项卡。 – Nisar

回答

0

我想,在NamegMNo列的标题行有两个制表字符之间的单个空格。这个空间被认为是一个列名(你可以在名称为Column1的dataGrid中看到它)。

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

foreach (var columnName in lines.FirstOrDefault() 
     .Split(new[] { '\t', ' ' }, StringSplitOptions.RemoveEmptyEntries)) 
    { 
     dataGridView1.Columns.Add(columnName, columnName); 
    } 

那么问题似乎也存在与价值线,但此时无效序列似乎是列EnNoName之间。同样,添加由分割使用的分隔符字符之间的空间应该可以解决问题

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

当然,你需要确保多余的字符都是空白。一个十六进制编辑器,文本显示不可打印的cha的编辑器RS或调试器本身可能有助于找到确切的字符添加到拆分分隔符列表

0

我得到了我的答案在这里:

我刚刚更换

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

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