Compartilhar via


IDataGridViewEditingControl Interface

Definição

Define a funcionalidade comum para controles hospedados dentro de células de um DataGridView.

public interface class IDataGridViewEditingControl
public interface IDataGridViewEditingControl
type IDataGridViewEditingControl = interface
Public Interface IDataGridViewEditingControl
Derivado

Exemplos

O exemplo de código a seguir fornece uma implementação dessa interface que deriva de DateTimePicker. Este exemplo faz parte de um exemplo maior disponível em How to: Host Controls in Windows Forms 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

Comentários

Essa interface é implementada por controles, como DataGridViewComboBoxEditingControl e DataGridViewTextBoxEditingControl, que são hospedados por células correspondentes DataGridView , como DataGridViewComboBoxCell e DataGridViewTextBoxCell, quando estão no modo de edição.

Os tipos de célula que podem hospedar controles de edição definem sua EditType propriedade como um Type tipo de controle de edição. Quando a célula entra no modo de edição, as seguintes etapas são executadas:

  1. O DataGridView controle cria uma instância do tipo de controle de edição.

  2. O DataGridView controle chama o método de célula InitializeEditingControl . Você pode substituir esse método para transferir o valor da célula para o controle de edição.

  3. O DataGridView controle chama o método de controle ApplyCellStyleToEditingControl de edição e passa no estilo atual da célula. Você pode implementar esse método para inicializar a aparência do controle de edição para que ele corresponda à aparência da célula.

  4. O DataGridView controle chama o método de controle PrepareEditingControlForEdit de edição. Você pode implementar esse método para fazer ajustes finais no controle de edição, como selecionar o valor do controle.

Para obter mais informações sobre a implementação IDataGridViewEditingControl, consulte Como hospedar controles em células DataGridView do Windows Forms.

Tipos de célula como DataGridViewCheckBoxCell esse fornecem uma interface do usuário para especificar valores sem hospedar um controle de edição implementam a IDataGridViewEditingCell interface. A interface do usuário, nesse caso, é exibida independentemente de a célula estiver no modo de edição.

Outros tipos de célula, como DataGridViewButtonCell, fornecem uma interface do usuário, mas não armazenam valores especificados pelo usuário. Nesse caso, o tipo de célula não implementa IDataGridViewEditingCell nem hospeda um controle de edição.

Propriedades

Nome Description
EditingControlDataGridView

Obtém ou define o DataGridView que contém a célula.

EditingControlFormattedValue

Obtém ou define o valor formatado da célula que está sendo modificada pelo editor.

EditingControlRowIndex

Obtém ou define o índice da linha pai da célula de hospedagem.

EditingControlValueChanged

Obtém ou define um valor que indica se o valor do controle de edição difere do valor da célula de hospedagem.

EditingPanelCursor

Obtém o cursor usado quando o ponteiro do mouse está sobre o EditingPanel controle de edição, mas não sobre o controle de edição.

RepositionEditingControlOnValueChange

Obtém ou define um valor que indica se o conteúdo da célula precisa ser reposicionado sempre que o valor for alterado.

Métodos

Nome Description
ApplyCellStyleToEditingControl(DataGridViewCellStyle)

Altera a interface do usuário do controle para ser consistente com o estilo de célula especificado.

EditingControlWantsInputKey(Keys, Boolean)

Determina se a chave especificada é uma chave de entrada regular que o controle de edição deve processar ou uma chave especial que deve DataGridView ser processada.

GetEditingControlFormattedValue(DataGridViewDataErrorContexts)

Recupera o valor formatado da célula.

PrepareEditingControlForEdit(Boolean)

Prepara a célula selecionada no momento para edição.

Aplica-se a

Confira também