2014-03-26 40 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); 
}