【发布时间】:2018-07-16 07:08:19
【问题描述】:
这是场景:
我有一个编辑对话框表单,上面有 BindingSource 和一些数据绑定文本框:
我将一个实体传递给表单构造函数,并将其加载到BindingSource.DataSource,这会导致数据绑定控件显示属性值。
问题是当用户编辑TextBox 控件中的值并且Validating 事件被传递时,数据源发生了变化,尽管它没有应用于数据库,但是当用户看到编辑后的值时,它仍然会使用户感到困惑在列表表单上,直到下一个应用程序重新启动。
所以问题是:如何防止绑定源立即反映更改或如何回滚?
我继承了绑定源并创建了一个新的绑定源,如下所示:
public class SuperBindingSource:BindingSource
{
#region Properties
public object DataSourceBeforeChange { get; private set; }
#endregion
#region Methods
public void ResetChanges()
{
this.DataSource = this.DataSourceBeforeChange;
}
#endregion
protected override void OnDataSourceChanged(EventArgs e)
{
base.OnDataSourceChanged(e);
DataSourceBeforeChange=this.DataSource.DeepClone();
}
}
虽然我不确定这是否是一个好方法。
【问题讨论】:
-
DeepClone() 来自创建克隆的 DeepCloner Nuget 包。
标签: c# .net winforms data-binding bindingsource