Procédure pas à pas : gestion des erreurs qui se produisent lors de la saisie de données dans le contrôle DataGridView Windows Forms
Gérer les erreurs du magasin de données sous-jacent est une fonctionnalité requise pour une application de saisie de données. Le contrôle DataGridView Windows Forms facilite ceci en exposant l'événement DataError qui est déclenché lorsque le magasin de données détecte une violation de contrainte ou de règle métier.
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'une valeur CustomerID en double est détectée dans une nouvelle ligne ou dans une ligne existante modifiée, l'événement DataError se produira, et sera géré par l'affichage d'une MessageBox décrivant l'exception.
Pour copier le code dans cette rubrique sous forme de liste unique, consultez Comment : gérer les erreurs qui se produisent lors de l'entrée de 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 gérer des erreurs de saisie de données dans le contrôle DataGridView
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) 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); } ... [STAThread] static void Main() { Application.EnableVisualStyles(); Application.Run(new Form1()); } }
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é 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, including the ' schema information that contains the CustomerID column ' constraint. Dim adapter As New SqlDataAdapter(selectCommand, connectionString) Dim data As New DataTable() data.Locale = System.Globalization.CultureInfo.InvariantCulture adapter.Fill(data) adapter.FillSchema(data, SchemaType.Source) 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, including the // schema information that contains the CustomerID column // constraint. SqlDataAdapter adapter = new SqlDataAdapter(selectCommand, connectionString); DataTable data = new DataTable(); data.Locale = System.Globalization.CultureInfo.InvariantCulture; adapter.Fill(data); adapter.FillSchema(data, SchemaType.Source); return data; }
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 the DataError event to the corresponding event handler. this.dataGridView1.DataError += new DataGridViewDataErrorEventHandler(dataGridView1_DataError); // Initialize the BindingSource and bind the DataGridView to it. bindingSource1.DataSource = GetData("select * from Customers"); this.dataGridView1.DataSource = bindingSource1; this.dataGridView1.AutoResizeColumns( DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader); }
Gérez l'événement DataError sur la DataGridView.
Si le contexte pour l'erreur est une opération de validation, affichez l'erreur dans une MessageBox.
Private Sub dataGridView1_DataError(ByVal sender As Object, _ ByVal e As DataGridViewDataErrorEventArgs) _ Handles dataGridView1.DataError ' If the data source raises an exception when a cell value is ' commited, display an error message. If e.Exception IsNot Nothing AndAlso _ e.Context = DataGridViewDataErrorContexts.Commit Then MessageBox.Show("CustomerID value must be unique.") End If End Sub
private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e) { // If the data source raises an exception when a cell value is // commited, display an error message. if (e.Exception != null && e.Context == DataGridViewDataErrorContexts.Commit) { MessageBox.Show("CustomerID value must be unique."); } }
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
Appuyez sur F5 pour exécuter l'application.
Vous observerez un contrôle DataGridView rempli de données provenant du tableau Customers. Si vous entrez une valeur en double pour CustomerID et validez la modification, la valeur de la cellule se rétablira automatiquement et une MessageBox signalera l'erreur de saisie.
É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 :
Changez les styles de bordure et d'en-tête. Pour plus d'informations, consultez Comment : modifier les styles de bordures et de quadrillage dans le contrôle DataGridView Windows Forms.
Activez ou restreignez les entrées d'utilisateur au contrôle DataGridView. Pour plus d'informations, consultez Comment : empêcher l'ajout et la suppression de lignes dans le contrôle DataGridView Windows Forms et Comment : définir une colonne en lecture seule dans le contrôle DataGridView Windows Forms.
Validez l'entrée d'utilisateur dans le contrôle DataGridView. Pour plus d'informations, consultez Procédure pas à pas : validation des données dans le contrôle DataGridView Windows Forms.
Gérez de très grandes quantités de données à 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 Comment : personnaliser l'apparence des cellules du contrôle DataGridView Windows Forms et Comment : définir les styles de cellules par défaut pour le contrôle DataGridView Windows Forms.
Voir aussi
Tâches
Procédure pas à pas : validation des données dans le contrôle DataGridView Windows Forms
Référence
Concepts
Protection des informations de connexion (ADO.NET)
Autres ressources
Saisie de données dans le contrôle DataGridView Windows Forms