2016-06-11 58 views
2

我使用此代码更新每个datagridview选定的行,但不幸的是它只更新我的第一个选定的行。为什么?更新每个选定的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(); 
} 

回答

2

问题是在每次迭代

dataGridView1.SelectedRows[0].Cells[0] 

使用数据网格不项)作为ID的第一个元素你应该尝试此代码:

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++; 
} 
+0

你的意思(WHERE ID ='” + item.SelectedRows [0] .Cells [0] .Value.ToString()+ “”“,CON)?? – user6453809

+0

我借此:错误\t \t 1'系统。 Windows.Forms.DataGridViewRow'不包含'SelectedRows'的定义,也没有接受 – user6453809

+0

@ user6453809类型的第一个参数的扩展方法'SelectedRows'对不起!检查更新后的答案 –

0

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

请检查这个!

+0

正如我现在已经改正,请让我知道如果这里有什么不对! – Akhilesh

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

所有你需要的是一排索引,所以你可以用它来遍历东西。另外,不建议在循环中打开/关闭数据库连接,因为这会导致大数据集的性能问题。您可以考虑使用批量更新或存储过程。

+0

错误\t \t 2“的dataGridView”不在当前上下文中存在的名称\t \t错误1 \t样品中无法应用用[]索引到类型“System.Windows.Forms.DataGridViewRow” – user6453809

+0

对不起只是一个错字的表达我键入的代码。无论如何,发布更新修正。 – woodykiddy