Поделиться через


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

См. также