C# 如何删除wpf datagrid中的重复行?
大家好,我正在使用Observable集合在wpf datagrid中存储值,但我想自动删除重复的行。有人能帮我吗。我曾试过这样做,但没有成功。我正在使用MVVM 我的代码:C# 如何删除wpf datagrid中的重复行?,c#,wpf,mvvm,datagrid,observablecollection,C#,Wpf,Mvvm,Datagrid,Observablecollection,大家好,我正在使用Observable集合在wpf datagrid中存储值,但我想自动删除重复的行。有人能帮我吗。我曾试过这样做,但没有成功。我正在使用MVVM 我的代码: public ObservableCollection<VLANSPropertyClass> vlan { get; set; } vlan = new ObservableCollection<VLANSPropertyClass>(); void AddVlans() { if
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);
}
publicobservableCollection vlan{get;set;}
vlan=新的ObservableCollection();
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(“请填写空白字段”,“提醒”,MessageBox按钮。确定);
}
其他的
{
Console.WriteLine(“添加vlan”);
var serial=新的VLANSPropertyClass();
serial.S_No=vlan.Count+1;
serial.vname=vlaname;
serial.vid=VlanID;
serial.ip=VlanIP1+“+VlanIP2+”+VlanIP3+“+VlanIP4;
serial.mask=VLANASK1+“+VLANASK2+”+VLANASK3+“+VLANASK4;
serial.vports=所选VLAN端口;
如果(itemexists())
{
MessageBox.Show(“值已存在”);
}
其他的
{
添加(串行);
}
}
}
bool itemexists()
{
var item=新的VLANSPropertyClass();
返回
(item.vname==VLAName)&&
(item.ip==VlanIP1+“+VlanIP2+”+VlanIP3+“+VlanIP4)&&
(item.vname==VLAName)&&
(item.vports==SelectedVlanPort);
}
上述方法是添加行,但不会自动删除重复行。任何帮助都非常有用。您可以使用
LinQ
从集合中删除重复项。试着这样做:
vlan = GetSomeData(); // Fill with data however you want
vlan = new ObservableCollection<VLANSPropertyClass>(vlan.Distinct());
vlan=GetSomeData();//用你想要的方式填充数据
vlan=新的ObservableCollection(vlan.Distinct());
这甚至可以缩短为:
vlan = new ObservableCollection<VLANSPropertyClass>(GetSomeData().Distinct());
vlan=newobservetecollection(GetSomeData().Distinct());
这只适用于删除完全重复的对象,但。。。也就是说,共享相同引用的对象。如果您只想删除具有相同属性值的对象,那么可以使用带有参数的重载。当然,您需要实现
IEqualityComparer
接口才能使其正常工作。对不起,我的评论……我没有正确地看到您的代码
你的问题出在你的书呆子身上
试试这个:
if (vlan.FirstOrDefault( YOUR_CONDITIONS) ==null)
return false;
else return true;
我想你的情况应该是这样的:
x=>x.vname==serial.name&&
boolexistsitem应接收串行as参数
问候,
==========新编辑
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;
}
为什么不在添加新行之前先验证该行是否已存在?@sexta13…您能详细说明一下吗??