我有一个连接到数据网格的集合ItemDemandCollection
。如果用户输入相同的数据,则警报消息需要显示重复的数据。
我该如何处理?
答案 0 :(得分:1)
尝试对输入的数据使用 ICollection.Contains(T)。 详细了解Collection.Contains Method
答案 1 :(得分:0)
您在数据网格中输入了哪些数据?你的每个项目是什么类型的?
E.g。您可能绑定了Employee
类的实例集合,并在数据网格上显示了Employee ID和Name作为列。
如果是这样,EmployeeName
属性或EmployeeID
属性可能会发生重复。但是,EmployeeName
上的重复项可以被允许,因为任何两名员工都可以拥有相同的Name
。但是不允许使用相同的ID。
因此,当输入ID并且您失去焦点时,该项目会被添加,并且会引发ObservableCollection.CollectionChanged
事件。处理此事件并在处理程序中,您可以检查“e.Action == Add”,如果是,则对现有项执行lambda查询,并在ID
属性中检查输入的值....
if (e.Action == NotifyCollectionChangedAction.Add
&& MyItems.Where(
item => item.EmployeeID == e.NewItems[0].EmployeeID).Count() > 1)
{
//Duplicates found!
}
如果这对您没有帮助,请详细说明您的要求。
答案 2 :(得分: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())”与“if(duplicates.Count()> 0)”相同。
也可以使用“duplicates”变量链接到一行; e.g。
if (yourCollectionOfItems.Any((item) => item.UniqueID == itemYouAreAboutToAddToCollection.UniqueID))
{
// Do error handling here.
}