我正在尝试通过执行此操作从绑定到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);
}
}
任何帮助都表示赞赏,并提前致谢!
答案 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
循环。