Lou*_*Lou 2 .net c# datagridview bindingsource
是否可以取消在BindingSource.AddingNew事件处理程序中添加项目?
当用户单击 my 中的“添加新”按钮时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;
}
}
Run Code Online (Sandbox Code Playgroud)
即使我没有e.NewObject在处理程序中设置一个值,DataGridView 中也会出现一个新的(“空”)项。
是否可以取消添加项目?
如果您的 BindingSource 实现了ICancelAddNew接口,您应该能够在新添加的对象上调用 CancelNew 来还原它。我不建议在 AddNew 的事件处理程序中尝试这个。通过使用此接口,您的项目仍将添加到列表中,但处于挂起状态,其中 EndNew() 将提交事务,而 CancelNew() 将还原事务。看起来BindingList实现了 ICancelNew 并允许您执行以下操作:
public void MyFunctionWhereIAddNew()
{
var item = _myBindingSource.AddNew();
item.SetSomeParams(...);
if(item.CheckItemForSuccess() != true)
{
_myBindingSource.CancelNew(_myBindingSource.IndexOf(item));
}
}
Run Code Online (Sandbox Code Playgroud)
如果您想要有关如何实施您自己的 ICancelNew 的链接,请查看这篇旧博文。