Comment : valider les entrées à l'aide du contrôle DataGrid Windows Forms
Notes
Le contrôle DataGridView remplace le contrôle DataGrid et lui ajoute des fonctionnalités ; toutefois, le contrôle DataGrid est conservé pour la compatibilité descendante et l'utilisation future si tel est votre choix. Pour plus d'informations, consultez Différences entre les contrôles DataGridView et DataGrid Windows Forms.
Deux types de validation d'entrées sont disponibles pour le contrôle DataGrid Windows Forms. Si l'utilisateur tente d'entrer une valeur dont le type n'est pas accepté par la cellule, par exemple une chaîne dans un entier, cette nouvelle valeur invalide est remplacée par l'ancienne valeur. Ce type de validation d'entrée s'effectue automatiquement et ne peut pas être personnalisé.
Le second type de validation d'entrée permet de refuser des données qui ne peuvent pas être acceptées, par exemple une valeur 0 dans un champ devant contenir une valeur supérieure ou égale à 1, ou une chaîne inappropriée. Pour cela, il fait écrire dans le groupe de données un gestionnaire d'événements pour l'événement ColumnChanging ou RowChanging. L'exemple ci-dessous utilise l'événement ColumnChanging car l'entrée de la valeur inacceptable n'est pas autorisée dans la colonne « Product ». Vous pouvez utiliser l'événement RowChanging pour vérifier que la valeur d'une colonne « End Date » est postérieure à celle d'une colonne « Start Date » dans une même ligne.
Pour valider des entrées d'utilisateur
Écrivez du code pour gérer l'événement ColumnChanging de la table appropriée. Si une entrée incorrecte est détectée, appelez la méthode SetColumnError de l'objet DataRow.
Private Sub Customers_ColumnChanging(ByVal sender As Object, _ ByVal e As System.Data.DataColumnChangeEventArgs) ' Only check for errors in the Product column If (e.Column.ColumnName.Equals("Product")) Then ' Do not allow "Automobile" as a product. If CType(e.ProposedValue, String) = "Automobile" Then Dim badValue As Object = e.ProposedValue e.ProposedValue = "Bad Data" e.Row.RowError = "The Product column contians an error" e.Row.SetColumnError(e.Column, "Product cannot be " & _ CType(badValue, String)) End If End If End Sub
//Handle column changing events on the Customers table private void Customers_ColumnChanging(object sender, System.Data.DataColumnChangeEventArgs e) { //Only check for errors in the Product column if (e.Column.ColumnName.Equals("Product")) { //Do not allow "Automobile" as a product if (e.ProposedValue.Equals("Automobile")) { object badValue = e.ProposedValue; e.ProposedValue = "Bad Data"; e.Row.RowError = "The Product column contains an error"; e.Row.SetColumnError(e.Column, "Product cannot be " + badValue); } } }
//Handle column changing events on the Customers table private void Customers_ColumnChanging(System.Object sender, System.Data.DataColumnChangeEventArgs e) { //Only check for errors in the Product column if ( e.get_Column().get_ColumnName().Equals("Product") ) { //Do not allow "Automobile" as a product if ( e.get_ProposedValue().Equals("Automobile") ) { System.Object badValue = e.get_ProposedValue(); e.set_ProposedValue("Bad Data"); e.get_Row().set_RowError("The Product column contains an error"); e.get_Row().SetColumnError(e.get_Column(), "Product cannot be " + badValue); } } }
Connectez le gestionnaire d'événements à l'événement.
Placez le code suivant dans l'événement Load du formulaire ou dans son constructeur.
' Assumes the grid is bound to a dataset called customersDataSet1 ' with a table called Customers. ' Put this code in the form's Load event or its constructor. AddHandler customersDataSet1.Tables("Customers").ColumnChanging, AddressOf Customers_ColumnChanging
// Assumes the grid is bound to a dataset called customersDataSet1 // with a table called Customers. // Put this code in the form's Load event or its constructor. customersDataSet1.Tables["Customers"].ColumnChanging += new DataColumnChangeEventHandler(this.Customers_ColumnChanging);
// Assumes the grid is bound to a dataset called customersDataSet1 // with a table called Customers // Put this code in the form's Load event or its constructor. customersDataSet1.get_Tables().get_Item("Customers").add_ColumnChanging( new DataColumnChangeEventHandler(this.Customers_ColumnChanging));