Procédure pas à pas : validation des données dans le contrôle DataGridView Windows Forms

Lorsque vous affichez les fonctionnalités d'entrée de données aux utilisateurs, vous devez fréquemment valider les données entrées dans votre formulaire. La classe DataGridView offre un moyen pratique pour valider les données avant qu'elles le soient au magasin de données. Vous pouvez valider les données en gérant l'événement CellValidating, qui est déclenché par la DataGridView lorsque la cellule active change.

Dans cette procédure pas à pas, vous allez récupérer des lignes de la table Customers dans l'exemple de base de données Northwind et les afficher dans un contrôle DataGridView. Lorsqu'un utilisateur modifiera une cellule dans la colonne CompanyName et essaiera de quitter la cellule, le gestionnaire d'événements CellValidating examinera la nouvelle chaîne du nom de société pour vérifier qu'elle n'est pas vide. Si la nouvelle valeur est une chaîne vide, la DataGridView empêchera le curseur de l'utilisateur de quitter la cellule avant qu'une chaîne non vide ait été entrée.

Pour copier le code dans cette rubrique sous forme de liste unique, consultez Comment : valider des données dans le contrôle DataGridView Windows Forms.

Composants requis

Pour exécuter cette procédure pas à pas, vous devrez avoir :

  • Accès à un serveur sur lequel est installé l'exemple de base de données SQL Server Northwind

Création du formulaire

Pour valider des données entrées dans une DataGridView

  1. Créez une classe qui dérive de Form et contient un contrôle DataGridView et un composant BindingSource.

    L'exemple de code suivant fournit l'initialisation de base et inclut une méthode Main.

    Imports System
    Imports System.Data
    Imports System.Data.SqlClient
    Imports System.Windows.Forms
    
    Public Class Form1
        Inherits System.Windows.Forms.Form
    
        Private WithEvents dataGridView1 As New DataGridView()
        Private bindingSource1 As New BindingSource()
    
        Public Sub New()
    
            ' Initialize the form.
            Me.dataGridView1.Dock = DockStyle.Fill
            Me.Controls.Add(dataGridView1)
            Me.Text = "DataGridView validation demo (disallows empty CompanyName)"
    
        End Sub
    
    
    ...
    
    
        <STAThread()> _
        Shared Sub Main()
            Application.EnableVisualStyles()
            Application.Run(New Form1())
        End Sub
    
    End Class
    
    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.Controls.Add(dataGridView1);
            this.Load += new EventHandler(Form1_Load);
            this.Text = "DataGridView validation demo (disallows empty CompanyName)";
        }
    
    
    ...
    
    
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.Run(new Form1());
        }
    
    }
    
  2. Implémentez une méthode dans la définition de classe de votre formulaire pour gérer les détails de la connexion à la base de données.

    Cet exemple de code utilise une méthode GetData qui retourne un objet DataTable rempli. Soyez sûr que vous définissez la variable connectionString avec une valeur appropriée pour votre base de données.

    Note de sécuritéNote de sécurité

    Le stockage d'informations sensibles, comme un mot de passe, dans la chaîne de connexion peut affecter la sécurité de votre application. L'utilisation de l'authentification Windows, également qualifiée de sécurité intégrée, constitue un moyen plus sûr de contrôler l'accès à une base de données. Pour plus d'informations, consultez Protection des informations de connexion (ADO.NET).

    Private Shared Function GetData(ByVal selectCommand As String) As DataTable
    
        Dim connectionString As String = _
            "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.
        Dim adapter As New SqlDataAdapter(selectCommand, connectionString)
        Dim data As New DataTable()
        data.Locale = System.Globalization.CultureInfo.InvariantCulture
        adapter.Fill(data)
    
        Return data
    
    End Function
    
    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;
        adapter.Fill(data);
    
        return data;
    }
    
  3. Implémentez un gestionnaire pour l'événement Load de votre formulaire qui initialise les DataGridView et BindingSource et configure la liaison de données.

    Private Sub Form1_Load(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Me.Load
    
        ' Initialize the BindingSource and bind the DataGridView to it.
        bindingSource1.DataSource = GetData("select * from Customers")
        Me.dataGridView1.DataSource = bindingSource1
        Me.dataGridView1.AutoResizeColumns( _
            DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader)
    
    End Sub
    
    private void Form1_Load(System.Object sender, System.EventArgs e)
    {
        // Attach DataGridView events to the corresponding event handlers.
        this.dataGridView1.CellValidating += new
            DataGridViewCellValidatingEventHandler(dataGridView1_CellValidating);
        this.dataGridView1.CellEndEdit += new
            DataGridViewCellEventHandler(dataGridView1_CellEndEdit);
    
        // Initialize the BindingSource and bind the DataGridView to it.
        bindingSource1.DataSource = GetData("select * from Customers");
        this.dataGridView1.DataSource = bindingSource1;
        this.dataGridView1.AutoResizeColumns(
            DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader);
    }
    
  4. Implémentez les gestionnaires pour les événements CellValidating et CellEndEdit du contrôle DataGridView.

    Le gestionnaire d'événements CellValidating est l'endroit où vous déterminez si la valeur d'une cellule dans la colonne CompanyName est vide. Si la valeur de la cellule n'est pas validée, donnez à la propriété Cancel de la classe System.Windows.Forms.DataGridViewCellValidatingEventArgs la valeur true. De cette manière, le contrôle DataGridView empêche le curseur de quitter la cellule. Définissez la propriété ErrorText sur la ligne à l'aide d'une chaîne explicative. Cela affiche une icône d'erreur avec une info-bulle qui contient le texte d'erreur. Dans le gestionnaire d'événements CellEndEdit, définissez la propriété ErrorText sur la ligne à l'aide de la chaîne vide. L'événement CellEndEdit se produit uniquement lorsque la cellule quitte le mode édition, ce qu'elle ne peut faire en cas d'échec de validation.

    Private Sub dataGridView1_CellValidating(ByVal sender As Object, _
        ByVal e As DataGridViewCellValidatingEventArgs) _
        Handles dataGridView1.CellValidating
    
        Dim headerText As String = _
            dataGridView1.Columns(e.ColumnIndex).HeaderText
    
        ' Abort validation if cell is not in the CompanyName column.
        If Not headerText.Equals("CompanyName") Then Return
    
        ' Confirm that the cell is not empty.
        If (String.IsNullOrEmpty(e.FormattedValue.ToString())) Then
            dataGridView1.Rows(e.RowIndex).ErrorText = _
                "Company Name must not be empty"
            e.Cancel = True
        End If
    End Sub
    
    Private Sub dataGridView1_CellEndEdit(ByVal sender As Object, _
        ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _
        Handles dataGridView1.CellEndEdit
    
        ' Clear the row error in case the user presses ESC.   
        dataGridView1.Rows(e.RowIndex).ErrorText = String.Empty
    
    End Sub
    
    private void dataGridView1_CellValidating(object sender,
        DataGridViewCellValidatingEventArgs e)
    {
        string headerText = 
            dataGridView1.Columns[e.ColumnIndex].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;
    }
    

Test de l'application

Vous pouvez à présent tester le formulaire afin de vous assurer qu'il se comporte comme prévu.

Pour tester le formulaire

  • Compilez et exécutez l'application.

    Vous verrez une DataGridView remplie de données de la table Customers. Pour modifier une valeur, double-cliquez sur la cellule voulue dans la colonne CompanyName. Si vous supprimez tous les caractères et appuyez sur la touche TAB pour quitter la cellule, la DataGridView vous empêche de le faire. Lorsque vous tapez une chaîne non vide dans la cellule, le contrôle DataGridView vous permet de quitter la cellule.

Étapes suivantes

Cette application vous donne une présentation basique des capacités du contrôle DataGridView. Vous pouvez personnaliser l'apparence et le comportement du contrôle DataGridView de plusieurs manières :

Voir aussi

Tâches

Comment : valider des données dans le contrôle DataGridView Windows Forms

Procédure pas à pas : gestion des erreurs qui se produisent lors de la saisie de données dans le contrôle DataGridView Windows Forms

Référence

DataGridView

BindingSource

Concepts

Protection des informations de connexion (ADO.NET)

Autres ressources

Saisie de données dans le contrôle DataGridView Windows Forms