2012-03-12 14 views

答えて

1

入力したデータにICollection.Contains(T)を使用してみてください。 詳細については、Collection.Contains Method

0

あなたはどのデータをデータグリッドに入力していますか?あなたの各アイテムはどのタイプですか?

など。 Employeeクラスのインスタンスのコレクションをバインドし、Employee IDとNameをデータグリッドの列として表示している可能性があります。

この場合、重複はEmployeeNameプロパティまたはEmployeeIDプロパティで発生する可能性があります。しかし、EmployeeNameの複製は、任意の2人の従業員が同じNameを持つことができるように許可することができます。しかし、同じIDは許可されません。

IDを入力してフォーカスを失うと、アイテムが追加され、ObservableCollection.CollectionChangedイベントが発生します。 ....このイベントを処理しますので、既存の項目にラムダクエリを実行し、入力された値のためIDプロパティにチェックすると、「e.Actionは==追加」場合、ハンドラに、次のことが確認でき

if (e.Action == NotifyCollectionChangedAction.Add 
    && MyItems.Where(
     item => item.EmployeeID == e.NewItems[0].EmployeeID).Count() > 1) 
{ 
    //Duplicates found! 
} 

これがあなたを助けていない場合は、あなたの要件を満たすようにしてください。

0

WinRTでこれと同様のことをしようとしていましたが、これは私のために働いていました。私はWPFでもそうだと思います。 WPFと似ていますが、答えは多かれ少なかれです。これは、あなたが持っている各データ項目には一意のID(または一意の値)があり、(コレクション内に追加しようとしている)すべての項目に同じ一意のIDフィールドがあることを前提としています。

var duplicates = yourCollectionOfItems.Where((item) => item.UniqueID == itemYouAreAboutToAddToCollection.UniqueID); 

if (duplicates.Any()) throw new SomeDuplicateException(); 
// And/or show your alert dialog, in this case. 

は、 "IF(duplicates.Any())" "(duplicates.Count()> 0)であれば" と同じです。

"duplicates"変数を使用せずに1つの行にチェーンすることもできます。例えば

if (yourCollectionOfItems.Any((item) => item.UniqueID == itemYouAreAboutToAddToCollection.UniqueID)) 
{ 
    // Do error handling here. 
} 
関連する問題