2011-10-13 29 views
1

私はエンティティにバインドされているバインディングソースを持っています。エンティティにバインドされたバインディングソースの変更を検出するにはどうすればよいですか?

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

次に、バインディングソースがdatagridviewに表示されます。データセットを使用する場合は、HasChanges()メソッドを呼び出して、ユーザーによって変更が加えられているかどうかを確認できます。また、私はcontext.ObjectStateManager.GetObjectStateEntries(...)が私が探しているようだが、私はそれを使用する方法を知らない。

私の目的は、ユーザーがフォームを離れたときに、メッセージボックスに「変更がいくつかあります。終了する前に保存しますか?」というメッセージが表示されます。

答えて

0

これは、これまでの最善の方法である:

bool changesMade = context. 
        ObjectStateManager. 
        GetObjectStateEntries(EntityState.Added | 
             EntityState.Deleted | 
             EntityState.Modified 
             ).Any(); 
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を返す場合は、最初に閉じるのをやめ、変更が必要かどうかを尋ねます。あなたが何か他のものが必要な場合は教えてください。

+0

ネイサンユーザーが行だけ(挿入なし削除なし)を変更するとき、それが真を返すのでしょうか? – JatSing

+0

これは挿入と削除のためのものではありません。今あなたのプログラムは行の修正を許可していますか?それはまったく別の解決策になるでしょう。 – Nathan

関連する問題