C# 数据表取消行删除

C# 数据表取消行删除,c#,winforms,ado.net,C#,Winforms,Ado.net,我有一个windows窗体,上面有一个DataGrid控件(不是DataGridView) DataGrid控件绑定到DataTable。每次用户按下网格中某一行上的delete按钮时,我都想检查一个条件,如果条件为false,则停止删除该行 我已经订阅了DataTable的RowDelete事件,但是我找不到取消用户执行的删除操作的方法。如何实现这一点?我的第一个想法是建议“e.Cancel=true”;但该属性不可用 我在谷歌上看到了一点;请看一看 赫本 谢谢你的回复。我已经查过那条线索了,

我有一个windows窗体,上面有一个DataGrid控件(不是DataGridView)

DataGrid控件绑定到DataTable。每次用户按下网格中某一行上的delete按钮时,我都想检查一个条件,如果条件为false,则停止删除该行


我已经订阅了DataTable的RowDelete事件,但是我找不到取消用户执行的删除操作的方法。如何实现这一点?

我的第一个想法是建议“e.Cancel=true”;但该属性不可用

我在谷歌上看到了一点;请看一看

赫本

谢谢你的回复。我已经查过那条线索了,但找不到有用的解决办法

我只是稍微修改了我的项目,我现在有一个删除按钮,而不是直接从datagrid本身删除

我更改了数据表以禁止任何删除

dataTable.DefualtView.AllowDelete = false
在delete button click处理程序中,我编写了以下代码:

(datagridStandardRates.DataSource as DataTable).Rows[datagridStandardRates.CurrentRowIndex].Delete();
这使我能够完全控制何时删除一行

再次感谢你的帮助


Raghu

虽然这条线索已经有2年历史了,但我还是添加了答案,以防有人无意中发现

对于DataTable中的每一行,都有一个方法“RejectChanges()”,可用于撤消删除

我做了如下工作:

a) 向DataTable中添加一个“RowDeleted”处理程序:

b) 在处理程序中,调用函数“RejectChanges()”,如下所示:

void dt_RowDeleted(object sender, DataRowChangeEventArgs e)
{
     if ( ... Add your condition here ... ) 
         e.Row.RejectChanges();
}

比上述解决方案简单得多

在UserDeletingRow事件中,只需调用e.Cancel=true

DialogResult dlgRes = MessageBox.Show("Are you sure that you want to delete this Factor?", "DELETE ITEM?", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (dlgRes == DialogResult.Yes)
{
    //WBSDA.Delete(dgvR.Cells["WBSID"].Value.ToInt());
    tslMessage.Text = "Item Deleted";
}
else
    e.Cancel = true;

只是给乔治的回答加上一个简短的注释。按照他的建议去做,不要试图拒绝删除事件中的删除。因为,嗯,这不起作用:-d这也阻止取消编辑的单元格值。这可能会使你烦恼。如果要撤消当前单元格上的更改!!!
DialogResult dlgRes = MessageBox.Show("Are you sure that you want to delete this Factor?", "DELETE ITEM?", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (dlgRes == DialogResult.Yes)
{
    //WBSDA.Delete(dgvR.Cells["WBSID"].Value.ToInt());
    tslMessage.Text = "Item Deleted";
}
else
    e.Cancel = true;