为什么我需要在 SaveChanges 之前更改 Binding Source Position
Why do I need to change the Binding Source Position before I can SaveChanges
我有一个小型演示 WinForms 应用程序。其中一个表格是我的添加新人表格。我使用了详细信息视图而不是数据源中的 DataGridView
。当我输入数据并单击导航器上的保存按钮时,更改为零,但是我在 Load
形式的 AddNew
之后放置了 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 Position 才能识别更改并保存?
您不需要更改位置,实际上您需要调用 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
}
我有一个小型演示 WinForms 应用程序。其中一个表格是我的添加新人表格。我使用了详细信息视图而不是数据源中的 DataGridView
。当我输入数据并单击导航器上的保存按钮时,更改为零,但是我在 Load
形式的 AddNew
之后放置了 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 Position 才能识别更改并保存?
您不需要更改位置,实际上您需要调用 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
}