2016-06-11 45 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