2015-06-01 46 views
0

形勢 DataGridView中刪除:錯列被綁定到DataAdapter的

我正在寫使用C#在VS2013與.NET4.0 WinForms應用程序。

我有一個datagridview,我綁定到一個DataAdapter鏈接到MySQL表。我正在使用DataAdapter的Update方法執行更新。由於MySQL表中日期和布爾值的非常規處理,我設置了自己的SQL命令,而不是使用CommandBuilder。這些參數在調用Update之前由參數設置。我在RowValidated上調用Update。

插入和修改此工作正常。

問題

在DataGridView,當用戶選擇單行,我希望他們能夠擊中刪除和有從電網和數據庫都刪除的行。當我嘗試這一行時,該行從datagridview中消失,當然光標移動到另一行。但數據庫被刪除的行是光標所在的新的datagridview行。這幾乎肯定是因爲我使用datagridview.CurrentRow來設置刪除命令的參數,並且我認爲在這個階段當前行確實已經改變了。

問題

怎樣更改這項安排,以便刪除將正常工作?很明顯,根本問題是在數據庫更新發生之前該行已從網格中消失,但我不知道如何解決該問題。我懷疑這個解決方案可能在於通過不同的事件處理事情,但我不確定是哪一個。

+0

不要直接從datgridview中刪除數據。從數據表中刪除數據,datagridview應該自動更新。 DataGridview和dataTable的行號應該始終相同。 – jdweng

+0

謝謝@jdweng。因此,現在在UserDeletingRow中,我手動刪除所需的行,重新填充適配器,然後刷新datagridview。這_appears_很好,所需的行從網格中消失。但是,在數據庫中,所需的行已經被_and_光標所在的新行刪除。後者可能是因爲RowValidated仍然被觸發,導致適配器的更新。那麼,我該如何a)提示Update方法來處理刪除所需的行,或者b)手動刪除所需的行,並阻止Update執行後續的刪除。 – ifinlay

+0

您已繞過命令構建器。命令生成器執行Select命令並創建三個附加命令:更新,插入和刪除。我認爲你需要全部4條命令才能使更新正常工作。更新需要能夠刪除行。 – jdweng

回答

0

當我從dgv引用CurrentRow時,生成SQL刪除命令不起作用,因爲在構建我的參數並執行adapter.Update時,dgv行已消失。這就是爲什麼我最終刪除錯誤的行。所以我已經解決了這樣的問題:

  • 在UserDeletingRow事件中,我存儲了被刪除行的主鍵值。
  • 在RowValidated中,我稱之爲adapter.Update,我首先使用存儲的主鍵構建正確的SQL刪除命令。即使該行已經從dgv中刪除,數據庫刪除現在可以正常工作。

解除了這個工作,但這看起來像一個很不雅的解決方案。感激的是,如果有人知道處理這個問題的一種狡猾的方式。我很想知道CommandBuilder會使用什麼邏輯。 (可惜我不能使用CommandBuilder,因爲我的插入和更新需要執行Unix_TIMESTAMP轉換)。