Data binding .NET数据绑定,从列表中删除项目前的确认

Data binding .NET数据绑定,从列表中删除项目前的确认,data-binding,datagridview,bindinglist,Data Binding,Datagridview,Bindinglist,我有一个BindingList作为数据源和网格控件, 如果用户删除网格中的一行,我希望他得到确认(例如messagebox) 我正在使用的网格控件(我想大多数都是这样)调用RemoveAt(int-index),即Collection方法 它有一个无效的返回值,即使我将从bindingList继承、重写该方法或为其提供新的实现(以及其他),它也不会有帮助,因为网格无法知道用户选择取消该操作 有没有办法只使用数据绑定和stock bindinglist网格控件来解决这个问题 我所做的变通方法是:

我有一个BindingList作为数据源和网格控件, 如果用户删除网格中的一行,我希望他得到确认(例如messagebox)

我正在使用的网格控件(我想大多数都是这样)调用RemoveAt(int-index),即Collection方法 它有一个无效的返回值,即使我将从bindingList继承、重写该方法或为其提供新的实现(以及其他),它也不会有帮助,因为网格无法知道用户选择取消该操作

有没有办法只使用数据绑定和stock bindinglist网格控件来解决这个问题

我所做的变通方法是: A.继承表单BindingList,实现ICancellableRemoving(其中包含单个“boolRemoveItem(对象项)”。 b、 从网格继承,重写其remove方法(或类似方法),检查数据源是否实现ICancellableRemoving,如果实现,则调用该方法,检查结果并相应地取消/继续操作

附言 我实现了一个接口,因为BindingList中唯一的“Remove*”方法具有bool返回值,它是集合的Remove(T Item),它是泛型的……网格不是;)

提前感谢,,
Erik.

附加到

这是WinForms吗?如果是,WinForms中的DataGridView控件有一个可以调用的UserDeletingRow()事件。例如:

// wire up the event
myGrid.UserDeletingRow += new DataGridViewRowCancelEventHandler(myGrid_UserDeletingRow);

// event handler
private void myGrid_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
{
    DialogResult result = MessageBox.Show("Are you sure you wish to delete this row?", "Are you sure?", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

    if (result == DialogResult.No)
        e.Cancel = true;
}

谢谢你的快速回复,但我认为这比我的解决方案更糟糕。。。这个逻辑应该通过列表来实现。。。将逻辑放在这个方法中意味着我需要覆盖每个删除行并希望用户确认的控件中的类似方法。。这意味着关注点的重复和错误分离…实际上它不会重复代码。您可以编写一个事件处理程序,然后将事件关联到每个网格的删除事件。它实际上与上面的解决方法没有什么不同,只是简单多了。就复制而言,我想它与我的解决方案非常相似,但我要描述的问题是网格无法知道该项是否已从数据源中删除。。。他们总是认为这是。。。(void return type)所以他们总是从网格中删除行。。。这个问题有解决办法吗?也许我遗漏了什么?事实上,事件处理程序的信号可能与每个网格“removeitem”方法都不匹配。。那么我的解决方案就更一般了。。但那真的没关系……)如果您连接此事件,然后检查用户对MessageBox的响应并随后设置“e.Cancel=true”,则网格将永远不会删除该行。如果用户对您的对话框做出“是”的响应,那么bool“Cancel”永远不会被设置,datagrid将同时处理从UI和bindinglist中删除该行。