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.


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. 
            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;
            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(

    // 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;
                case "medium":
                    e.Value = mediumPriImage;
                case "low":
                    e.Value = lowPriImage;

    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. Also see How to: Compile and Run a Complete Windows Forms Code Example Using Visual Studio.