You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# DataGridView自定义EditingControl:如何将修改值同步至对应单元格?

DataGridView自定义EditingControl单元格值不更新的解决方法

核心问题原因

自定义编辑控件未正确实现IDataGridViewEditingControl接口的关键逻辑,导致DataGridView无法捕获编辑后的新值。

具体修复步骤

  • 正确实现IDataGridViewEditingControl接口核心成员
    自定义控件必须完整实现该接口的以下关键部分:

    • EditingControlFormattedValue属性:Getter返回控件当前编辑值(需匹配单元格预期格式),Setter将传入值解析后赋值给控件;
    • EditingControlValueChanged属性:控件值变化时必须设为true,通知DataGridView值已更新;
    • ApplyCellStyleToEditingControl方法:将单元格样式同步到编辑控件,保证视觉一致性。
  • 绑定控件值变化事件,主动通知DataGridView
    在自定义编辑控件的初始化逻辑中,绑定自身值变化事件(如TextBox的TextChanged、ComboBox的SelectedIndexChanged),事件触发时执行:

    EditingControlValueChanged = true;
    dataGridView?.NotifyCurrentCellDirty(true);
    
  • 自定义单元格类同步初始值到编辑控件
    继承DataGridViewCell的自定义单元格类,重写InitializeEditingControl方法时,将单元格当前值同步到编辑控件:

    public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
    {
        base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle);
        var editingControl = DataGridView.EditingControl as YourCustomEditingControl;
        if (editingControl != null)
        {
            editingControl.Value = this.Value != null ? (YourValueType)this.Value : default;
            editingControl.OwningDataGridView = DataGridView;
            editingControl.OwningRow = DataGridView.Rows[rowIndex];
        }
    }
    
  • 自定义列类关联正确单元格模板
    继承DataGridViewColumn的自定义列类,构造函数中指定CellTemplate为自定义单元格实例:

    public class YourCustomColumn : DataGridViewColumn
    {
        public YourCustomColumn()
        {
            CellTemplate = new YourCustomCell();
        }
    }
    

关键注意点

  • 若自定义控件使用复杂数据类型,需确保EditingControlFormattedValue能正确处理数据的格式化与解析,避免类型转换错误;
  • 不要忽略IDataGridViewEditingControl接口的其他成员(如EditingControlRowIndex、RepositionEditingControlOnValueChange等),需按实际场景正确实现。

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 20:09:58