Partager via


Comment : valider des données lorsqu'une nouvelle ligne est ajoutée à un contrôle ListObject

Les utilisateurs peuvent ajouter de nouvelles lignes à un contrôle ListObject lié aux données. Vous pouvez valider les données de l'utilisateur avant d'approuver les modifications apportées à la source de données.

S'applique à : Les informations contenues dans cette rubrique s'appliquent aux projets de niveau document et de niveau application pour Excel 2007 et Excel 2010. Pour en savoir plus, consultez Fonctionnalités disponibles par type d'application et de projet Office.

Validation des données

Chaque fois qu'une ligne est ajoutée à un ListObject qui est lié aux données, l'événement BeforeAddDataBoundRow est déclenché. Vous pouvez gérer cet événement pour effectuer la validation de vos données. Par exemple, si votre application requiert que seuls les employés âgés de 18 à 65 ans puissent être ajoutés à la source de données, vous pouvez vérifier que l'âge entré est compris dans cet intervalle avant que la ligne ne soit ajoutée.

Notes

Vous devez toujours vérifier l'entrée d'utilisateur sur le serveur ainsi que sur le client. Pour plus d'informations, consultez Applications clientes sécurisées (ADO.NET).

Pour valider des données lorsqu'une nouvelle ligne est ajoutée au contrôle ListObject lié aux données

  1. Créez des variables pour l'ID et DataTable au niveau de la classe.

    Dim id As Integer = 0
    Dim employeeTable As System.Data.DataTable
    
    private int id = 0;
    private System.Data.DataTable employeeTable;
    
  2. Créez un nouveau DataTable et ajoutez des exemples de colonnes et de données dans le gestionnaire d'événements Startup de la classe Sheet1 (dans un projet au niveau du document) ou dans la classe ThisAddIn (dans un projet au niveau de l'application).

    employeeTable = New System.Data.DataTable("Employees")
    
    Dim column As System.Data.DataColumn = _
        employeeTable.Columns.Add("Id", GetType(Int32))
    column.AllowDBNull = False
    
    employeeTable.Columns.Add("FirstName", GetType(String))
    employeeTable.Columns.Add("LastName", GetType(String))
    employeeTable.Columns.Add("Age", GetType(Int32))
    
    employeeTable.Rows.Add(id, "Nancy", "Anderson", 56)
    employeeTable.Rows.Add(id, "Robert", "Brown", 44)
    id += 1
    
    list1.SetDataBinding(employeeTable, "", "FirstName", "LastName", "Age")
    
    employeeTable = new System.Data.DataTable("Employees");
    
    System.Data.DataColumn column = employeeTable.Columns.Add
        ("Id", typeof(int));
    column.AllowDBNull = false;
    
    employeeTable.Columns.Add("FirstName", typeof(string));
    employeeTable.Columns.Add("LastName", typeof(string));
    employeeTable.Columns.Add("Age", typeof(int));
    
    employeeTable.Rows.Add(id, "Nancy", "Anderson", "56");
    employeeTable.Rows.Add(id, "Robert", "Brown", "44");
    id++;
    
    list1.SetDataBinding(employeeTable, "", "FirstName", "LastName", "Age");
    
    list1.BeforeAddDataBoundRow +=new Microsoft.Office.Tools.Excel.
        BeforeAddDataBoundRowEventHandler(list1_BeforeAddDataBoundRow);
    
  3. Ajoutez du code au gestionnaire d'événements list1_BeforeAddDataBoundRow pour vérifier si l'âge entré se situe dans l'intervalle autorisé.

    Private Sub list1_BeforeAddDataBoundRow(ByVal sender As Object, ByVal e As  _
        Microsoft.Office.Tools.Excel.BeforeAddDataBoundRowEventArgs) _
        Handles list1.BeforeAddDataBoundRow
    
        Dim row As System.Data.DataRow = (CType(e.Item, System.Data.DataRowView)).Row
    
        If Not row("Age") Is Nothing And Not row("Age") Is Convert.DBNull Then
    
            Dim ageEntered As Integer = CType(row("Age"), Int32)
    
            If ageEntered < 21 Or ageEntered > 65 Then
                System.Windows.Forms.MessageBox.Show _
                    ("Age must be between 21 and 65. The row cannot be added.")
                e.Cancel = True
                Return
            End If
    
            row("ID") = id
            id += 1
    
        Else
            System.Windows.Forms.MessageBox.Show("You must enter an age.")
            e.Cancel = True
        End If
    End Sub
    
    private void list1_BeforeAddDataBoundRow(object sender,
        Microsoft.Office.Tools.Excel.BeforeAddDataBoundRowEventArgs e)
    {
        System.Data.DataRow row = ((System.Data.DataRowView)e.Item).Row;
    
        if (row["Age"] != null && row["Age"] != Convert.DBNull)
        {
            int ageEntered = (int)row["Age"];
    
            if (ageEntered < 21 || ageEntered > 65)
            {
                System.Windows.Forms.MessageBox.Show
                    ("Age must be between 21 and 65. The row cannot be added.");
                e.Cancel = true;
                return;
            }
            row["ID"] = id;
            id++;
        }
        else
        {
            System.Windows.Forms.MessageBox.Show("You must enter an age.");
            e.Cancel = true;
        }
    }
    

Compilation du code

Cet exemple de code suppose qu'un contrôle ListObject nommé list1 existe dans la feuille de calcul dans laquelle ce code apparaît.

Voir aussi

Tâches

Comment : mapper des colonnes ListObject aux données

Concepts

Extension de documents Word et de classeurs Excel dans des compléments d'application au moment de l'exécution.

Ajout de contrôles à des documents Office au moment de l'exécution

ListObject, contrôle

Automatisation d'Excel à l'aide d'objets étendus

Autres ressources

Contrôles sur des documents Office