DataTable取消行删除

时间:2009-10-08 01:57:20

标签: c# winforms ado.net

我有一个Windows窗体,上面有一个DataGrid控件(Not DataGridView)。

DataGrid控件绑定到DataTable。每当用户按下网格上其中一行上的删除按钮时,我想检查条件并在条件为假时停止删除该行。

我订阅了DataTable的RowDeleting事件,但是我找不到取消用户执行的删除操作的方法。我怎样才能做到这一点?

4 个答案:

答案 0 :(得分:4)

虽然这个帖子已经有2年了,但我还是加了答案以防万一有人偶然发现。

对于DataTable中的每一行,都有方法“RejectChanges()”,您可以使用它来撤消删除。

我做了如下:

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

dt.RowDeleted += new DataRowChangeEventHandler(dt_RowDeleted);

b)在处理程序中,按如下方式调用功能“RejectChanges()”:

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

答案 1 :(得分:1)

鲁本斯

谢谢你的回复。我已经查了那个帖子,但找不到有用的解决方案。

我只是略微修改了我的项目,我现在有一个删除按钮,而不是直接从数据网格本身删除。

我更改了我的DataTable以禁止任何删除

dataTable.DefualtView.AllowDelete = false

并在删除按钮单击处理程序中,我编写了以下代码:

(datagridStandardRates.DataSource as DataTable).Rows[datagridStandardRates.CurrentRowIndex].Delete();

这使我可以完全控制何时删除行。

再次感谢您的帮助。

Raghu

答案 2 :(得分:1)

比上述解决方案容易得多。

在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;

答案 3 :(得分:0)

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

谷歌搜索了一下我遇到了How do I cancel a row delete in a DataSet;拜托,看一下。

HTH