如何删除 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);
}

上述方法是添加行,但它不会自动删除重复的行。任何帮助都将是非常可观的。

如何删除 wpf 数据网格中的重复行

可以使用

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;    
}