Практическое руководство. Определение текста всплывающих подсказок для отдельных ячеек элемента управления DataGridView в Windows Forms

По умолчанию подсказки используются для отображения значений ячеек DataGridView, в которых не помещается все содержимое. Однако это поведение можно переопределить, чтобы задать текстовые значения подсказок для отдельных ячеек. Это может быть полезно для показа пользователям дополнительных сведений о ячейке или предоставления пользователям альтернативного описания содержимого ячейки. Например, если имеется строка со значками состояния, может потребоваться предоставить текстовые пояснения с помощью подсказок.

Вы также можете отключить отображение подсказок на уровне ячейки, присвоив свойству DataGridView.ShowCellToolTips значение false.

Добавление подсказки для ячейки

  • Задайте свойство DataGridViewCell.ToolTipText.

    // Sets the ToolTip text for cells in the Rating column.
    void dataGridView1_CellFormatting(Object^ /*sender*/, 
        DataGridViewCellFormattingEventArgs^ e)
    {
        if ( (e->ColumnIndex == this->dataGridView1->Columns["Rating"]->Index)
            && e->Value != nullptr )
        {
            DataGridViewCell^ cell = 
                this->dataGridView1->Rows[e->RowIndex]->Cells[e->ColumnIndex];
            if (e->Value->Equals("*"))
            {                
                cell->ToolTipText = "very bad";
            }
            else if (e->Value->Equals("**"))
            {
                cell->ToolTipText = "bad";
            }
            else if (e->Value->Equals("***"))
            {
                cell->ToolTipText = "good";
            }
            else if (e->Value->Equals("****"))
            {
                cell->ToolTipText = "very good";
            }
        }
    }
    
    // Sets the ToolTip text for cells in the Rating column.
    void dataGridView1_CellFormatting(object sender,
        DataGridViewCellFormattingEventArgs e)
    {
        if ( (e.ColumnIndex == this.dataGridView1.Columns["Rating"].Index)
            && e.Value != null )
        {
            DataGridViewCell cell =
                this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
            if (e.Value.Equals("*"))
            {
                cell.ToolTipText = "very bad";
            }
            else if (e.Value.Equals("**"))
            {
                cell.ToolTipText = "bad";
            }
            else if (e.Value.Equals("***"))
            {
                cell.ToolTipText = "good";
            }
            else if (e.Value.Equals("****"))
            {
                cell.ToolTipText = "very good";
            }
        }
    }
    
    ' Sets the ToolTip text for cells in the Rating column.
    Sub dataGridView1_CellFormatting(ByVal sender As Object, _
        ByVal e As DataGridViewCellFormattingEventArgs) _
        Handles dataGridView1.CellFormatting
    
        If e.ColumnIndex = Me.dataGridView1.Columns("Rating").Index _
            AndAlso (e.Value IsNot Nothing) Then
    
            With Me.dataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex)
    
                If e.Value.Equals("*") Then
                    .ToolTipText = "very bad"
                ElseIf e.Value.Equals("**") Then
                    .ToolTipText = "bad"
                ElseIf e.Value.Equals("***") Then
                    .ToolTipText = "good"
                ElseIf e.Value.Equals("****") Then
                    .ToolTipText = "very good"
                End If
    
            End With
    
        End If
    
    End Sub
    

Компиляция кода

  • Для этого примера требуются:

  • элемент управления DataGridView с именем dataGridView1, содержащий столбец с именем Rating для отображения строковых значений с одним–четырьмя символами звездочки ("*"); событие CellFormatting элемента управления должно быть связано с методом обработчика событий, показанным в примере;

  • ссылки на сборки System и System.Windows.Forms.

Отказоустойчивость

При привязке элемента управления DataGridView к внешнему источнику данных или предоставлении собственного источника данных путем реализации виртуального режима могут возникнуть проблемы с производительностью. Чтобы избежать снижения производительности при работе с большими объемами данных, обрабатывайте событие CellToolTipTextNeeded, а не задавайте свойство ToolTipText для нескольких ячеек. При обработке этого события получение значения свойства ToolTipText ячейки вызывает событие и возвращает значение свойства DataGridViewCellToolTipTextNeededEventArgs.ToolTipText, указанное в обработчике событий.

См. также