【问题标题】:Update each selected datagridview rows更新每个选定的 datagridview 行
【发布时间】:2016-06-11 15:00:06
【问题描述】:

我正在使用此代码更新每个 datagridview 选定的行,但不幸的是它只更新了我的第一个选定行。为什么?

foreach (DataGridViewRow item in this.dataGridView1.SelectedRows)
{
    con.Open();
    SqlCommand cmdo = new SqlCommand(@" update inventory set category = '"+textBox1.Text+"' WHERE id='" + dataGridView1.SelectedRows[0].Cells[0].Value.ToString() + "'", con);
    cmdo.ExecuteNonQuery();
    con.Close();
}

【问题讨论】:

    标签: c#


    【解决方案1】:

    问题在于在每次迭代中使用 datagrid 的第一个元素(不是项目)作为 ID

    dataGridView1.SelectedRows[0].Cells[0]
    

    你应该试试这个代码:

    int i = 0;
    
    foreach (DataGridViewRow item in this.dataGridView1.SelectedRows)
    {
        con.Open();
        SqlCommand cmdo = new SqlCommand(@" update inventory set category = '"+textBox1.Text+"' WHERE id='" + dataGridView1.SelectedRows[i].Cells[0].Value.ToString() + "'", con);
        cmdo.ExecuteNonQuery();
        con.Close();
        i++;
    }
    

    【讨论】:

    • 你的意思是 (WHERE id='" + item.SelectedRows[0].Cells[0].Value.ToString() + "'", con)??
    • 我接受这个:错误 1 ​​'System.Windows.Forms.DataGridViewRow' 不包含 'SelectedRows' 的定义,并且没有扩展方法 'SelectedRows' 接受类型的第一个参数
    • 它不起作用。它更新第一行 e.x 3 次等于我选择的行数
    • @user6453809 然后我建议您添加一个计数器变量,就像 woodykiddy 在他的回答中添加的那样。请检查他的回答。它将完美运行!
    • @user6453809 查看我的更新答案。非常抱歉耽误您的时间
    【解决方案2】:

    你可以试试下面的方法

    int rowIndex = 0;
    foreach (DataGridViewRow row in this.dataGridView1.SelectedRows)
    {
        con.Open();
    SqlCommand cmdo = new SqlCommand(@" update inventory set category = '"+textBox1.Text+"' WHERE id='" + row[rowIndex].Cells[0].Value.ToString() + "'", con);
    cmdo.ExecuteNonQuery();
    con.Close();
        rowIndex = rowIndex + 1;
    }
    

    您所需要的只是一个行索引,以便您可以使用它进行迭代。另外题外话,不建议在循环中打开/关闭数据库连接,因为这会导致大型数据集的性能问题。您可以考虑使用批量更新或存储过程。

    【讨论】:

    • 错误 2 当前上下文中不存在名称“dataGridView”错误 1 ​​无法使用 [] 将索引应用于“System.Windows.Forms.DataGridViewRow”类型的表达式
    • 抱歉,我输入的示例代码中出现了拼写错误。无论如何都要更新帖子以进行更正。
    【解决方案3】:

    您总是选择第一行 'SelectedRows[0]' 。您需要在 for 循环的帮助下遍历每一行。

    for(int i=0;i< dataGridView1.SelectedRows.Count;i++)
    {
    //iterate through each row
    con.Open();
    SqlCommand cmdo = new SqlCommand(@" update inventory set category = '"+textBox1.Text+"' WHERE id='" + dataGridView1.SelectedRows[i].Cells[0].Value.ToString() + "'", con);
    cmdo.ExecuteNonQuery();
    con.Close();
    }
    

    请检查一下!

    【讨论】:

    • 我现在已经更正了,如果这里有问题请告诉我!
    猜你喜欢
    • 1970-01-01
    • 2017-12-31
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多