Partager via


Comment : gérer des erreurs lorsqu'une nouvelle ligne est ajoutée à un contrôle ListObject

Mise à jour : Juillet 2008

S'applique à

Les informations de cette rubrique s'appliquent uniquement aux projets Visual Studio Tools pour Office et versions spécifiés de Microsoft Office.

Projets au niveau du document

  • Excel 2007

  • Excel 2003

Projets au niveau de l'application

  • Excel 2007

Pour plus d'informations, consultez Fonctionnalités disponibles par type d'application et de projet.

Les utilisateurs peuvent ajouter de nouvelles lignes à un contrôle ListObject lié aux données. Il arrive que la relation de l'objet de liste à la source de données provoque des erreurs habituelles. Par exemple, vous pouvez mapper les colonnes que vous souhaitez voir apparaître dans le ListObject ; par conséquent, si vous omettez des colonnes qui comportent des restrictions, comme un champ qui n'accepte pas les valeurs Null, des erreurs sont retournées à chaque fois qu'une ligne est créée. Vous pouvez rédiger du code pour ajouter les valeurs manquantes dans un gestionnaire d'événements pour l'événement ErrorAddDataBoundRow.

Pour gérer les erreurs qui se produisent lorsqu'une ligne liée aux données est ajoutée

  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.ErrorAddDataBoundRow += new Microsoft.Office.Tools.Excel.
        ErrorAddDataBoundRowEventHandler(list1_ErrorAddDataBoundRow);
    
  3. Dans le gestionnaire d'événements pour l'événement ErrorAddDataBoundRow, ajoutez le numéro d'identification incrémenté suivant au champ Id et tentez d'ajouter la ligne une nouvelle fois.

    Private Sub list1_ErrorAddDataBoundRow(ByVal sender As Object, ByVal e As  _
        Microsoft.Office.Tools.Excel.ErrorAddDataBoundRowEventArgs) _
        Handles list1.ErrorAddDataBoundRow
    
        Dim row As System.Data.DataRow = (CType(e.Item, System.Data.DataRowView)).Row
    
        If TypeOf (e.InnerException) Is NoNullAllowedException Then
            row("Id") = id
            id += 1
            e.Retry = True
        End If
    End Sub
    
    private void list1_ErrorAddDataBoundRow(object sender,
        Microsoft.Office.Tools.Excel.ErrorAddDataBoundRowEventArgs e)
    {
        System.Data.DataRow row = ((System.Data.DataRowView)e.Item).Row;
    
        if (e.InnerException is NoNullAllowedException)
        {
            row["Id"]= id;
            id++;
            e.Retry = 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

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

Concepts

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

Développement d'un complément d'application pour Excel

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

ListObject, contrôle

Fonctionnement de la persistance de l'ordre des lignes et colonnes ListObject

Autres ressources

Contrôles sur des documents Office

Contrôles hôtes Excel

Historique des modifications

Date

Historique

Raison

Juillet 2008

Modification de l'exemple de manière à pouvoir l'utiliser dans un complément d'application.

Modifications de fonctionnalités dans le SP1.