【问题标题】:.NET DataBinding, Confirmation before removing items from the list.NET DataBinding,从列表中删除项目之前的确认
【发布时间】:2010-12-15 15:50:43
【问题描述】:

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

我正在使用的网格控件(我猜是大多数),调用 Collection 的 RemoveAt(int index) 方法 它有一个 void 返回值,即使我将从 bindingList 继承,覆盖该方法或为其(和其他)提供新的实现,它也无济于事,因为网格无法知道用户选择取消操作...

有没有办法只使用数据绑定和库存绑定列表、网格控件来解决这个问题?

我所做的解决方法是: 一种。继承表单 BindingList,实现 ICancellableRemoving(其中包含单个“bool RemoveItem(object item)”。 湾。从网格继承,覆盖它的 remove 方法(或类似方法),检查数据源是否实现了 ICancellableRemoving,如果是,则调用该方法,检查结果并相应地取消/继续操作。

附言 我实现了一个接口,因为 BindingList 中唯一具有布尔返回值的“Remove*”方法是 Collection 的 Remove(T Item),它是通用的……网格不是;)

提前致谢, 埃里克。

【问题讨论】:

    标签: data-binding datagridview bindinglist


    【解决方案1】:

    附加到OnRowDeleting()

    【讨论】:

    • 感谢您的快速回复,但我认为这比我的解决方案更糟糕......这个逻辑应该由列表实现......将逻辑放在这个方法中意味着我需要覆盖在删除行并希望用户确认的每个控件中都有类似的方法。这意味着重复和关注点的错误分离...
    • 其实不重复代码。您可以编写一个事件处理程序,然后将该事件连接到每个网格的删除事件。它与您上面的解决方法并没有什么不同,只是它更容易。
    • 就重复而言,我猜它非常像我的解决方案,但我所描述的问题是网格无法知道该项目是否已从数据源中删除......他们总是假设它是...(无效返回类型)所以他们总是从网格中删除行...有没有解决这个问题的方法?也许我错过了什么?
    • 实际上,事件处理程序的签名可能不匹配每个网格“removeitem”方法..然后我的解决方案更通用..但这并不重要.. ;)
    • 如果您连接此事件,然后检查用户对您的 MessageBox 的响应并随后设置“e.Cancel = true”,那么网格将永远不会删除该行。如果用户对您的对话框响应“是”,则永远不会设置布尔“取消”,并且数据网格将同时处理从 UI 和绑定列表中删除该行。
    【解决方案2】:

    这是 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多