1

我正在尝试通过执行此操作从绑定到 DataGridView 的 BindingList 中删除对象...

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

尝试自己调试时,我尝试了以下操作,但是 remover always = -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);
    }
}

任何帮助表示赞赏,并提前感谢!

4

2 回答 2

1

我不确定我会走这IEquatable条路..取决于您使用的 ORM,这可能会给您带来一些麻烦。

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

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

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

于 2013-02-04T22:36:58.087 回答
1

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

在这里声明:列表的“删除”方法:

“此方法使用默认相等比较器 EqualityComparer.Default 确定相等性,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]);

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

于 2013-02-04T22:27:12.673 回答