如何在绑定到EntityCollection时获取Windows窗体DataGridView以显示新记录

时间:2011-01-23 17:20:43

标签: .net winforms datagridview entitycollection

尝试在运行时向EntityCollection添加新记录,并使用新信息更新DataGridView。

我尝试将datagridview直接绑定到实体集合(即ObjectSet),并通过绑定到同一集合的BindingSource绑定。

我已经尝试了DataGridView.Refresh(),DataGridView.EndEdit()和BindSource.ResetBindings()等,但似乎没有任何效果。

3 个答案:

答案 0 :(得分:0)

试试:

bindingSource.DataSource = null;
bindingSource.DataSource = theCollection;

或者,您可以在BindingList<T>中维护数据的内存副本。将DataGridView绑定到BindingList,当您向ObjectSet添加实体时,也将其添加到BindingList

答案 1 :(得分:0)

我遇到了同样的问题。微软应该关心使用他们技术的人,EF应该关心数据绑定。 Jaime,如果您找到更好的方法,请更新此列表。对我来说,重新创建上下文实例对我来说很好。有趣的是调试器显示实体上下文&amp;绑定源有最新的更新,但datagridview仍然不刷新。感谢

Here是迄今为止我找到的最佳解决方案 -

基本上你需要做

bindingSource.DataSource = EntityContext.Collection
                               .Execute(MergeOption.AppendOnly);

答案 2 :(得分:0)

我希望现在还为时不晚=)我有一些在这里有用的东西......

// 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();
}