Freigeben über


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

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.

Betrifft: Die Informationen in diesem Thema betreffen Projekte auf Dokument- und auf Anwendungsebene für Excel 2007 und Excel 2010. Weitere Informationen finden Sie unter Verfügbare Funktionen nach Office-Anwendung und Projekttyp.

Datenvalidierung

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.

Tipp

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

Konzepte

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

Hinzufügen von Steuerelementen zu Office-Dokumenten zur Laufzeit

ListObject-Steuerelement

Automatisieren von Excel mithilfe von erweiterten Objekten

Weitere Ressourcen

Steuerelemente für Office-Dokumente