【问题标题】:Preventing DataGridView from automatically committing edits to data-bound object防止 DataGridView 自动提交对数据绑定对象的编辑
【发布时间】:2009-05-20 23:52:00
【问题描述】:

我的 DataGridView 通过在编辑单元格时自动更新数据源中的基础对象来“提供帮助”。我想阻止这种情况并自己进行更新(这样我就可以通过我们的自定义撤消管理器注册的方式执行更新)。

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

是否有防止 DataGridView 这样做的正确方法?也许我可以处理一个特定的事件。

【问题讨论】:

    标签: c# winforms datagridview


    【解决方案1】:

    这并不能直接回答您的问题,但是我可能会建议您设计您的对象,使其在值更改之前(或之后)引发事件,因此可以通知您的“撤消管理器” .这样你的逻辑就不会绑定到网格上。如果以后您将将此对象与其他对象一起使用,您也可以通知其他人有关正在更改的值。我的 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();
                }
    
            }
        }
    }
    

    【讨论】:

    • 内心深处我可能害怕这个答案。这可能是正确的做事方式,但实施起来也可能比我希望的快速破解要多得多。不过还是谢谢。
    【解决方案2】:

    我完全同意 BFree 的建议。如果您不想遵循这种方式,请使用在数据写入基础对象之前发生的Datagridview.CellValidating 事件,甚至允许取消操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-16
      • 2013-05-28
      • 1970-01-01
      相关资源
      最近更新 更多