防止DataGridView自动将编辑提交到数据绑定对象

时间:2009-05-20 15:30:18

标签: c# winforms datagridview

在编辑单元格时,通过自动更新数据源中的基础对象,我的DataGridView是“有用的”。我想阻止这种情况并自行更新(以便我可以通过我们的自定义撤消管理器注册的方式执行更新。)

我认为这样做的方法是处理CellValueChanged事件,但是在调用事件处理程序时底层对象已经更新。

是否有正确的方法阻止DataGridView执行此操作?也许我可以处理一个特定的事件。

2 个答案:

答案 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事件,甚至允许取消操作。