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 souvent valider les données entrées dans votre formulaire. La DataGridView classe fournit un moyen pratique d’effectuer la validation avant que les données ne sont validées dans le magasin de données. Vous pouvez valider les données en gérant l’événement CellValidating , qui est déclenché par le DataGridView moment où la cellule active change.
Dans cette procédure pas à pas, vous allez récupérer des lignes de la Customers
table dans l’exemple de base de données Northwind et les afficher dans un DataGridView contrôle. Lorsqu’un utilisateur modifie une cellule de la CompanyName
colonne et tente de quitter la cellule, le CellValidating gestionnaire d’événements examine la nouvelle chaîne de nom de société pour s’assurer qu’elle n’est pas vide ; si la nouvelle valeur est une chaîne vide, elle DataGridView empêche le curseur de l’utilisateur de quitter la cellule jusqu’à ce qu’une chaîne non vide soit entrée.
Pour copier le code de cette rubrique sous la forme d’une liste unique, consultez Comment : valider des données dans le contrôle DataGridView Windows Forms.
Prérequis
Pour réaliser cette procédure pas à pas, vous aurez besoin des éléments suivants :
- Accès à un serveur disposant de l’exemple de base de données Northwind SQL Server.
Création du formulaire
Pour valider les données entrées dans un DataGridView
Créez une classe qui dérive Form et contient un DataGridView contrôle et un BindingSource composant.
L’exemple de code suivant fournit une initialisation de base et inclut une
Main
méthode.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)"; }
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] static void Main() { Application.EnableVisualStyles(); Application.Run(new Form1()); } }
<STAThread()> _ Shared Sub Main() Application.EnableVisualStyles() Application.Run(New Form1()) End Sub End Class
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
GetData
méthode qui retourne un objet rempli DataTable . Veillez à définir laconnectionString
variable sur une valeur appropriée pour votre base de données.Important
Le stockage d'informations sensibles (telles qu'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 appelée sécurité intégrée, est un moyen plus sécurisé de contrôler l’accès à une base de données. Pour plus d’informations, consultez Protection des informations de connexion.
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; }
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
Implémentez un gestionnaire pour l’événement de Load votre formulaire qui initialise et DataGridViewBindingSource configure la liaison de données.
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); }
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
Implémentez des gestionnaires pour les événements et CellEndEdit les DataGridViewCellValidating contrôles.
Le CellValidating gestionnaire d’événements est l’endroit où vous déterminez si la valeur d’une cellule de la
CompanyName
colonne est vide. Si la valeur de cellule échoue à la validation, définissez la Cancel propriété de la System.Windows.Forms.DataGridViewCellValidatingEventArgs classetrue
sur . Ainsi, le DataGridView contrôle empêche le curseur de quitter la cellule. Définissez la ErrorText propriété sur la ligne sur une chaîne explicite. Cette opération affiche une icône d’erreur avec une info-bulle qui contient le texte de l’erreur. Dans le CellEndEdit gestionnaire d’événements, définissez la ErrorText propriété sur la ligne sur la chaîne vide. L’événement CellEndEdit se produit uniquement lorsque la cellule quitte le mode d’édition, qu’elle ne peut pas faire en cas d’échec de validation.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; }
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
Test de l’application
Vous pouvez maintenant tester le formulaire pour vous assurer qu’il se comporte comme prévu.
Pour tester le formulaire
Compilez et exécutez l'application.
Vous verrez un DataGridView remplissage avec les données de la
Customers
table. Lorsque vous double-cliquez sur une cellule de laCompanyName
colonne, vous pouvez modifier la valeur. Si vous supprimez tous les caractères et appuyez sur la touche TAB pour quitter la cellule, cela DataGridView vous empêche de quitter. Lorsque vous tapez une chaîne non vide dans la cellule, le DataGridView contrôle vous permet de quitter la cellule.
Étapes suivantes
Cette application vous donne une compréhension de base des DataGridView fonctionnalités du contrôle. Vous pouvez personnaliser l’apparence et le comportement du DataGridView contrôle de plusieurs façons :
Modifiez les styles de bordure et d’en-tête. Pour plus d’informations, consultez How to: Change the Border and Gridline Styles in the Windows Forms DataGridView Control.
Activez ou limitez l’entrée utilisateur au DataGridView contrôle. Pour plus d’informations, consultez How to: Prevent Row Addition and Deletion in the Windows Forms DataGridView Control, and How to: Make Columns Read-Only in the Windows Forms DataGridView Control.
Vérifiez l’entrée de l’utilisateur pour les erreurs liées à la base de données. Pour plus d’informations, consultez Procédure pas à pas : gestion des erreurs qui se produisent lors de l’entrée de données dans le contrôle DataGridView Windows Forms.
Gérez des jeux de données très volumineux à l’aide du mode virtuel. Pour plus d’informations, consultez Procédure pas à pas : implémentation du mode virtuel dans le contrôle DataGridView Windows Forms.
Personnalisez l’apparence des cellules. Pour plus d’informations, consultez How to: Customize the Appearance of Cells in the Windows Forms DataGridView Control and How to: Set Font and Color Styles in the Windows Forms DataGridView Control.
Voir aussi
- DataGridView
- BindingSource
- Saisie de données dans le contrôle DataGridView Windows Forms
- Procédure : valider les données dans le contrôle DataGridView Windows Forms
- Procédure pas à pas : gestion des erreurs qui se produisent lors de l’entrée de données dans le contrôle DataGridView Windows Forms
- Protection des informations de connexion