【问题标题】:loop through all rows and columns of a gridview using C#使用 C# 循环遍历 gridview 的所有行和列
【发布时间】:2010-01-07 19:51:24
【问题描述】:

我有一个包含 10 行和 3 列的网格视图。现在我想遍历网格视图的所有行和所有列,并将它们添加到数据表中。

  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 - 我的网格视图

现在我的问题是,我可以将gv 中所有行的所有列的值添加到我的新数据表中吗?我不知道我的循环是否正确……我正在使用此数据表进行批量复制函数...

【问题讨论】:

  • 你能说清楚你的意图吗?目标是什么?你想要一个 10 行 1 列的新表吗?
  • @Nate 我想要一个包含所有行和所有列的新数据表...

标签: c# gridview for-loop


【解决方案1】:
  • 上面的代码正在为 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);
}

编辑:您一直在编辑问题中的来源,所以我的回答可能会过时。 :)

【讨论】:

  • @JMD 行[j - 1] = gv.Rows[i][j].Tostring();当我使用它时,它说错误无法使用 [] 将索引应用于“System.Web.UI.WebControls.GridViewRow”类型的表达式
  • 该消息听起来像是在指代语句的右侧,gv.Rows[i][j],这是您的原始代码(现在从您的问题中消失了。)我的回答中的声明是row[j - 1],它是DataRow 对象,而不是错误消息的GridViewRow。 (顺便说一句,将来您可能会考虑使用 cmets 编辑您的代码,而不是删除/替换代码,以便读者可以跟踪您最初询问的内容。):)
【解决方案2】:

您的循环不正确,所有列表都从 0 开始。但是在遍历列时,您从 1 开始。

【讨论】:

    【解决方案3】:

    JMD 的答案是正确的,但根据您的用例,将网格视图的 DataSource 数据绑定到 DataTable 可能是一种更好的方法。

    【讨论】:

      【解决方案4】:

      试试这个代码:

              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");
      
                  }
              }
      

      【讨论】:

        猜你喜欢
        • 2018-12-02
        • 2017-03-09
        • 1970-01-01
        • 1970-01-01
        • 2016-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多