marky
marky

Reputation: 5068

How to set the value of a DataGridView's EditingControl

I need to set the text value of a DataGridView.EditingControl. I've tried

myDGV.EditingControl.Text() = "1/1/2001"

and

myDGV.EditingControl.Text = "1/1/2001"

and

myDGV.EditingControl.Text("1/1/2001")

which causes an InvalidCastException (didn't check that could only be an integer).

There is no Value() property for the control, so how do I set the the value?

(Yes, I've verified that the cell is in edit mode)

Upvotes: 0

Views: 1632

Answers (1)

You need to handle the EditingControlShowing event.

Private Sub HandleDgvEditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles Dgv.EditingControlShowing
    If (TypeOf e.Control Is DataGridViewTextBoxEditingControl) Then
        With DirectCast(e.Control, DataGridViewTextBoxEditingControl)
            .Text = "1/1/2001"
        End With
    End If
End Sub

Note that this event will be fired for all editable cells. If you only want to manipulate the edit control for a given column you need to add another condition. Something like this:

If (Me.Dgv.CurrentCell.OwningColumn is Me.DgvFooColumn) Then

If you need to revert the edit from the CellValidating event then store the original value when the edit control is shown.

Private Sub HandleDgvEditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles Dgv.EditingControlShowing

    'Cache the edit control text
    Me.cachedEditText = e.Control.Text

End Sub

Private Sub HandleDgvCellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles Dgv.CellValidating

    'Ensure that the edit control exists
    If (Not Me.Dgv.EditingControl Is Nothing) Then

        'Validate the edit
        If (Not valid) Then
            Me.Dgv.EditingControl.Text = Me.cachedEditText
        End If

    End If

End Sub

Private cachedEditText As String

Upvotes: 1

Related Questions