Comment : valider des données lorsqu’une nouvelle ligne est ajoutée à un contrôle ListObjectHow to: Validate data when a new row is added to a ListObject control

Les utilisateurs peuvent ajouter de nouvelles lignes à un contrôle ListObject qui est lié aux données.Users can add new rows to a ListObject control that is bound to data. Vous pouvez valider les données de l’utilisateur avant d’approuver les modifications apportées à la source de données.You can validate the user's data before committing the changes to the data source.

S’applique à : Les informations contenues dans cette rubrique s’appliquent aux projets de niveau document et aux projets de compléments VSTO pour Excel.Applies to: The information in this topic applies to document-level projects and VSTO add-in projects for Excel. Pour plus d’informations, consultez Fonctionnalités disponibles par type d’application et de projet Office.For more information, see Features Available by Office Application and Project Type.

Validation des donnéesData validation

Chaque fois qu’une ligne est ajoutée à un ListObject qui est lié aux données, l’événement BeforeAddDataBoundRow est déclenché.Whenever a row is added to a ListObject that is bound to data, the BeforeAddDataBoundRow event is raised. Vous pouvez gérer cet événement pour effectuer la validation de vos données.You can handle this event to perform your data validation. Par exemple, si votre application requiert que seuls les employés âgés de 18 à 65 ans peuvent être ajoutés à la source de données, vérifiez que l’âge entré est compris dans cette plage avant la ligne est ajoutée.For example, if your application requires that only employees between the ages of 18 and 65 can be added to the data source, verify that the age entered falls within that range before the row is added.

Note

Vous devez toujours vérifier l’entrée d’utilisateur sur le client, mais aussi sur le serveur.You should always check user input on the server in addition to the client. Pour plus d’informations, consultez sécuriser les applications clientes.For more information, see Secure client applications.

Pour valider des données lorsqu’une nouvelle ligne est ajoutée à un ListObject lié aux donnéesTo validate data when a new row is added to data-bound ListObject

  1. Créez des variables pour l’ID et DataTable au niveau de la classe.Create variables for the ID and DataTable at the class level.

    private int id = 0;
    private System.Data.DataTable employeeTable;
    
    Dim id As Integer = 0
    Dim employeeTable As System.Data.DataTable
    
  2. Créer un nouveau DataTable et ajoutez des exemples de colonnes et les données dans le Startup Gestionnaire d’événements de la Sheet1 classe (dans un projet au niveau du document) ou ThisAddIn classe (dans un projet de complément VSTO).Create a new DataTable and add sample columns and data in the Startup event handler of the Sheet1 class (in a document-level project) or ThisAddIn class (in a VSTO Add-in project).

    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);
    
    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")
    
  3. Ajoutez du code au gestionnaire d’événements list1_BeforeAddDataBoundRow pour vérifier si l’âge entré est compris dans la plage autorisée.Add code to the list1_BeforeAddDataBoundRow event handler to check whether the age entered falls within the acceptable range.

    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;
        }
    }
    
    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
    

Compiler le codeCompile the code

Cet exemple de code suppose qu’un ListObject nommé list1 existe dans la feuille de calcul dans laquelle ce code apparaît.This code example assumes that you have an existing ListObject named list1 on the worksheet in which this code appears.

Voir aussiSee also

Étendre des documents Word et classeurs Excel dans des Compléments VSTO lors de l’exécution Extend Word documents and Excel workbooks in VSTO Add-ins at runtime
Contrôles sur des documents Office Controls on Office documents
Ajouter des contrôles aux documents Office au moment de l’exécution Add controls to Office documents at runtime
ListObject (contrôle) ListObject control
Automatisation d’Excel à l’aide d’objets étendus Automate Excel by using extended objects
Comment : colonnes ListObject de mappage de donnéesHow to: Map ListObject columns to data