How to: Customize Data Formatting in the Windows Forms DataGridView Control
The following code example demonstrates how to implement a handler for the DataGridView.CellFormatting event that changes how cells are displayed depending on their columns and values.
Cells in the Balance column that contain negative numbers are given a red background. You can also format these cells as currency to display parentheses around negative values. For more information, see How to: Format Data in the Windows Forms DataGridView Control.
Cells in the Priority column display images in place of corresponding textual cell values. The Value property of the DataGridViewCellFormattingEventArgs is used both to get the textual cell value and to set the corresponding image display value.
Example
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());
}
}
Compiling the Code
This example requires:
References to the System, System.Drawing, and System.Windows.Forms assemblies.
Bitmap images named highPri.bmp, mediumPri.bmp, and lowPri.bmp residing in the same directory as the executable file.
For information about building this example from the command line for Visual Basic or Visual C#, see Building from the Command Line (Visual Basic) or Command-line Building With csc.exe. You can also build this example in Visual Studio by pasting the code into a new project. For more information, see How to: Compile and Run a Complete Windows Forms Code Example Using Visual Studio and How to: Compile and Run a Complete Windows Forms Code Example Using Visual Studio and How to: Compile and Run a Complete Windows Forms Code Example Using Visual Studio and How to: Compile and Run a Complete Windows Forms Code Example Using Visual Studio.
See Also
Tasks
How to: Format Data in the Windows Forms DataGridView Control
Reference
DataGridViewBand.DefaultCellStyle
Concepts
Cell Styles in the Windows Forms DataGridView Control
Data Formatting in the Windows Forms DataGridView Control