在 C# 應用程式中操作 Access 資料庫時,開發者常會遇到一個令人困惑的問題:明明在 DataGridView 中選中了某一行並嘗試刪除,程式卻總是刪除資料表中的第一行資料。這通常是因為程式碼直接使用了 ds.Tables["DressingWheel"].Rows[0] 這樣的硬式索引,導致永遠只針對第一行進行操作。
當你編寫如下程式碼時:
DataRow dr = ds.Tables["DressingWheel"].Rows[0];
這裡的 Rows[0] 明確指定了索引為 0 的行,即資料表的第一行。無論使用者在介面上選中哪一行,這段程式碼都不會隨之改變,因此刪除操作永遠作用於第一筆資料。
若專案中使用了 DataGridView 顯示資料,應利用其 CurrentRow.Index 屬性動態獲取使用者當前選中的行索引,再對應到 DataTable 中的行進行操作。正確程式碼如下:
int index = dgv.CurrentRow.Index;
DataRow dr = ds.Tables["DressingWheel"].Rows[index];
dr.Delete(); // 標記刪除,後續配合 Update 寫入資料庫
DataGridView 的行順序與 DataTable 的行順序一致(未經過排序、篩選導致順序不一致時,需透過主鍵或唯一識別碼查找對應行)。dr.Delete() 後,記得使用 DataAdapter.Update() 將變更同步回 Access 資料庫。dgv.SelectedRows 集合逐一處理。掌握這個技巧,即可精準刪除使用者選中的任意行資料,避免誤刪第一行的低級錯誤。