2013-08-20 60 views
0

我不想將它綁定到它已被循環。我在這裏是一個上傳到gridview的csv文件。我想在它被綁定之前遍歷它。任何建議是偉大的。我想弄清楚如何循環訪問我的數據表。任何建議?

protected void btnUpload_Click(object sender, EventArgs e) 
    { 
     if (FileUpload1.HasFile) 
     try 
     { 
      FileUpload1.SaveAs(Server.MapPath("") + 
       FileUpload1.FileName); 
      Label1.Text = "File name: " + 
       FileUpload1.PostedFile.FileName + "<br>" + 
       FileUpload1.PostedFile.ContentLength + " kb<br>" + 
       "Content type: " + 
       FileUpload1.PostedFile.ContentType + "<br><b>Uploaded Successfully"; 
     } 
     catch (Exception ex) 
     { 
      Label1.Text = "ERROR: " + ex.Message.ToString(); 
     } 
    else 
    { 
     Label1.Text = "You have not specified a file."; 
    } 



     CSVReader reader = new CSVReader(FileUpload1.PostedFile.InputStream); 
     string[] headers = reader.GetCSVLine(); 
     DataTable dt = new DataTable(); 

     foreach (string strHeader in headers) 
      dt.Columns.Add(strHeader); 
     string[] data; 
     while ((data = reader.GetCSVLine()) != null) 
      dt.Rows.Add(data); 
     csvReaderGv.DataSource = dt; 

     csvReaderGv.DataBind(); 


      } 



    } 
+0

什麼阻止你執行'foreach(DataRow row in dt.Rows)...'? –

+0

我是否在csvReaderGv.DataSource = dt之前放置它; csvReaderGv.DataBind();或之後。它的困惑正在阻止我。 – Jay

+0

是的,因爲您的要求是:_「我想在綁定之前循環遍歷它」_。這個問題有點奇怪,不是嗎? –

回答

0

試試這個:

// Loop through each row in the data table 
foreach (DataRow row in dt.Rows) 
{ 
    // Loop through each column in row 
    for (int i = 0; i <= dt.Columns.Count - 1; i++) 
    { 
     // Do whatever you want here for each cell 
    } 
} 

這裏是你的代碼應該是什麼樣子:

protected void btnUpload_Click(object sender, EventArgs e) 
{ 
    if (FileUpload1.HasFile) 
    { 
     try 
     { 
      FileUpload1.SaveAs(Server.MapPath("") + FileUpload1.FileName); 
      Label1.Text = "File name: " + 
      FileUpload1.PostedFile.FileName + "<br>" + 
      FileUpload1.PostedFile.ContentLength + " kb<br>" + "Content type: " + 
      FileUpload1.PostedFile.ContentType + "<br><b>Uploaded Successfully"; 
     } 
     catch (Exception ex) 
     { 
      Label1.Text = "ERROR: " + ex.Message.ToString(); 
     } 
    } 
    else 
    { 
     Label1.Text = "You have not specified a file."; 
    } 

    CSVReader reader = new CSVReader(FileUpload1.PostedFile.InputStream); 
    string[] headers = reader.GetCSVLine(); 
    DataTable dt = new DataTable(); 

    foreach (string strHeader in headers) 
    { 
     dt.Columns.Add(strHeader); 
    } 

    string[] data; 
    while ((data = reader.GetCSVLine()) != null) 
    { 
     dt.Rows.Add(data); 
    } 

    // Loop through each row in the data table 
    foreach (DataRow row in dt.Rows) 
    { 
     // Loop through each column in row 
     for (int i = 0; i <= dt.Columns.Count - 1; i++) 
     { 
      // Do whatever you want here for each cell 
     } 
    } 

    csvReaderGv.DataSource = dt; 
    csvReaderGv.DataBind(); 
} 
+0

我會在綁定之前或之後把它放在哪裏把foreach弄糊塗了。 – Jay

+0

查看更新的答案。 –

0

首先,讓您的數據;其次,以任何你想要的方式處理你的數據;

foreach (DataRow row in dt.Rows) 
{ 
    // do what you want with it 
} 

第三,當你沒有別的事情處理數據時,綁定它;

csvReaderGv.DataSource = dt; 
csvReaderGv.DataBind(); 
0

你的問題不是很清楚。你在問你如何在數據綁定之前循環DataTable。那麼是什麼阻止你只做:

foreach(DataRow row in dt.Rows) 
{ 
    // do something with the row and it's fields, e.g. 
    string field1 = row.Field<string>(0); 
    // or all columns_ 
    foreach(DataColumn col in dt.Columns) 
    { 
     string field = row.Field<string>(col); 
    } 
} 
csvReaderGv.DataBind(); 

但我認爲你要知道什麼是循環綁定到ASP.NET GridView一個DataTable的最佳途徑。我建議使用RowDataBound使訪問表中的所有行,也都排在GridView

protected void csvReaderGv_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     DataRow row = ((DataRowView) e.Row.DataItem).Row; 
     string col1 = row.Field<string>(0); 
     // set first cell in GridViewRow: 
     e.Row.Cells[0].Text = col1; 
    } 
} 

這個事件就被觸發在網格中的每一行,你DataBind它是DataSource反正在這一行:

csvReaderGv.DataBind(); 

所以這是「最便宜」的循環。 請注意,它僅在您使用DataBind時觸發,因此不一定在每次回發時觸發。如果您需要在每次回發中訪問GridViewRows(例如,在網格中創建動態控件),則應該使用RowCreated

+0

非常感謝,這也會讓我只有我想要的任何欄目顯示。 – Jay

+0

@Jay:我必須承認我沒有理解你的評論。如果你想隱藏列使用'GridView.Columns [index] .Visible = false;'。如果你想隱藏單元格(或者做一些其他的工作,比如應用'CSS'或改變'ColumnSpan'),可以使用'e.Row.Cells [index] .Visible = false;'。 –

+0

對不起,我問的是,在我做了數據綁定後,我可以使用。 – Jay

相關問題