I have a small demo WinForms app. One of the Forms is my Add New Person form. I used the Details View instead of the DataGridView
from my Data Sources. When I enter data and click the save button on the Navigator there are zero changes, However I put a MovePrevious
and a MoveNext
after my AddNew
in the form Load
, everything works as expected.
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);
}
}
Why do I need to toggle the BindingSource Position before it will recognize changes and save?
You don't need to change the position, in fact you need to call
BindingSource.EndEdit
that applies pending changes to the underlying data source.Changing the position causes the underlying currency manager calls
EndCurrentEdit
and this is what theEndEdit
method of binding source does for you.