我有以下代码。出于某种原因,当触发“CellMouseDown”事件时,它似乎为我的网格中的每一行调用两次“Equals”方法。
我最近做了一些改变,显然其中一个引起了这种情况,但我现在没办法退出这些变化。
问题是我得到了一个无效的强制转换异常,因为此时“obj”不是“DataSource”类型(如果没有被解雇则无关紧要,这不应该是)
当“CellMouseDown”发射(并且发生了很多次)时,是否有人会想到“Equals”被调用的原因?
谢谢,
安德鲁
private void gridDataSources_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
// this is so I can select the current row when you right-click to change the color
if (e.ColumnIndex >= 0 && e.RowIndex >= 0)
{
this.gridDataSources.Rows[e.RowIndex].Selected = true;
this.gridDataSources.CurrentCell = this.gridDataSources.Rows[e.RowIndex].Cells[e.ColumnIndex];
}
}
public override bool Equals(object obj)
{
DataSource original = (DataSource)obj;
// code removed for brevity
return true;
}
答案 0 :(得分:0)
显然,Equin BindingListView使用了一个对象" Equals"方法内部。现在我不确定为什么以前从来不是一个问题,因为我的问题是编码不好而且它就像那样(不是我提到的变化之一)。结果我压倒了#34; Equals"我的自定义类上的方法,但我实际上是在比较两种不同的对象类型。一个是我的自定义类(模型),另一个是实际实体。我将这些相互比较,以确定我是否需要写一个历史记录条目(甚至保存任何东西,因为如果它没有什么不同,那么为什么要打扰),但我比较苹果和橘子,你不应该在覆盖"等于"方法