IDataGridViewEditingControl 接口

定义

定义承载在 DataGridView 的单元格内的控件的常见功能。

C#
public interface IDataGridViewEditingControl
派生

示例

下面的代码示例提供了派生自 DateTimePicker的此接口的实现。 本示例是How to: Host Controls in Windows 窗体 DataGridView Cells中提供的更大示例的一部分。

C#
class CalendarEditingControl : DateTimePicker, IDataGridViewEditingControl
{
    DataGridView dataGridView;
    private bool valueChanged = false;
    int rowIndex;

    public CalendarEditingControl()
    {
        this.Format = DateTimePickerFormat.Short;
    }

    // Implements the IDataGridViewEditingControl.EditingControlFormattedValue 
    // property.
    public object EditingControlFormattedValue
    {
        get
        {
            return this.Value.ToShortDateString();
        }
        set
        {            
            if (value is String)
            {
                try
                {
                    // This will throw an exception of the string is 
                    // null, empty, or not in the format of a date.
                    this.Value = DateTime.Parse((String)value);
                }
                catch
                {
                    // In the case of an exception, just use the 
                    // default value so we're not left with a null
                    // value.
                    this.Value = DateTime.Now;
                }
            }
        }
    }

    // Implements the 
    // IDataGridViewEditingControl.GetEditingControlFormattedValue method.
    public object GetEditingControlFormattedValue(
        DataGridViewDataErrorContexts context)
    {
        return EditingControlFormattedValue;
    }

    // Implements the 
    // IDataGridViewEditingControl.ApplyCellStyleToEditingControl method.
    public void ApplyCellStyleToEditingControl(
        DataGridViewCellStyle dataGridViewCellStyle)
    {
        this.Font = dataGridViewCellStyle.Font;
        this.CalendarForeColor = dataGridViewCellStyle.ForeColor;
        this.CalendarMonthBackground = dataGridViewCellStyle.BackColor;
    }

    // Implements the IDataGridViewEditingControl.EditingControlRowIndex 
    // property.
    public int EditingControlRowIndex
    {
        get
        {
            return rowIndex;
        }
        set
        {
            rowIndex = value;
        }
    }

    // Implements the IDataGridViewEditingControl.EditingControlWantsInputKey 
    // method.
    public bool EditingControlWantsInputKey(
        Keys key, bool dataGridViewWantsInputKey)
    {
        // Let the DateTimePicker handle the keys listed.
        switch (key & Keys.KeyCode)
        {
            case Keys.Left:
            case Keys.Up:
            case Keys.Down:
            case Keys.Right:
            case Keys.Home:
            case Keys.End:
            case Keys.PageDown:
            case Keys.PageUp:
                return true;
            default:
                return !dataGridViewWantsInputKey;
        }
    }

    // Implements the IDataGridViewEditingControl.PrepareEditingControlForEdit 
    // method.
    public void PrepareEditingControlForEdit(bool selectAll)
    {
        // No preparation needs to be done.
    }

    // Implements the IDataGridViewEditingControl
    // .RepositionEditingControlOnValueChange property.
    public bool RepositionEditingControlOnValueChange
    {
        get
        {
            return false;
        }
    }

    // Implements the IDataGridViewEditingControl
    // .EditingControlDataGridView property.
    public DataGridView EditingControlDataGridView
    {
        get
        {
            return dataGridView;
        }
        set
        {
            dataGridView = value;
        }
    }

    // Implements the IDataGridViewEditingControl
    // .EditingControlValueChanged property.
    public bool EditingControlValueChanged
    {
        get
        {
            return valueChanged;
        }
        set
        {
            valueChanged = value;
        }
    }

    // Implements the IDataGridViewEditingControl
    // .EditingPanelCursor property.
    public Cursor EditingPanelCursor
    {
        get
        {
            return base.Cursor;
        }
    }

    protected override void OnValueChanged(EventArgs eventargs)
    {
        // Notify the DataGridView that the contents of the cell
        // have changed.
        valueChanged = true;
        this.EditingControlDataGridView.NotifyCurrentCellDirty(true);
        base.OnValueChanged(eventargs);
    }
}

注解

此接口由相应DataGridView单元格(如 和 )承载的控件(DataGridViewComboBoxCellDataGridViewComboBoxEditingControlDataGridViewTextBoxEditingControlDataGridViewTextBoxCell)在处于编辑模式时实现。

可承载编辑控件的单元格类型将其 EditType 属性设置为 Type 表示编辑控件类型的 。 当单元格进入编辑模式时,将执行以下步骤:

  1. 控件 DataGridView 创建编辑控件类型的实例。

  2. 控件 DataGridView 调用单元格 InitializeEditingControl 方法。 可以重写此方法,将单元格值传输到编辑控件。

  3. 控件 DataGridView 调用编辑控件 ApplyCellStyleToEditingControl 方法并传入单元格的当前样式。 可以实现此方法来初始化编辑控件的外观,使其与单元格的外观匹配。

  4. 控件 DataGridView 调用编辑控件 PrepareEditingControlForEdit 方法。 可以实现此方法以对编辑控件进行最终调整,例如选择控件值。

有关实现 IDataGridViewEditingControl的详细信息,请参阅如何:在 Windows 窗体 DataGridView 单元格中承载控件

提供 DataGridViewCheckBoxCell 用户界面 (UI 的单元格类型) 指定值,而无需承载编辑控件实现接口 IDataGridViewEditingCell 。 在这种情况下,无论单元格是否处于编辑模式,都会显示 UI。

其他单元格类型(如 DataGridViewButtonCell)提供 UI,但不存储用户指定的值。 在这种情况下,单元格类型不实现 IDataGridViewEditingCell 或承载编辑控件。

属性

EditingControlDataGridView

获取或设置包含单元格的 DataGridView

EditingControlFormattedValue

获取或设置编辑器正在修改的单元格的格式化值。

EditingControlRowIndex

获取或设置该承载单元格的父行的索引。

EditingControlValueChanged

获取或设置一个值,该值指示编辑控件的值是否与承载单元格的值不同。

EditingPanelCursor

获取当鼠标指针位于 EditingPanel 上方但不位于编辑控件上方时所使用的光标。

RepositionEditingControlOnValueChange

获取或设置一个值,该值指示每当值更改时,是否需要重新定位单元格的内容。

方法

ApplyCellStyleToEditingControl(DataGridViewCellStyle)

更改控件的用户界面 (UI),使之与指定单元格样式一致。

EditingControlWantsInputKey(Keys, Boolean)

确定指定的键是应由编辑控件处理的常规输入键,还是应由 DataGridView 处理的特殊键。

GetEditingControlFormattedValue(DataGridViewDataErrorContexts)

检索单元格的格式化值。

PrepareEditingControlForEdit(Boolean)

准备当前选中的单元格以进行编辑。

适用于

产品 版本
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9, 10

另请参阅