Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
CellValueNeeded Event
Collapse the table of content
Expand the table of content

DataGridView.CellValueNeeded Event

Occurs when the VirtualMode property of the DataGridView control is true and the DataGridView requires a value for a cell in order to format and display the cell.

Namespace:  System.Windows.Forms
Assembly:  System.Windows.Forms (in System.Windows.Forms.dll)

'Declaration
Public Event CellValueNeeded As DataGridViewCellValueEventHandler

Use this event in virtual mode to populate cells with data from a custom data store without causing rows to become unshared. For more information about row sharing, see Best Practices for Scaling the Windows Forms DataGridView Control. For more information about virtual mode, see Virtual Mode in the Windows Forms DataGridView Control.

To add user-specified values to your custom data store, handle the CellValuePushed event.

For more information about handling events, see Consuming Events.

The following code example handles the CellValueNeeded event to populate cells with positive integers. This example is part of a larger example available in the VirtualMode reference topic.

#Region "data store maintance" 
    Const initialValue As Integer = -1

    Private Sub dataGridView1_CellValueNeeded(ByVal sender As Object, _
        ByVal e As DataGridViewCellValueEventArgs) _
        Handles dataGridView1.CellValueNeeded

        If store.ContainsKey(e.RowIndex) Then 
            ' Use the store if the e value has been modified  
            ' and stored.
            e.Value = store(e.RowIndex)
        ElseIf newRowNeeded AndAlso e.RowIndex = numberOfRows Then 
            If dataGridView1.IsCurrentCellInEditMode Then
                e.Value = initialValue
            Else 
                ' Show a blank value if the cursor is just resting 
                ' on the last row.
                e.Value = String.Empty
            End If 
        Else
            e.Value = e.RowIndex
        End If 
    End Sub 

    Private Sub dataGridView1_CellValuePushed(ByVal sender As Object, _
        ByVal e As DataGridViewCellValueEventArgs) _
        Handles dataGridView1.CellValuePushed

        store.Add(e.RowIndex, CInt(e.Value))

    End Sub
#End Region

    Dim store As System.Collections.Generic.Dictionary(Of Integer, Integer) = _
        New Dictionary(Of Integer, Integer)

.NET Framework

Supported in: 4.6, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1
Show:
© 2015 Microsoft