2013-10-01 133 views
0

在我的應用程序有一個名爲DataGridViewContracts用戶刪除行的數據表(自動刪除行)

我有Contracts_UserDeletingRow執行多個步驟的方法..

首先,它產生一個MessageBox確認操作。如果確認 - 行被刪除,一切正常。

然而,如果用戶選擇Cancel,該行被自動地從視圖中移除。 未刪除服務器端,只是隱藏。

要解決這個問題,我想這;

if (MessageBox.Show("Are you sure you want to delete?", "Verify Delete", MessageBoxButtons.OKCancel) == DialogResult.OK) 

{Update the record in background...} 

    else { GetContractLevels(); this.Activate(); } 

GetContractLevels()方法refreshs從源頭上來看,怎麼來它不執行?當我然後從按鈕點擊運行相同的方法 - 它的工作原理。

+1

您是否使用調試程序驗證了程序流是在狀態的? –

+0

'else'條件是'response!= DialogResult.OK'。在這種情況下,數據庫根本沒有更新;因此,即使你確實刷新了它,你也不應該期望看到變化。 –

+0

我們需要看到GetContractLevels() – Derek

回答

1

你必須設置e.Cancel = true

if (MessageBox.Show("Are you sure you want to delete?", "Verify Delete", MessageBoxButtons.OKCancel) == DialogResult.OK) 
{ Update the record in background... } 
else { 
    e.Cancel = true;//Do this to cancel the physical deleting row of user 
    GetContractLevels(); 
    this.Activate(); 
} 
+1

我想出了另一種方式,但這是更清潔 - 非常感謝。 – William

0

你有一個數據集?如果是這樣,那麼你可以看看你的Main()函數,在InitializeComponent()下面應該有一行,它將數據加載到你的datagridview中。請使用該代碼更新您的datagridview,以便當用戶取消該事務時,datagridview將會更新,如同沒有任何事情發生一樣。

0

我意識到,我刷新刪除方法,這意味着它刷新裏面的源代碼,但然後刪除,無論如何添加下面的方法解決它。

此行在刪除行後刷新。

然而,景景在我看來,一個更清潔的解決方案。

private void Contracts_UserDeletedRow(object sender, DataGridViewRowEventArgs e) 
      { 
       GetContractLevels(); 
      }