Comment : valider les entrées à l'aide du contrôle DataGrid Windows Forms

Mise à jour : novembre 2007

Remarque :

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

  1. É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);
          }
       }
    }
    
  2. 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));
    

Voir aussi

Référence

DataGrid

ColumnChanging

SetColumnError

Autres ressources

DataGrid, contrôle (Windows Forms)