0

在我的应用程序中,我有一个DataGridView被调用的Contracts.

我有一种方法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()怎么不执行?然后,当我通过单击按钮运行相同的方法时-它可以工作。

4

3 回答 3

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(); 
}
于 2013-10-01T09:03:50.157 回答
0

我意识到我正在刷新删除方法中的源,这意味着它会刷新,但无论如何都会删除,添加了以下方法解决了它。

这会在删除一行后刷新。

但是,在我看来,King King 有一个更干净的解决方案。

private void Contracts_UserDeletedRow(object sender, DataGridViewRowEventArgs e)
            {
                GetContractLevels();
            }
于 2013-10-01T09:09:01.793 回答
0

你有数据集吗?如果是这样,那么您可以查看您的 Main() 函数,在 InitializeComponent() 下方应该有一行,它将数据加载到您的 datagridview 中。请使用该代码更新您的 datagridview,这样当用户取消事务时,datagridview 将被更新,就好像什么都没发生一样。

于 2013-10-01T08:36:23.223 回答