尝试在运行时将新记录添加到 EntityCollection 并使用新信息更新 DataGridView。
我尝试将datagridview 直接绑定到实体集合(即ObjectSet),并通过绑定到同一集合的BindingSource。
我已经尝试过 DataGridView.Refresh()、DataGridView.EndEdit() 和 BindSource.ResetBindings() 等,但似乎没有任何效果。
尝试在运行时将新记录添加到 EntityCollection 并使用新信息更新 DataGridView。
我尝试将datagridview 直接绑定到实体集合(即ObjectSet),并通过绑定到同一集合的BindingSource。
我已经尝试过 DataGridView.Refresh()、DataGridView.EndEdit() 和 BindSource.ResetBindings() 等,但似乎没有任何效果。
我希望现在还为时不晚 =) 我有一些可以在这里工作的东西......
// Entity Data Model
private ManagerEntities context = new ManagerEntities();
// declare private member
private BindingList<Currency> lstCurrencies = null;
// on form load, load data and bind to DataGridView's DataSource
private void Form1_Load(object sender, EventArgs e) {
lstCurrencies = new BindingList<Currency>();
ObjectResult or = ((ObjectQuery)currencies).Execute(MergeOption.AppendOnly);
foreach (Currency c in or)
lstCurrencies.Add(c);
// dgMain is my DataGridView
dgMain.DataSource = lstCurrencies;
}
// this will save objects that have changed. You might want to add logic for newly created and deleted objects.
private void btnSave_Click(object sender, EventArgs e) {
context.SaveChanges();
}
试试看:
bindingSource.DataSource = null;
bindingSource.DataSource = theCollection;
或者,您可以在BindingList<T>
. 将 DataGridView 绑定到 BindingList,当你向 BindingList 添加实体时ObjectSet
,也将其添加到 BindingList 中BindingList
。
我遇到了同样的问题。微软应该关心使用他们技术的人,而 EF 应该关心数据绑定。Jaime,如果您找到更好的方法,请更新此列表。对我来说,重新创建上下文实例对我来说很好。有趣的是调试器显示实体上下文和绑定源有最新更新,但 datagridview 仍然没有刷新。谢谢
这是迄今为止我找到的最佳解决方案 -
基本上你需要做
bindingSource.DataSource = EntityContext.Collection
.Execute(MergeOption.AppendOnly);