2017-04-17 56 views
0

我試圖使用自爆代碼從文本文件中的數據導入到網格視圖:導入格式的文本文件的GridView C#

DataTable dt = new DataTable(); 
using (System.IO.TextReader tr = File.OpenText((@"d:\\My File3.log"))) 
{ 
    string line; 
    while ((line = tr.ReadLine()) != null) 
    { 

     string[] items = line.Trim().Split(' '); 
     if (dt.Columns.Count == 0) 
     { 
      // Create the data columns for the data table based on the number of items 
      // on the first line of the file 
      for (int i = 0; i < items.Length; i++) 
       dt.Columns.Add(new DataColumn("Column" + i, typeof(string))); 
     } 
     dt.Rows.Add(items); 

    } 
    //show it in gridview 
    this.GridView1.DataSource = dt; 
    this.GridView1.DataBind(); 

我的文件是這樣的:

ABC

EFDCC

EDDD

DP

然後我收到以下錯誤

輸入數組比列數此表不再C#應用程序

+0

你正在爲每一行添加列。你應該只添加一次。 –

回答

1

它看起來像你創建你tablecolumns根據您第一行,但在第二行有多列,然後第一行。請根據MAX欄檢查以下代碼。

CODE:

DataTable dt = new DataTable(); 

List<string[]> list = new List<string[]>(); 
int maxItem = 0; 
using (System.IO.TextReader tr = File.OpenText((@"d:\\My File3.log"))) 
{ 
    string line; 
    while ((line = tr.ReadLine()) != null) 
    { 

     string[] items = line.Trim().Split(' '); 

     if (maxItem <= items.Count()) 
     { 
      maxItem = items.Count(); 
     } 

     list.Add(items); 
    } 

    for (int i = 0; i < maxItem; i++) 
     dt.Columns.Add(new DataColumn("Column" + i, typeof(string))); 

    foreach (var items in list) 
    { 
     dt.Rows.Add(items); 
    } 

    //show it in gridview 
    this.GridView1.DataSource = dt; 
    this.GridView1.DataBind(); 
} 

在你的數據有些線有empty。所以,你必須在代碼中檢查empty行。

輸出數據的:

enter image description here

+0

謝謝你正在工作 – marwen1

+0

不客氣!!!!! – csharpbd

1

您應該添加所需的列數(Split(' ')之後),當新列更大比實際(dt.Columns.Count)之一:

// File.ReadLines is easier to read and maintain 
    var items = File 
    .ReadLines(@"d:\My File3.log") // single \ since we have verbatim string @ 
//.Where(line => !string.IsNullOrWhiteSpace(line)) // if you want to remove empty lines 
    .Select(line => line.Trim().Split(' ')); 

    DataTable dt = new DataTable(); 

    foreach (var line in items) { 
    // Do we want extra columns? 
    while (line.Length > dt.Columns.Count) 
     dt.Columns.Add(new DataColumn($"Column {dt.Columns.Count}", typeof(string))); 

    dt.Rows.Add(line); 
    } 

    GridView1.DataSource = dt; 
    GridView1.DataBind(); 
+0

謝謝你正在工作 – marwen1

+0

@ marwen1:不客氣!希望,你有想法 –