2013-10-01 92 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(); 
      }