DataGridView.CellValueNeeded Событие

Определение

Происходит, когда свойство VirtualMode элемента управления DataGridView имеет значение true и объекту DataGridView требуется значение для ячейки, чтобы форматировать и отображать эту ячейку.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.

public:
 event System::Windows::Forms::DataGridViewCellValueEventHandler ^ CellValueNeeded;
public event System.Windows.Forms.DataGridViewCellValueEventHandler CellValueNeeded;
member this.CellValueNeeded : System.Windows.Forms.DataGridViewCellValueEventHandler 
Public Custom Event CellValueNeeded As DataGridViewCellValueEventHandler 

Тип события

DataGridViewCellValueEventHandler

Примеры

В следующем примере кода событие обрабатывается CellValueNeeded для заполнения ячеек положительными целыми числами.The following code example handles the CellValueNeeded event to populate cells with positive integers. Этот пример является частью более крупного примера, доступного в VirtualMode справочной статье.This example is part of a larger example available in the VirtualMode reference topic.

#pragma region Data store maintance

    void VirtualConnector::dataGridView1_CellValueNeeded
        (Object^ sender, DataGridViewCellValueEventArgs^ e)
    {
        if (store->ContainsKey(e->RowIndex))
        {
            // Use the store if the e value has been modified 
            // and stored.            
            e->Value = gcnew Int32(store->default[e->RowIndex]); 
        }
        else if (newRowNeeded && e->RowIndex == numberOfRows)
        {
            if (dataGridView1->IsCurrentCellInEditMode)
            {
                e->Value = initialValue;
            }
            else
            {
                // Show a blank e if the cursor is just loitering
                // over(the) last row.
                e->Value = String::Empty;
            }
        }
        else
        {
            e->Value = e->RowIndex;
        }
    }

    void VirtualConnector::dataGridView1_CellValuePushed
        (Object^ sender, DataGridViewCellValueEventArgs^ e)
    {
        String^ value = e->Value->ToString();
        store[e->RowIndex] = Int32::Parse(value, 
            CultureInfo::CurrentCulture);
    }
#pragma endregion
#region "data store maintance"
const int initialValue = -1;

private void dataGridView1_CellValueNeeded(object sender,
    DataGridViewCellValueEventArgs e)
{
    if (store.ContainsKey(e.RowIndex))
    {
        // Use the store if the e value has been modified 
        // and stored.            
        e.Value = store[e.RowIndex];
    }
    else if (newRowNeeded && e.RowIndex == numberOfRows)
    {
        if (dataGridView1.IsCurrentCellInEditMode)
        {
            e.Value = initialValue;
        }
        else
        {
            // Show a blank value if the cursor is just resting
            // on the last row.
            e.Value = String.Empty;
        }
    }
    else
    {
        e.Value = e.RowIndex;
    }
}

private void dataGridView1_CellValuePushed(object sender,
    DataGridViewCellValueEventArgs e)
{
    store.Add(e.RowIndex, int.Parse(e.Value.ToString()));
}
#endregion

private Dictionary<int, int> store = new Dictionary<int, int>();
#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)

Комментарии

Используйте это событие в виртуальном режиме, чтобы заполнить ячейки данными из пользовательского хранилища данных, не вызывая отменять общий доступ к строкам.Use this event in virtual mode to populate cells with data from a custom data store without causing rows to become unshared. Дополнительные сведения о совместном использовании строк см. в разделе рекомендации по масштабированию элемента управления Windows Forms DataGridView.For more information about row sharing, see Best Practices for Scaling the Windows Forms DataGridView Control. Дополнительные сведения о виртуальном режиме см. в разделе виртуальный режим в элементе управления Windows Forms DataGridView.For more information about virtual mode, see Virtual Mode in the Windows Forms DataGridView Control.

Чтобы добавить указанные пользователем значения в пользовательское хранилище данных, обработайте CellValuePushed событие.To add user-specified values to your custom data store, handle the CellValuePushed event.

Дополнительные сведения об обработке событий см. в разделе обработка и вызов событий.For more information about how to handle events, see Handling and Raising Events.

Применяется к

См. также раздел