为什么在保存更改之前需要更改绑定源位置
本文关键字:绑定 位置 保存更改 为什么 | 更新日期: 2023-09-27 18:26:47
我有一个小的WinForms应用程序演示。其中一个表单是我的"添加新人"表单。我使用了"详细信息"视图,而不是数据源中的DataGridView
。当我输入数据并单击导航器上的保存按钮时,没有任何更改。但是,我在AddNew
之后以Load
的形式放置了MovePrevious
和MoveNext
,一切正常。
public partial class AddPersonForm : Form
{
private readonly DemoContext _context;
public AddPersonForm()
{
_context = new DemoContext();
InitializeComponent();
}
protected override void OnLoad(EventArgs e)
{
_context.People.Load();
personBindingSource.DataSource = _context.People.Local.ToBindingList();
personBindingSource.AddNew();
personBindingSource.MovePrevious();
personBindingSource.MoveNext();
base.OnLoad(e);
}
private void personBindingNavigatorSaveItem_Click(object sender, EventArgs e)
{
int changes = _context.SaveChanges();
Debug.WriteLine("# of changes: " + changes);
}
}
为什么我需要在BindingSource位置识别更改并保存之前切换它?
您不需要更改位置,事实上,您需要调用BindingSource的EndEdit,该BindingSource将挂起的更改应用于基础数据源。
更改位置会导致基础货币管理器调用EndCurrentEdit
,这就是绑定源的EndEdit
方法为您所做的。
所以这就是你通常想要做的:
try
{
this.Validate();
bindingSource1.EndEdit();
//Save data by dbContext.SaveChange or tableAdapter.Update
//Set the dialog result or show a success message
}
catch (Exception ex)
{
//Handle the exception, log it and/or show a failure message
}