Freigeben über


Gewusst wie: Überprüfen der Daten, wenn einem ListObject-Steuerelement eine neue Zeile hinzugefügt wird

Aktualisiert: Juli 2008

Betrifft

Die Informationen in diesem Thema gelten nur für die angegebenen Projekte und Versionen von Visual Studio Tools for Office von Microsoft Office.

Projekte auf Dokumentebene

  • Excel 2007

  • Excel 2003

Projekte auf Anwendungsebene

  • Excel 2007

Weitere Informationen hierzu finden Sie unter Verfügbare Features nach Anwendung und Projekttyp.

Benutzer können einem an Daten gebundenen ListObject-Steuerelement neue Zeilen hinzufügen. Sie können die Daten des Benutzers überprüfen, bevor Sie die Änderungen an die Datenquelle weitergeben.

Wenn ein Fehler auftritt, können Sie mithilfe von Code zusätzliche Daten zur Korrektur des Fehlers bereitstellen. Weitere Informationen finden Sie unter Gewusst wie: Behandeln von Fehlern beim Hinzufügen einer neuen Zeile zu einem ListObject-Steuerelement.

Datenüberprüfung

Sobald eine Zeile einem an Daten gebundenen ListObject hinzugefügt wird, wird das BeforeAddDataBoundRow-Ereignis ausgelöst. Sie können dieses Ereignis behandeln, um die Datenvalidierung auszuführen. Wenn die Anwendung beispielsweise nur Angestellte zwischen 18 und 65 Jahren als mögliche Einträge in der Datenbank zulässt, können Sie überprüfen, ob das eingegebene Alter innerhalb des Bereichs liegt, bevor die Zeile hinzugefügt wird.

Hinweis:

Sie sollten die Benutzereingabe immer sowohl auf dem Server als auch auf dem Client überprüfen. Weitere Informationen hierzu finden Sie unter Sichere Clientanwendungen (ADO.NET).

So validieren Sie Daten beim Hinzufügen einer neuen Zeile zum datengebundenen ListObject

  1. Erstellen Sie auf Klassenebene Variablen für die ID und für DataTable.

    Dim id As Integer = 0
    Dim employeeTable As System.Data.DataTable
    
    private int id = 0;
    private System.Data.DataTable employeeTable;
    
  2. Erstellen Sie eine neue DataTable, und fügen Sie Beispielspalten und -daten im Startup-Ereignishandler der Sheet1-Klasse (in einem Projekt auf Dokumentebene) oder der ThisAddIn-Klasse (in einem Projekt auf Anwendungsebene) hinzu.

    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. Fügen Sie dem list1_BeforeAddDataBoundRow-Ereignishandler Code hinzu, mit dem überprüft wird, ob das eingegebene Alter innerhalb des erlaubten Bereichs liegt:

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

Kompilieren des Codes

In diesem Codebeispiel wird davon ausgegangen, dass ein ListObject mit dem Namen list1 in dem Arbeitsblatt vorhanden ist, in dem dieser Code angezeigt wird.

Siehe auch

Aufgaben

Gewusst wie: Zuordnung von ListObject-Spalten zu Daten

Gewusst wie: Behandeln von Fehlern beim Hinzufügen einer neuen Zeile zu einem ListObject-Steuerelement

Konzepte

Erweitern von Word-Dokumenten und Excel-Arbeitsmappen in Add-Ins auf Anwendungsebene zur Laufzeit

Entwicklung von Add-Ins auf Anwendungsebene für Excel

Hinzufügen von Steuerelementen zu Office-Dokumenten zur Laufzeit

ListObject-Steuerelement

Grundlagen der ListObject-Spalte und der Beibehaltung der Zeilenanordnung

Weitere Ressourcen

Steuerelemente für Office-Dokumente

Excel-Hoststeuerelemente

Änderungsverlauf

Date

Versionsgeschichte

Grund

Juli 2008

Beispiel geändert, damit es in einem Add-In auf Anwendungsebene verwendet werden kann.

SP1-Featureänderung.