IDataGridViewEditingControl 接口    
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
定义承载在 DataGridView 的单元格内的控件的常见功能。
public interface class IDataGridViewEditingControlpublic interface IDataGridViewEditingControltype IDataGridViewEditingControl = interfacePublic Interface IDataGridViewEditingControl- 派生
示例
下面的代码示例提供了派生自 DateTimePicker的此接口的实现。 本示例是How to: Host Controls in Windows 窗体 DataGridView Cells中提供的更大示例的一部分。
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);
    }
}
Class CalendarEditingControl
    Inherits DateTimePicker
    Implements IDataGridViewEditingControl
    Private dataGridViewControl As DataGridView
    Private valueIsChanged As Boolean = False
    Private rowIndexNum As Integer
    Public Sub New()
        Me.Format = DateTimePickerFormat.Short
    End Sub
    Public Property EditingControlFormattedValue() As Object _
        Implements IDataGridViewEditingControl.EditingControlFormattedValue
        Get
            Return Me.Value.ToShortDateString()
        End Get
        Set(ByVal value As Object)
            Try
                ' This will throw an exception of the string is 
                ' null, empty, or not in the format of a date.
                Me.Value = DateTime.Parse(CStr(value))
            Catch
                ' In the case of an exception, just use the default
                ' value so we're not left with a null value.
                Me.Value = DateTime.Now
            End Try
        End Set
    End Property
    Public Function GetEditingControlFormattedValue(ByVal context _
        As DataGridViewDataErrorContexts) As Object _
        Implements IDataGridViewEditingControl.GetEditingControlFormattedValue
        Return Me.Value.ToShortDateString()
    End Function
    Public Sub ApplyCellStyleToEditingControl(ByVal dataGridViewCellStyle As _
        DataGridViewCellStyle) _
        Implements IDataGridViewEditingControl.ApplyCellStyleToEditingControl
        Me.Font = dataGridViewCellStyle.Font
        Me.CalendarForeColor = dataGridViewCellStyle.ForeColor
        Me.CalendarMonthBackground = dataGridViewCellStyle.BackColor
    End Sub
    Public Property EditingControlRowIndex() As Integer _
        Implements IDataGridViewEditingControl.EditingControlRowIndex
        Get
            Return rowIndexNum
        End Get
        Set(ByVal value As Integer)
            rowIndexNum = value
        End Set
    End Property
    Public Function EditingControlWantsInputKey(ByVal key As Keys, _
        ByVal dataGridViewWantsInputKey As Boolean) As Boolean _
        Implements IDataGridViewEditingControl.EditingControlWantsInputKey
        ' Let the DateTimePicker handle the keys listed.
        Select Case key And Keys.KeyCode
            Case Keys.Left, Keys.Up, Keys.Down, Keys.Right, _
                Keys.Home, Keys.End, Keys.PageDown, Keys.PageUp
                Return True
            Case Else
                Return Not dataGridViewWantsInputKey
        End Select
    End Function
    Public Sub PrepareEditingControlForEdit(ByVal selectAll As Boolean) _
        Implements IDataGridViewEditingControl.PrepareEditingControlForEdit
        ' No preparation needs to be done.
    End Sub
    Public ReadOnly Property RepositionEditingControlOnValueChange() _
        As Boolean Implements _
        IDataGridViewEditingControl.RepositionEditingControlOnValueChange
        Get
            Return False
        End Get
    End Property
    Public Property EditingControlDataGridView() As DataGridView _
        Implements IDataGridViewEditingControl.EditingControlDataGridView
        Get
            Return dataGridViewControl
        End Get
        Set(ByVal value As DataGridView)
            dataGridViewControl = value
        End Set
    End Property
    Public Property EditingControlValueChanged() As Boolean _
        Implements IDataGridViewEditingControl.EditingControlValueChanged
        Get
            Return valueIsChanged
        End Get
        Set(ByVal value As Boolean)
            valueIsChanged = value
        End Set
    End Property
    Public ReadOnly Property EditingControlCursor() As Cursor _
        Implements IDataGridViewEditingControl.EditingPanelCursor
        Get
            Return MyBase.Cursor
        End Get
    End Property
    Protected Overrides Sub OnValueChanged(ByVal eventargs As EventArgs)
        ' Notify the DataGridView that the contents of the cell have changed.
        valueIsChanged = True
        Me.EditingControlDataGridView.NotifyCurrentCellDirty(True)
        MyBase.OnValueChanged(eventargs)
    End Sub
End Class
注解
此接口由相应DataGridView单元格(如 和 )承载的控件(DataGridViewComboBoxCell如 DataGridViewComboBoxEditingControl 和 DataGridViewTextBoxEditingControlDataGridViewTextBoxCell)在处于编辑模式时实现。
可承载编辑控件的单元格类型将其 EditType 属性设置为 Type 表示编辑控件类型的 。 当单元格进入编辑模式时,将执行以下步骤:
- 控件 DataGridView 创建编辑控件类型的实例。 
- 控件 DataGridView 调用单元格 InitializeEditingControl 方法。 可以重写此方法,将单元格值传输到编辑控件。 
- 控件 DataGridView 调用编辑控件 ApplyCellStyleToEditingControl 方法并传入单元格的当前样式。 可以实现此方法来初始化编辑控件的外观,使其与单元格的外观匹配。 
- 控件 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) | 准备当前选中的单元格以进行编辑。 |