【问题标题】:Removing objects from a bindinglist bound to a datagrid view从绑定到数据网格视图的绑定列表中删除对象
【发布时间】:2013-02-04 22:15:28
【问题描述】:

我正在尝试通过执行此操作从绑定到 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);
    }
}

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

【问题讨论】:

  • 有没有机会,removeList 参数是从数据库或服务中带来的?可能 sortableBindingPaymentList 实际上并不包含这些实例,而是代表相同数据的其他实例。
  • 它是从数据库或服务带来的,所以下面似乎建议我需要将 Equals 从 IEquatable 实现到我的 Payment 类?

标签: c# winforms


【解决方案1】:

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

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

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

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

【讨论】:

  • 是的,这应该是您的情况的解决方案。好答案+1
  • 我最终使用了 removeList.ForEach(payment => sortableBindingPaymentList.Remove(payment),因为我的 BindingList 不支持 RemoveAll()。到目前为止似乎工作正常。我主要使用 for 循环可读性,因为我对 LinQ 的使用还没有 100% 的信心。LinQ 有那么高效吗?
  • @Archaios7 正是因为可读性,您应该使用 LinQ 而不是 for
【解决方案2】:

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

它声明here: 列表的“删除”方法:

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

支付类应该实现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]);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    相关资源
    最近更新 更多