我有一个Windows窗体,上面有一个DataGrid控件(Not DataGridView)。
DataGrid控件绑定到DataTable。每当用户按下网格上其中一行上的删除按钮时,我想检查条件并在条件为假时停止删除该行。
我订阅了DataTable的RowDeleting事件,但是我找不到取消用户执行的删除操作的方法。我怎样才能做到这一点?
答案 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