我使用此代码更新每个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();
}
答案 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();
}
请检查一下!