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?
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é DataGridViewCellFormattingEventArgs
ColumnIndex
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.
Lorsque vous remplissez datagridview
, définissez simplement la propriété TooltipText
de la cellule sur le texte que vous souhaitez afficher.
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));
}
}