在编辑单元格时,通过自动更新数据源中的基础对象,我的DataGridView是“有用的”。我想阻止这种情况并自行更新(以便我可以通过我们的自定义撤消管理器注册的方式执行更新。)
我认为这样做的方法是处理CellValueChanged事件,但是在调用事件处理程序时底层对象已经更新。
是否有正确的方法阻止DataGridView执行此操作?也许我可以处理一个特定的事件。
答案 0 :(得分:2)
这不能回答你的问题,但是我可能会建议你设计你的对象,使它在值改变之前(或之后)引发一个事件,这样就可以通知你的“撤消管理器” 。这样,您的逻辑就不依赖于网格。如果你将在其他方面使用此对象,您可以通知其他人有关更改的值。我的0.02美元
代码示例:
public class SomeClass
{
private int myInt;
public event EventHandler MyIntChanging;
public event EventHandler MyIntChanged;
protected void OnMyIntChanging()
{
var handler = this.MyIntChanging;
if (handler != null)
{
this.MyIntChanging(this, new EventArgs());
}
}
protected void OnMyIntChanged()
{
var handler = this.MyIntChanged;
if (handler != null)
{
this.MyIntChanged(this, new EventArgs());
}
}
public int MyInt
{
get
{
return this.myInt;
}
set
{
if (this.myInt != value)
{
this.OnMyIntChanging();
this.myInt = value;
this.OnMyIntChanged();
}
}
}
}
答案 1 :(得分:0)
我完全同意BFree的建议。如果您不想遵循这种方式,请使用在将数据写入基础对象之前发生的Datagridview.CellValidating事件,甚至允许取消操作。