更新每个选定的datagridview行

时间:2016-06-11 15:00:06

标签: c#

我使用此代码更新每个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();
}

3 个答案:

答案 0 :(得分:2)

问题是在每次迭代中使用 datagrid 的第一个元素( not item )作为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++;
}

答案 1 :(得分: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 :(得分:1)

您总是选择第一行' 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();
}

请检查一下!