正在从绑定到数据网格视图的绑定列表中删除对象
本文关键字:绑定 列表 视图 删除 对象 数据网 数据 网格 | 更新日期: 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]);
如果您需要进一步的帮助,请发布完整的帖子。