How to: Validate Data in the Windows Forms DataGridView Control

The following code example demonstrates how to validate data entered by a user into a DataGridView control. In this example, the DataGridView is populated with rows from the Customers table of the Northwind sample database. When the user edits a cell in the CompanyName column, its value is tested for validity by checking that it is not empty. If the event handler for the CellValidating event finds that the value is an empty string, the DataGridView prevents the user from exiting the cell until a non-empty string is entered.

For a complete explanation of this code example, see Walkthrough: Validating Data in the Windows Forms DataGridView Control.

using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;

public class Form1 : System.Windows.Forms.Form
    private DataGridView dataGridView1 = new DataGridView();
    private BindingSource bindingSource1 = new BindingSource();

    public Form1()
        // Initialize the form. 
        this.dataGridView1.Dock = DockStyle.Fill;
        this.Load += new EventHandler(Form1_Load);
        this.Text = "DataGridView validation demo (disallows empty CompanyName)";

    private void Form1_Load(System.Object sender, System.EventArgs e)
        // Attach DataGridView events to the corresponding event handlers. 
        this.dataGridView1.CellValidating += new
        this.dataGridView1.CellEndEdit += new

        // Initialize the BindingSource and bind the DataGridView to it.
        bindingSource1.DataSource = GetData("select * from Customers");
        this.dataGridView1.DataSource = bindingSource1;

    private void dataGridView1_CellValidating(object sender,
        DataGridViewCellValidatingEventArgs e)
        string headerText = 

        // Abort validation if cell is not in the CompanyName column. 
        if (!headerText.Equals("CompanyName")) return;

        // Confirm that the cell is not empty. 
        if (string.IsNullOrEmpty(e.FormattedValue.ToString()))
            dataGridView1.Rows[e.RowIndex].ErrorText =
                "Company Name must not be empty";
            e.Cancel = true;

    void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        // Clear the row error in case the user presses ESC.   
        dataGridView1.Rows[e.RowIndex].ErrorText = String.Empty;

    private static DataTable GetData(string selectCommand)
        string connectionString =
            "Integrated Security=SSPI;Persist Security Info=False;" +
            "Initial Catalog=Northwind;Data Source=localhost;Packet Size=4096";

        // Connect to the database and fill a data table.
        SqlDataAdapter adapter =
            new SqlDataAdapter(selectCommand, connectionString);
        DataTable data = new DataTable();
        data.Locale = System.Globalization.CultureInfo.InvariantCulture;

        return data;

    static void Main()
        Application.Run(new Form1());


This example requires:

  • References to the System, System.Data, System.Windows.Forms and System.XML assemblies.

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

Storing sensitive information, such as a password, within the connection string can affect the security of your application. Using Windows Authentication (also known as integrated security) is a more secure way to control access to a database. For more information, see Protecting Connection Information (ADO.NET).

Community Additions