gpt4 book ai didi

c# - BindingSource 取消 AddingNew

转载 作者:行者123 更新时间:2023-11-30 19:06:16 25 4
gpt4 key购买 nike

是否可以取消在 BindingSource.AddingNew 事件处理程序中添加项目?

当用户单击我的 BindingNavigator 中的“添加新”按钮时,我将打开一个对话框,该对话框可能返回也可能不返回有效文件。现在,我有这样的事情:

void bindingSource_AddingNew(object sender, AddingNewEventArgs e)
{
using (var dialog = new OpenFileDialog())
{
var result = dialog.ShowDialog();

// user canceled?
if (result == DialogResult.Cancel)
return;

// TryLoad will return null on failure
var data = TryLoad(dialog.FileName);

// only add the item to the grid if not null
if (data != null)
e.NewObject = data;
}
}

即使我没有将 e.NewObject 设置为处理程序中的值,DataGridView 中也会出现一个新的(“空”)项。

是否可以取消添加项目?

最佳答案

如果您的 BindingSource 实现了 ICancelAddNew接口(interface),你应该能够在新添加的对象上调用 CancelNew 来恢复它。我不建议在 AddNew 的事件处理程序中尝试这样做。通过此接口(interface),您的项目仍将添加到列表中,但处于挂起状态,其中 EndNew() 将提交事务,而 CancelNew() 将恢复事务。它看起来像 BindingList实现 ICancelNew 并允许您执行以下操作:

public void MyFunctionWhereIAddNew()
{
var item = _myBindingSource.AddNew();

item.SetSomeParams(...);

if(item.CheckItemForSuccess() != true)
{
_myBindingSource.CancelNew(_myBindingSource.IndexOf(item));
}
}

如果您想获得有关如何实现自己的 ICancelNew 的链接,请查看 this old blog post .

关于c# - BindingSource 取消 AddingNew,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12565895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com