如何检测绑定到实体的bindingsource的变化?

时间:2011-10-13 02:33:18

标签: c# entity-framework bindingsource

我有一个绑定到实体的绑定源。

normBindingSource.DataSource =
dowacodbEntities.norms.OrderBy(o1 => o1.UsePurpose_id).ThenBy(o2 => o2.Quantity);

然后在datagridview中显示bindingsource。如果我使用数据集,我可以调用HasChanges()方法来检查用户是否进行了更改。此外,我发现context.ObjectStateManager.GetObjectStateEntries(...)似乎是我正在寻找的,但我不知道如何使用它。

我的目的是当用户离开表单时,会出现一个消息框显示:“有一些更改,您想在退出之前保存它吗?”

2 个答案:

答案 0 :(得分:1)

试试这个。我也遇到过。

创建一个检查修改的类。

 //define first your datacontext
 List<dowaCodbEntities> dowacodbEntities;

 private bool CheckForModifications()
  {
    List<dowaCodbEntities> dowaCodbEntitiesCopy = normBindingSource.DataSource.Cast<dowaCodbEntities>().ToList();
    if(dowacodbEntities.Count != dowaCodbEntitiesCopy.Count)
      return true;
   }

只要你需要它就可以调用该功能,主要是关闭时。然后,如果它返回true,则先停止关闭并询问是否要进行更改。如果您还有其他需要,请告诉我。

答案 1 :(得分:0)

这是迄今为止最好的方法:

bool changesMade = context.
                   ObjectStateManager.
                   GetObjectStateEntries(EntityState.Added | 
                                         EntityState.Deleted | 
                                         EntityState.Modified
                                        ).Any();