2012-12-20 37 views
3

它似乎是很多人很簡單的問題,但是我想要做的是閱讀文本文件後點擊事件使用StreamReader(ASP.net & C#)後閱讀該文本文件我分裂每個行的','分隔符,然後它的每個部分我存儲在Datatable's列,然後綁定數據表到我的gridview,我的問題是我已經寫了代碼,但即時獲取像這樣的空gridview在運行時使用文本文件填充Gridview

enter image description here
GridView的列標題我已經從設計者創建與autogeneratecolumns="false"

我的代碼是

protected void readfile_Click(object sender, EventArgs e) 
{ 
    string line; 
    DataTable dt = new DataTable(); 
    using (StreamReader sr = new StreamReader(@"D:\Temp\fileread\readtext.txt")) 
    { 
     while ((line = sr.ReadLine()) != null) 
     { 
      string[] parts = line.Split(','); 
      dt.Rows.Add(); 
      for (int i = 0; i < parts.Length; i++) 
      { 
       dt.Columns.Add(); 
       dt.Rows[0][i] = parts[i]; 
       MyGridView.DataSource = dt; 
       MyGridView.DataBind(); 
      } 
     } 
     sr.Close(); 
    } 

我的文本文件中有數據

1,1,4,2,"#",Description1 
5,5,4,2,"#",Description2 
3,3,6,3,"#",Description3 
2,2,4,2,"#",Description4 
4,5,4,2,"#",Description5 

希望你得到它我試圖問。

+0

發表您的ASPX標記爲GridView的 –

回答

2

som怎麼樣? ething這樣的:

protected void readfile_Click(object sender, EventArgs e) 
    { 
     DataTable table = new DataTable(); 
     table.Columns.Add("Row No."); 
     table.Columns.Add("Col No."); 
     table.Columns.Add("Width"); 
     table.Columns.Add("Height"); 
     table.Columns.Add("Image URL"); 
     table.Columns.Add("Description"); 

     using (StreamReader sr = new StreamReader(@"D:\Temp\fileread\readtext.txt")) 
     { 
      while (!sr.EndOfStream) 
      { 
       string[] parts = sr.ReadLine().Split(','); 
       table.Rows.Add(parts[0], parts[1], parts[2], parts[3], parts[4], parts[5]); 
      } 
     } 
     MyGridView.DataSource = table; 
     MyGridView.DataBind(); 
    } 
+0

非常感謝,一個小小的改變,如果我想讓它不是給流讀取器讀取靜態路徑,我怎麼讀取OpenFileDialog並做同樣的事情添加和綁定表。 –

+2

您首先需要了解的是,asp.net與windows窗體開發不同,您不能使用打開的文件對話框。您首先需要將文件發送到服務器,然後再進行進一步處理。Google搜索 - 在asp.net中使用fileupload它會返回很多關於如何完成這個任務的例子 –

+0

我可以在c#winform中使用這個方法嗎?請指教。 – Ren

1
  1. 你應該adding the DataColumn移動你的代碼中for -loop
  2. 之外,您應該使用DataTable.NewRow方法
  3. 你應該調用數據綁定方法只有一次,循環後創建新DataRow

你的代碼應該是這樣的:

DataTable dt = new DataTable(); 
dt.Columns.Add("Row No", typeof(Int32)); 
dt.Columns.Add("Col No", typeof(Int32)); 
dt.Columns.Add("Width", typeof(Int32)); 
dt.Columns.Add("Height", typeof(Int32)); 
dt.Columns.Add("ImageUrl", typeof(String)); 
dt.Columns.Add("Description", typeof(String)); 

using (StreamReader sr = new StreamReader(@"D:\Temp\fileread\readtext.txt")) 
{ 
    while ((line = sr.ReadLine()) != null) 
    { 
     string[] parts = line.Split(','); 
     var row = dt.NewRow(); 
     for (int i = 0; i < parts.Length; i++) 
     { 
      row[i] = parts[i]; 
     } 
     // important thing! 
     dt.Rows.Add(row); 
    } 
    sr.Close(); 
} 
MyGridView.DataSource = dt; 
MyGridView.DataBind(); 
+0

非常感謝你,如果我想使這是不是給了的StreamReader讀取靜態路徑中的一個小的變化,我怎麼能與打開文件對話框閱讀並執行添加和綁定表的相同操作。 –

1

到數據表中使用的代碼添加列如下

DataTable dt = new DataTable(); 
dt.Columns.Add("Row No", typeof(Int32)); 
dt.Columns.Add("Col No", typeof(Int32)); 
dt.Columns.Add("Width", typeof(Int32)); 
dt.Columns.Add("Height", typeof(Int32)); 
dt.Columns.Add("ImageUrl", typeof(String)); 
dt.Columns.Add("Description", typeof(String)); 

,並綁定數據表(DT)您填充DataTable中的所有行後,後while loop

using (StreamReader sr = new StreamReader(@"D:\Temp\fileread\readtext.txt")) 
{ 
    while ((line = sr.ReadLine()) != null) 
    { 
        string[] parts = line.Split(','); 
        var dr = dt.NewRow(); //use newrow to create new row 
        for (int i = 0; i < parts.Length; i++) 
        { 
            dr[i] = parts[i]; 
        } 
        
        dt.Rows.Add(dr); //add row to datatable now 
    } 
    sr.Close(); 
} 
//bind datatable to Gridview after we load file into dt 
MyGridView.DataSource = dt; 
MyGridView.DataBind(); 
+0

非常感謝你,如果我想讓一個小的改變,而不是給流讀取器的靜態路徑,我怎麼讀與OpenFileDialog並做同樣的事情添加和綁定表。 –