簡體   English   中英

錯誤的行在綁定到DataAdapter的DataGridView中被刪除

[英]Wrong row gets deleted in DataGridView bound to DataAdapter

情況

我正在使用.NET4.0在VS2013中使用C#編寫Winforms應用程序。

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

對於插入和修改,效果很好。

問題

在datagridview中,當用戶選擇一行時,我希望他們能夠單擊Delete並將該行從網格和數據庫中刪除。 當我嘗試此操作時,該行將從datagridview中消失,當然光標會移動到另一行。 但是被刪除的數據庫行是光標所在的新的datagridview行。 這幾乎可以肯定是因為我使用datagridview.CurrentRow設置了delete命令的參數,並且我認為在這一階段,當前行確實發生了變化。

問題

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

當我從dgv引用CurrentRow時,無法生成SQL Delete命令不起作用,因為在我建立參數並進行適配器時,更新了dgv行。 這就是為什么我最終刪除錯誤的行。 所以我已經這樣解決了:

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

放心地使此工作正常進行,但這似乎是一個非常優雅的解決方案。 如果有人知道處理此問題的巧妙方法,將不勝感激。 我很想知道CommandBuilder應該使用什么邏輯。 (由於我的插入和更新需要進行Unix_TIMESTAMP轉換,因此我無法使用CommandBuilder。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM