Comment : ajouter la validation à un groupe de données multicouche

Mise à jour : novembre 2007

L'ajout de la validation à un groupe de données séparé dans une solution multicouche s'apparente à l'ajout de la validation à un groupe de données d'un fichier unique (un groupe de données dans un projet unique). Il est proposé d'exécuter la validation sur les données pendant les événements ColumnChanging et/ou RowChanging d'une table de données.

Le Concepteur de DataSet propose une fonctionnalité pour créer des classes partielles auxquelles vous pouvez ajouter le code utilisateur aux événements de modification de colonne et de ligne des tables de données dans le groupe de données. Pour plus d'informations sur l'ajout de code à un groupe de données dans une solution multicouche, consultez Comment : ajouter du code aux groupes de données dans des applications multicouches et Comment : ajouter du code aux TableAdapters dans des applications multicouches. Pour plus d'informations sur les classes partielles, consultez Comment : fractionner une classe en classes partielles ou Classes et méthodes partielles (Guide de programmation C#).

Remarque :

Lorsque vous séparez des groupes de données à partir de TableAdapters (en définissant la propriété Projet DataSet), les classes DataSet partielles existant dans le projet ne sont pas automatiquement déplacées. En effet, ces classes doivent être déplacées manuellement vers le projet DataSet.

Remarque :

Le Concepteur de DataSet ne crée pas automatiquement de gestionnaire d'événements en C# pour les événements ColumnChanging et RowChanging. Vous devez créer manuellement un gestionnaire d'événements et raccorder le gestionnaire d'événements à l'événement sous-jacent. Les procédures suivantes indiquent les étapes à suivre pour créer les gestionnaires d'événements requis dans Visual Basic et C#.

Validation des modifications des colonnes individuelles

Validez des valeurs dans les colonnes individuelles en gérant l'événement ColumnChanging. L'événement ColumnChanging est déclenché lorsque la valeur est modifiée dans une colonne. Pour créer un gestionnaire d'événements pour l'événement ColumnChanging, double-cliquez sur la colonne souhaitée dans le Concepteur de DataSet.

La première fois que vous double-cliquez sur une colonne, le concepteur génère un gestionnaire d'événements pour l'événement ColumnChanging. Outre l'événement ColumnChanging, une instruction If…Then est également créée pour tester la colonne spécifique. Par exemple, le code suivant est généré lorsque vous double-cliquez sur la colonne RequiredDate de la table Orders de Northwind :

Private Sub OrdersDataTable_ColumnChanging(ByVal sender As System.Object, ByVal e As System.Data.DataColumnChangeEventArgs) Handles Me.ColumnChanging
    If (e.Column.ColumnName = Me.RequiredDateColumn.ColumnName) Then
        ' Add validation code here.
    End If
End Sub
Remarque :

Dans les projets C#, le Concepteur de DataSet crée seulement des classes partielles pour le groupe de données et les tables individuelles dans le groupe de données. Le Concepteur de DataSet ne crée pas automatiquement de gestionnaires d'événements pour les événements ColumnChanging et RowChanging en C# comme en Visual Basic. Dans les projets C#, vous devez construire manuellement une méthode pour gérer l'événement et raccorder la méthode à l'événement sous-jacent. La procédure suivante indique les étapes à suivre pour créer les gestionnaires d'événements requis en Visual Basic et C#.

Remarque :

Il est possible que votre ordinateur affiche des noms ou des emplacements différents pour certains des éléments d'interface utilisateur Visual Studio dans les instructions suivantes. L'édition de Visual Studio dont vous disposez et les paramètres que vous utilisez déterminent ces éléments. Pour plus d'informations, consultez Paramètres Visual Studio.

Pour ajouter la validation pendant les modifications des valeurs de colonne individuelle

  1. Ouvrez le groupe de données dans le Concepteur de DataSet en double-cliquant sur le fichier .xsd dans l'Explorateur de solutions. Pour plus d'informations, consultez Comment : ouvrir un groupe de données dans le Concepteur de DataSet.

  2. Double-cliquez sur la colonne modèle à valider. Cette action entraîne la création du gestionnaire d'événements ColumnChanging.

    Remarque :

    Le Concepteur de DataSet ne crée pas automatiquement de gestionnaire d'événements pour l'événement C#. Le code nécessaire pour gérer l'événement en C# est inclus ci-dessous. SampleColumnChangingEvent est créé puis, il est raccordé à l'événement ColumnChanging dans la méthode EndInit.

  3. Ajoutez le code permettant de vérifier que cette e.ProposedValue contient des données répondant aux spécifications de votre application. Si la valeur proposée n'est pas acceptable, définissez la colonne afin d'indiquer qu'elle contient une erreur.

    L'exemple de code suivant vérifie que la valeur de la colonne Quantité est supérieure à 0 et la valide. Si la valeur de la colonne Quantité est inférieure ou égale à 0, une erreur est affectée à cette colonne. La clause Else efface l'erreur si la quantité est supérieure à 0. Le code dans le gestionnaire d'événements de modification de colonne doit ressembler à l'exemple suivant :

    If (e.Column.ColumnName = Me.QuantityColumn.ColumnName) Then
        If CType(e.ProposedValue, Short) <= 0 Then
            e.Row.SetColumnError(e.Column, "Quantity must be greater than 0")
        Else
            e.Row.SetColumnError(e.Column, "")
        End If
    End If
    
    // C#
    // Add this code to the DataTable 
    // partial class.
    
        public override void EndInit()
        {
            base.EndInit();
            // Hook up the ColumnChanging event
            // to call the SampleColumnChangingEvent method.
            ColumnChanging += SampleColumnChangingEvent;
        }
    
        public void SampleColumnChangingEvent(object sender, System.Data.DataColumnChangeEventArgs e)
        {
            if (e.Column.ColumnName == QuantityColumn.ColumnName)
            {
                if ((short)e.ProposedValue <= 0)
                {
                    e.Row.SetColumnError("Quantity", "Quantity must be greater than 0");
                }
                else
                {
                    e.Row.SetColumnError("Quantity", "");
                }
            }
        }
    

Validation des modifications de lignes entières

Validez les valeurs dans les lignes entières en gérant l'événement RowChanging. L'événement RowChanging est déclenché lorsque les valeurs dans toutes les colonnes sont validées. Il est nécessaire d'effectuer la validation dans l'événement RowChanging lorsque la valeur dans une colonne se base sur la valeur dans une autre colonne. Prenons l'exemple de OrderDate et RequiredDate dans la table Orders de Northwind. Lorsque des commandes sont entrées, la validation vérifie qu'une commande n'est pas entrée avec une valeur RequiredDate qui correspond ou est antérieure à la valeur OrderDate. Dans cet exemple, les valeurs des colonnes RequiredDate et OrderDate doivent être comparées. Par conséquent, la validation d'une colonne individuelle n'a pas de sens.

Pour créer un gestionnaire d'événements pour le RowChanging, double-cliquez sur le nom de la table dans la barre de titre de la table sur Concepteur de DataSet.

Pour ajouter la validation pendant les modifications de lignes entières

  1. Ouvrez le groupe de données dans le Concepteur de DataSet en double-cliquant sur le fichier .xsd dans l'Explorateur de solutions. Pour plus d'informations, consultez Comment : ouvrir un groupe de données dans le Concepteur de DataSet.

  2. Double-cliquez sur la barre de titre de la table de données du concepteur.

    Une classe partielle est créée avec un gestionnaire d'événements RowChanging et s'ouvre dans l'éditeur de code.

    Remarque :

    Le Concepteur de DataSet ne crée pas automatiquement de gestionnaire d'événements pour l'événement RowChanging dans les projets C#. Vous devez créer une méthode pour gérer l'événement RowChanging et exécuter le code permettant de raccorder l'événement dans la méthode d'initialisation de la table.

  3. Ajoutez le code utilisateur à l'intérieur de la déclaration de classe partielle.

  4. Le code suivant indique où ajouter le code utilisateur pour effectuer la validation pendant l'événement RowChanging pour Visual Basic :

    Partial Class OrdersDataTable
        Private Sub OrdersDataTable_OrdersRowChanging(ByVal sender As System.Object, ByVal e As OrdersRowChangeEvent) Handles Me.OrdersRowChanging
            ' Add logic to validate columns here.
            If e.Row.RequiredDate <= e.Row.OrderDate Then
                ' Set the RowError if validation fails.
                e.Row.RowError = "Required Date cannot be on or before the OrderDate"
            Else
                ' Clear the RowError when validation passes.
                e.Row.RowError = ""
            End If
        End Sub
    End Class
    
  5. Le code suivant indique comment créer le gestionnaire d'événements RowChanging et où ajouter le code utilisateur pour effectuer la validation pendant l'événement RowChanging pour C# :

    partial class OrdersDataTable
    {
        public override void EndInit()
        {
            base.EndInit();
            // Hook up the event to the
            // RowChangingEvent method.
            OrdersRowChanging += RowChangingEvent;
        }
    
        public void RowChangingEvent(object sender, OrdersRowChangeEvent e)
        {
            // Perfom the validation logic.
            if (e.Row.RequiredDate <= e.Row.OrderDate)
            {
                // Set the row to an error when validation fails.
                e.Row.RowError = "Required Date cannot be on or before the OrderDate";
            }
            else
            {
                // Clear the RowError if validation passes.
                e.Row.RowError = "";
            }
        }
    }
    

Voir aussi

Tâches

Procédure pas à pas : création d'une application de données multicouche

Concepts

Nouveautés des données

Création d'applications de données à l'aide de Visual Studio

Vue d'ensemble de l'application de données multicouche

Vue d'ensemble de la validation des données