在我的应用程序中,我有一个名为DataGridView
的{{1}}。
我有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(); }
方法从源代码刷新视图,它怎么不执行?然后,当我从按钮单击运行相同的方法时 - 它可以工作。
答案 0 :(得分: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 :(得分:0)
你有数据集吗?如果是这样,那么你可以查看Main()函数,在InitializeComponent()下面应该有一行,它将数据加载到datagridview中。请使用该代码更新您的datagridview,以便在用户取消事务时,datagridview将更新,就好像什么也没发生一样。
答案 2 :(得分:0)
我意识到我正在刷新删除方法中的源代码,这意味着它会刷新,但无论如何都会删除,添加以下方法解决了它。
删除一行后刷新。
然而,King King在我看来有更清洁的解决方案。
private void Contracts_UserDeletedRow(object sender, DataGridViewRowEventArgs e)
{
GetContractLevels();
}