C#--DataTable中的DataRow刪除問題

     DataGridView控件可以和我們放在DataSet中的數據進行綁定,比如在DataSet的某一個DataTable中我們放置N行測試數據,然後和DataGridView控件dataGridView1進行綁定,那麼當我們對某一行測試數據進行刪除操作時,可以有兩種思路:

              1、 通過dataGridView1的移除行操作來間接操作DataTable,然後通過DataAdapterDataTable中的數據覆寫保存到數據庫。

指令:

  1. dataGridView1.Rows.Remove(dataGridView1.CurrentRow); 

              2、 直接操作DataTable,刪除選定的DataRow,從而刷新dataGridView1中的數據,然後通過DataAdapterDataTable中的數據覆寫保存到數據庫。

指令:

  1. form_DataSet.Tables["dvtest"].Rows.Remove(dr); 

   在執行後我們會發現,方法1成功更新了數據庫,而方法2更新了dataGridView1的展示,卻沒有實現數據庫中的更新。

 

   方法2啓動調試,會發現:在使用DataAdapter對象的Update()方法時,並沒有爲DataTable生成對應的Command對象,所以DataAdapter對象並沒有對數據庫執行相應的操作

 

   那麼爲什麼我們明明已經改變了DataTable對象,但CommandBuilder卻沒有生成相應的Command對象呢?原因在於:

 

   當我們執行方法1時,dataGridView1.Rows.Remove()方法並沒有真正刪除DataTable中對應的DataRow,而只是在對應的DataRow上放置了一個刪除標記,在使用DataAdapter對象的Update()方法時,因爲檢測到這個標記,所以會生成相應的DeleteCommand對象,並跟據該行鍵值執行刪除,從而成功覆寫回數據庫。

而在執行方法2時,DataTableRows屬性執行Remove()方法,不會放置刪除標記,而是直接從DataTable中刪除該DataRow;在使用DataAdapter對象的Update()方法時,沒有檢測到刪除標記,所以不會生成DeleteCommand對象,也就不會更新數據庫中的相對應數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章