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

时间:2013-02-04 22:15:29

标签: c# winforms

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

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

尝试自己调试我尝试了以下内容,但是卸妆总是= -1(意味着找不到匹配项),我110%确定我的sortList中的Payment列表包含了我的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);
    }
}

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

2 个答案:

答案 0 :(得分:1)

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

它指出here: 列表的“删除”方法:

“此方法使用T的默认相等比较器EqualityComparer.Default确定相等性,即列表中值的类型。”

付款类应实施IEquatable interface

例如:

     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]);

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

答案 1 :(得分:1)

我不确定我会采用IEquatable方式......取决于您使用的ORM可能会给您带来一些麻烦。

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

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

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