Отображение всплывающей подсказки для каждого элемента в строке представления данных, когда мышь находится над ним - PullRequest
29 голосов
/ 24 августа 2011

Как вы можете показать всплывающую подсказку для datagridview для каждого элемента в datagridview, когда вы наводите курсор мыши на элемент в этой конкретной строке?

У меня есть таблица product со столбцами:

product name 
product price 
product description
product image ....

У меня есть требование, что у меня есть datagridview со столбцами, и я получаю их из базы данных:

product name 
product price 
product image ....

Теперь я хочу показать всплывающую подсказку следующим образом: если у меня есть мышьповерх изображения продукта будет отображаться описание продукта для этого продукта.Я хочу сделать это для каждого ряда.Кто-нибудь может помочь с этим?

Ответы [ 3 ]

42 голосов
/ 24 августа 2011

Посмотрите на свойство DataGridViewCell.ToolTipText и используйте событие DataGridView CellFormatting, чтобы установить значение этого свойства.Вы можете использовать свойство DataGridViewCellFormattingEventArgs ColumnIndex события, чтобы определить, запускается ли событие для столбца, для которого вы хотите установить подсказку, и если это так, используйте RowIndex события, чтобы указать значение этой подсказки.

Пример в статье MSDN, которую я связал, имеет прекрасный пример использования, но ваш код может выглядеть примерно так:

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) {
    if (e.ColumnIndex == dataGridView1.Columns[nameOrIndexOfYourImageColumn].Index) {
        var cell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
        // Set the Cell's ToolTipText.  In this case we're retrieving the value stored in 
        // another cell in the same row (see my note below).
        cell.ToolTipText = dataGridView1.Rows[e.RowIndex].Cells[nameOrIndexOfYourDescriptionColumn].Value.ToString();
    }
}

Где:
nameOrIndexOfYourImageColumn = имя столбца или значение индексавашего столбца изображения nameOrIndexOfYourDescriptionColumn = имя столбца или значение индекса с вашими данными описания.

Примечание: вам понадобится какой-то способ получить данные описания строки.Обычный способ сделать это - иметь столбец для этого в вашем DataGridView, но сделайте так, поскольку вы не хотите отображать этот столбец, установите для его свойства Visible значение false.Однако есть и другие варианты.

5 голосов
/ 25 июля 2012

При заполнении datagridview просто установите для свойства TooltipText ячейки текст, который вы хотите отобразить.

4 голосов
/ 24 августа 2011

Я сделал это, сохранив текст для отображения во всплывающей подсказке для каждой ячейки в свойстве Tag каждого DataGridViewCell.

Затем в событии DataGridView.CellMouseEnter вы можете увидеть, в какой ячейке мышь использует значения DataGridViewCellEventArgs.ColumnIndex и DataGridViewCellEventArgs.RowIndex, и установить текст из соответствующей ячейки в качестве текста всплывающей подсказки, используя ToolTip.SetToolTip.

Если работает довольно хорошо.

Примерно так:

private void dgv_CellMouseEnter(object sender, DataGridViewCellEventArgs e)
{
    if (e.ColumnIndex >= 0 & e.RowIndex >= 0) 
    {
        ToolTip1.SetToolTip(dgv, Convert.ToString(dgv.Item(e.ColumnIndex, e.RowIndex).Tag));
    }
}
...