2010-01-07 59 views
2

我有一個網格視圖,其中包含10行和3列..現在我想循環所有行和所有列的gridview,並希望將它們添加到數據表..使用C#循環遍歷gridview的所有行和列#

DataRow row; 
    int rowscount = gv.Rows.Count; 
    int columnscount = gv.Columns.Count; 
    for (int i = 0; i < rowscount; i++) 
    { 
     for (int j = 0; j < columnscount; j++) 
     { 
      row = empTable.NewRow(); 
      row["a"] = gv.Rows[i][column1].Tostring(); 
      row["b"] = gv.Rows[i][column2].ToString(); 
      MynewDatatable.Rows.Add(row); 
     } 
    }  

GV - 我的GridView

現在的問題是,我可以得到所有行的所有列的值gv我的新的DataTable ..我不知道我的循環是否正確不是...我正在使用這個數據表進行批量拷貝功能...

+0

你能clearify你的意圖?目標是什麼?你想要一個有10行和一列的新表嗎? – Nate 2010-01-07 19:57:00

+0

@Nate我想要一個新的數據表與所有行和所有列... – 2010-01-07 19:58:50

回答

5
  • 您上面的代碼正在爲GridView中的每個單元格創建一個新行。
  • 在GridView的每一行中,您的代碼將行中的每個值分配給同一列Emp_Name。

修正,我認爲:

int rowscount = gv.Rows.Count; 
int columnscount = gv.Columns.Count; 
for (int i = 0; i < rowscount; i++) 
{ 
    // Create the row outside the inner loop, only want a new table row for each GridView row 
    DataRow row = empTable.NewRow(); 
    for (int j = 1; j < columnscount; j++) 
    { 
     // Referencing the column in the new row by number, starting from 0. 
     row[j - 1] = gv.Rows[i][j].Tostring(); 
    } 
    MynewDatatable.Rows.Add(row); 
} 

編輯:您一直在編輯你的問題的來源,所以我的答案可能生長出過期。 :)

+0

@JMD行[j - 1] = gv.Rows [i] [j] .Tostring();當我使用它它說錯誤不能用[]索引到一個'System.Web.UI.WebControls.GridViewRow'類型的表達式' – 2010-01-08 03:17:37

+0

'這個消息聽起來像它指的是聲明的右手邊'gv。行[i] [j]',這是你的原始代碼(現在已經從你的問題中消失了)。在我的回答中,語句的左邊是'row [j-1]',它是'DataRow '對象,而不是錯誤消息的'GridViewRow'。 (*另外,將來您可能會考慮使用註釋來編輯代碼,而不是刪除/替換代碼,以便讀者可以跟蹤您原來的要求。*):) – JMD 2010-01-08 16:08:20

0

您的l oop不正確,所有列表都從0開始。但是當循環遍歷列時,您從1開始。

0

JMD的答案是正確的,但根據您的使用情況,也許數據綁定到您的DataTable的網格視圖的數據源將是一個更好的方法。

0

試試這個代碼:

 foreach (DataGridViewRow row in dataGridView1.SelectedRows) 
     { 
      string selectedempid = dataGridView1.SelectedRows[0].Cells["Deptno"].Value.ToString(); 
      { 
       SqlCommand cmd = new SqlCommand("delete from Test_dept where Deptno=" + selectedempid, con); 
       cmd.CommandType = CommandType.Text; 
       cmd.ExecuteNonQuery(); 
       MessageBox.Show("deleted"); 

      } 
     }