为什么在保存更改之前需要更改绑定源位置

本文关键字:绑定 位置 保存更改 为什么 | 更新日期: 2023-09-27 18:26:47

我有一个小的WinForms应用程序演示。其中一个表单是我的"添加新人"表单。我使用了"详细信息"视图,而不是数据源中的DataGridView。当我输入数据并单击导航器上的保存按钮时,没有任何更改。但是,我在AddNew之后以Load的形式放置了MovePreviousMoveNext,一切正常。

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
}