如何删除 wpf 数据网格中的重复行
本文关键字:网格 数据网 数据 何删除 删除 wpf | 更新日期: 2023-09-27 18:20:08
大家好,我正在使用可观察集合将值存储在 wpf 数据网格中,但我想自动删除重复的行。谁能帮我。我尝试过遵循方法但没有成功。我正在使用 MVVM。
我的代码 :
public ObservableCollection<VLANSPropertyClass> vlan { get; set; }
vlan = new ObservableCollection<VLANSPropertyClass>();
void AddVlans()
{
if ((String.IsNullOrEmpty(VlanName)) ||
String.IsNullOrEmpty(VlanID) ||
String.IsNullOrEmpty(VlanIP1) ||
String.IsNullOrEmpty(VlanIP2) ||
String.IsNullOrEmpty(VlanIP3) ||
String.IsNullOrEmpty(VlanIP4) ||
String.IsNullOrEmpty(SelectedVlanPort))
{
MessageBox.Show("Please fill the empty fields", "Alert", MessageBoxButton.OK);
}
else
{
Console.WriteLine("Add vlan");
var serial = new VLANSPropertyClass();
serial.S_No = vlan.Count + 1;
serial.vname = VlanName;
serial.vid = VlanID;
serial.ip = VlanIP1 + "." + VlanIP2 + "." + VlanIP3 + "." + VlanIP4;
serial.mask = Vlanmask1 + "." + Vlanmask2 + "." + Vlanmask3 + "." + Vlanmask4;
serial.vports = SelectedVlanPort;
if (itemexists())
{
MessageBox.Show("Value already present");
}
else
{
vlan.Add(serial);
}
}
}
bool itemexists()
{
var item = new VLANSPropertyClass();
return
(item.vname == VlanName) &&
(item.ip == VlanIP1 + "." + VlanIP2 + "." + VlanIP3 + "." + VlanIP4) &&
(item.vname == VlanName) &&
(item.vports == SelectedVlanPort);
}
上述方法是添加行,但它不会自动删除重复的行。任何帮助都将是非常可观的。
可以使用
LinQ
Enumerable.Distinct<TSource>
方法从集合中删除重复项。尝试这样的事情:
vlan = GetSomeData(); // Fill with data however you want
vlan = new ObservableCollection<VLANSPropertyClass>(vlan.Distinct());
这甚至可以缩短为:
vlan = new ObservableCollection<VLANSPropertyClass>(GetSomeData().Distinct());
不过,这仅适用于删除确切的重复对象...即,共享相同引用的对象。如果只想删除具有相同属性值的对象,则可以使用重载的 Enumerable.Distinct<TSource>
方法,该方法采用IEqualityComparer<T>
参数。 当然,您需要实现 IEqualityComparer<T>
接口才能使其正常工作。
对不起我的评论...我没有正确看到你的代码。
你的问题出在你的布币存在。
试试这个:
if (vlan.FirstOrDefault( YOUR_CONDITIONS) ==null)
return false;
else return true;
YOUR_CONDITIONS我认为一定是这样的:
x=>x.vname == serial.name && .....
您的布尔存在项应接收串行作为参数。
问候
==========新编辑
bool itemexists(VLANSPropertyClass serial){
if(vlan.FirstOrDefault(x=>x.vname ==serial.vname && serial.ip==x.ip && x.vports==serial.vports) == null)
return false;
else return true;
}