Comment : personnaliser la mise en forme des données dans le contrôle DataGridView Windows Forms
L'exemple de code suivant illustre comment implémenter un gestionnaire pour l'événement DataGridView.CellFormatting qui change le mode d'affichage des cellules selon leurs colonnes et leurs valeurs.
Les cellules dans la colonne Balance qui contient des nombres négatifs reçoivent un arrière-plan rouge. Vous pouvez également mettre en forme ces cellules comme monnaie pour afficher des parenthèses autour des valeurs négatives. Pour plus d'informations, consultez Comment : mettre en forme des données dans le contrôle DataGridView Windows Forms.
Les cellules dans la colonne Priority affichent des images à la place des valeurs de cellules textuelles correspondantes. La propriété Value du DataGridViewCellFormattingEventArgs est utilisée à la fois pour obtenir la valeur de la cellule textuelle et pour définir la valeur d'affichage d'image correspondante.
Exemple
Imports System
Imports System.Drawing
Imports System.Windows.Forms
Public Class Form1
Inherits Form
Private WithEvents dataGridView1 As New DataGridView()
Private highPriImage As Bitmap
Private mediumPriImage As Bitmap
Private lowPriImage As Bitmap
Public Sub New()
' Initialize the images.
Try
highPriImage = New Bitmap("highPri.bmp")
mediumPriImage = New Bitmap("mediumPri.bmp")
lowPriImage = New Bitmap("lowPri.bmp")
Catch ex As ArgumentException
MessageBox.Show("The Priority column requires Bitmap images" & _
"named highPri.bmp, mediumPri.bmp, and lowPri.bmp " & _
"residing in the same directory as the executable file.")
End Try
' Initialize the DataGridView.
With dataGridView1
.Dock = DockStyle.Fill
.AllowUserToAddRows = False
.Columns.AddRange( _
New DataGridViewTextBoxColumn(), _
New DataGridViewImageColumn())
.Columns(0).Name = "Balance"
.Columns(1).Name = "Priority"
.Rows.Add("-100", "high")
.Rows.Add("0", "medium")
.Rows.Add("100", "low")
End With
Me.Controls.Add(dataGridView1)
End Sub
' Changes how cells are displayed depending on their columns and values.
Private Sub dataGridView1_CellFormatting(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) _
Handles dataGridView1.CellFormatting
' Set the background to red for negative values in the Balance column.
If dataGridView1.Columns(e.ColumnIndex).Name.Equals("Balance") Then
'Dim intValue As Int32
If CInt(e.Value) < 0 Then
'if Int32.TryParse((String)e.Value, out intValue) &&
' (intValue < 0))
e.CellStyle.BackColor = Color.Red
e.CellStyle.SelectionBackColor = Color.DarkRed
End If
End If
' Replace string values in the Priority column with images.
If dataGridView1.Columns(e.ColumnIndex).Name.Equals("Priority") Then
' Ensure that the value is a string.
Dim stringValue As String = TryCast(e.Value, String)
If stringValue Is Nothing Then Return
' Set the cell ToolTip to the text value.
Dim cell As DataGridViewCell = _
dataGridView1(e.ColumnIndex, e.RowIndex)
cell.ToolTipText = stringValue
' Replace the string value with the image value.
Select Case stringValue
Case "high"
e.Value = highPriImage
Case "medium"
e.Value = mediumPriImage
Case "low"
e.Value = lowPriImage
End Select
End If
End Sub
Public Sub Main()
Application.Run(New Form1())
End Sub
End Class
using System;
using System.Drawing;
using System.Windows.Forms;
public class Form1 : Form
{
private DataGridView dataGridView1 = new DataGridView();
private Bitmap highPriImage;
private Bitmap mediumPriImage;
private Bitmap lowPriImage;
public Form1()
{
// Initialize the images.
try
{
highPriImage = new Bitmap("highPri.bmp");
mediumPriImage = new Bitmap("mediumPri.bmp");
lowPriImage = new Bitmap("lowPri.bmp");
}
catch (ArgumentException)
{
MessageBox.Show("The Priority column requires Bitmap images " +
"named highPri.bmp, mediumPri.bmp, and lowPri.bmp " +
"residing in the same directory as the executable file.");
}
// Initialize the DataGridView.
dataGridView1.Dock = DockStyle.Fill;
dataGridView1.AllowUserToAddRows = false;
dataGridView1.Columns.AddRange(
new DataGridViewTextBoxColumn(),
new DataGridViewImageColumn());
dataGridView1.Columns[0].Name = "Balance";
dataGridView1.Columns[1].Name = "Priority";
dataGridView1.Rows.Add("-100", "high");
dataGridView1.Rows.Add("0", "medium");
dataGridView1.Rows.Add("100", "low");
dataGridView1.CellFormatting +=
new System.Windows.Forms.DataGridViewCellFormattingEventHandler(
this.dataGridView1_CellFormatting);
this.Controls.Add(dataGridView1);
}
// Changes how cells are displayed depending on their columns and values.
private void dataGridView1_CellFormatting(object sender,
System.Windows.Forms.DataGridViewCellFormattingEventArgs e)
{
// Set the background to red for negative values in the Balance column.
if (dataGridView1.Columns[e.ColumnIndex].Name.Equals("Balance"))
{
Int32 intValue;
if (Int32.TryParse((String)e.Value, out intValue) &&
(intValue < 0))
{
e.CellStyle.BackColor = Color.Red;
e.CellStyle.SelectionBackColor = Color.DarkRed;
}
}
// Replace string values in the Priority column with images.
if (dataGridView1.Columns[e.ColumnIndex].Name.Equals("Priority"))
{
// Ensure that the value is a string.
String stringValue = e.Value as string;
if (stringValue == null) return;
// Set the cell ToolTip to the text value.
DataGridViewCell cell = dataGridView1[e.ColumnIndex, e.RowIndex];
cell.ToolTipText = stringValue;
// Replace the string value with the image value.
switch (stringValue)
{
case "high":
e.Value = highPriImage;
break;
case "medium":
e.Value = mediumPriImage;
break;
case "low":
e.Value = lowPriImage;
break;
}
}
}
public static void Main()
{
Application.Run(new Form1());
}
}
Compilation du code
Cet exemple nécessite les éléments suivants :
Références aux assemblys System, System.Drawing et System.Windows.Forms.
Les images Bitmap nommées highPri.bmp mediumPri.bmp et lowPri.bmp, qui résident dans le même répertoire que le fichier exécutable.
Pour plus d'informations sur la génération de cet exemple à partir de la ligne de commande pour Visual Basic ou Visual C#, consultez Génération à partir de la ligne de commande (Visual Basic) ou Génération à partir de la ligne de commande avec csc.exe. Vous pouvez aussi générer cet exemple dans Visual Studio en collant le code dans un nouveau projet. Pour plus d'informations, consultez Comment : compiler et exécuter un exemple complet de code Windows Forms à l'aide de Visual Studio et Comment : compiler et exécuter un exemple complet de code Windows Forms à l'aide de Visual Studio et Comment : compiler et exécuter un exemple complet de code Windows Forms à l'aide de Visual Studio et Comment : compiler et exécuter un exemple complet de code Windows Forms à l'aide de Visual Studio et Comment : compiler et exécuter un exemple complet de code Windows Forms à l'aide de Visual Studio.
Voir aussi
Tâches
Comment : mettre en forme des données dans le contrôle DataGridView Windows Forms
Référence
DataGridViewBand.DefaultCellStyle
Concepts
Styles de cellules dans le contrôle DataGridView Windows Forms
Mise en forme de données dans le contrôle DataGridView Windows Forms
Autres ressources
Affichage des données dans le contrôle DataGridView Windows Forms