2010-01-07 57 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"); 

      } 
     }