web-dev-qa-db-fra.com

Affichage de l'info-bulle pour chaque élément de la ligne datagridview lorsque la souris est au-dessus

Comment pouvez-vous afficher l'info-bulle pour datagridview pour chaque élément dans datagridview lorsque vous passez la souris sur l'élément dans cette ligne particulière?

J'ai la table product avec des colonnes:

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

J'ai une exigence d'avoir un datagridview avec des colonnes et je les reçois de la base de données:

product name 
product price 
product image ....

Maintenant, je veux montrer l'info-bulle comme ceci: si j'ai la souris sur l'image du produit, la description du produit sera affichée pour ce produit. Je veux le faire pour chaque rangée. Quelqu'un pourrait-il m'aider à ce sujet?

29
Enigma State

Jetez un œil à la propriété DataGridViewCell.ToolTipText et utilisez l'événement CellFormatting de DataGridView pour définir cette valeur de propriété. Vous pouvez utiliser la propriété DataGridViewCellFormattingEventArgsColumnIndex de l'événement pour déterminer si l'événement se déclenche pour la colonne pour laquelle vous souhaitez définir une info-bulle et, si tel est le cas, utilisez le RowIndex de l'événement pour spécifier la valeur de cette info-bulle.

L'exemple dans l'article MSDN que j'ai lié a un bel exemple d'utilisation, mais votre code pourrait ressembler à ceci:

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();
    }
}

Où:
nameOrIndexOfYourImageColumn = le nom de la colonne ou la valeur d'index de votre colonne d'image nameOrIndexOfYourDescriptionColumn = le nom de la colonne ou la valeur d'index avec vos données de description.

Remarque: vous aurez besoin d'un moyen de récupérer les données de description d'une ligne. Une façon courante de le faire est d'avoir une colonne pour cela dans votre DataGridView, mais faites comme vous ne voulez pas afficher cette colonne définissez sa propriété Visible sur false. Il existe cependant d'autres options.

42
Jay Riggs

Lorsque vous remplissez datagridview, définissez simplement la propriété TooltipText de la cellule sur le texte que vous souhaitez afficher.

5
ThunderGr

J'ai fait cela en stockant le texte à afficher dans l'info-bulle pour chaque cellule dans la propriété Tag de chaque DataGridViewCell.

Puis dans le DataGridView.CellMouseEnter événement, vous pouvez voir dans quelle cellule la souris utilise DataGridViewCellEventArgs.ColumnIndex et DataGridViewCellEventArgs.RowIndex valeurs et définissez le texte de la cellule correspondante comme texte d'info-bulle à l'aide de ToolTip.SetToolTip.

Si ça marche plutôt bien.

Quelque chose comme ça:

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));
    }
}
4
Peladao