正在从绑定到数据网格视图的绑定列表中删除对象

本文关键字:绑定 列表 视图 删除 对象 数据网 数据 网格 | 更新日期: 2023-09-27 17:57:29

我正试图通过这样做从绑定到DataGridView的BindingList中删除对象。。。

private void RemoveItems(List<Payment> removeList)
{
    for (int i = removeList.Count - 1; i >= 0; i--)
    {
    sortableBindingPaymentList.Remove(removeList[i]);
    }
}

我自己尝试调试它,但remover始终=-1(意味着没有找到匹配项),我110%确信removeList中的付款列表在我的sortableBindingList中包含匹配项。。。

private void RemoveItems(List<Payment> removeList)
{
    int remover;
    for (int i = removeList.Count - 1; i >= 0; i--)
    {
        remover = sortableBindingPaymentList.IndexOf(removerList[i]);
        sortableBindingPaymentList.RemoveAt(remover);
    }
}

如有任何帮助,我们将不胜感激!

正在从绑定到数据网格视图的绑定列表中删除对象

我不确定我会走IEquatable的路。。根据您使用的ORM,这可能会给您带来一些麻烦。

您的实体有主键吗?你可以试试这个:

private void RemoveItems(List<Payment> removeList)
{
    removeList.ForEach(x => sortableBindingPaymentList.RemoveAll(s => s.Id == x.Id));
}

p.S:我强烈建议您开始使用LinQ进行此类操作,而不是for循环。

如果removeList不包含与sortableBindingPaymentList中的引用相同的引用(相同的对象),那么该方法将返回-1,我认为这在您的情况下会发生。

声明如下:一个列表的"删除"方法:

此方法使用默认的相等比较器EqualityComparer来确定相等。默认值为T,即列表中值的类型。

支付类应实现IEquatable接口。

例如:

     public class Payment : IEquatable 
     {
        public  bool Equals(Payment paymentObj)
             {
                 //is current instance equal to payment OBJ?
                 //if yes, then return true otherwise false
             }
      }

现在,即使列表集合中有不同的对象实例,这个调用也应该有效。

      sortableBindingPaymentList.Remove(removeList[i]);

如果您需要进一步的帮助,请发布完整的帖子。