Porady: walidacja danych po dodaniu nowego rzędu do formantu ListObject

Użytkownicy mogą dodawać nowe wiersze do ListObject kontroli, która jest związana z danymi.Przed zatwierdzeniem zmian w źródle danych, można sprawdzić poprawność danych użytkownika.

Zastosowanie: Informacje przedstawione w tym temacie mają zastosowanie do projektów na poziomie dokumentu i aplikacji obsługiwanych w programach Excel 2013 i Excel 2010. Aby uzyskać więcej informacji, zobacz Funkcje dostępne w aplikacjach pakietu Office i typ projektu.

Sprawdzanie poprawności danych

Gdy dodawany jest wiersz do ListObject , jest związana z danymi, BeforeAddDataBoundRow zdarzenie jest wywoływane.Może obsłużyć tego zdarzenia do poprawności danych.Na przykład jeśli aplikacja wymaga, że tylko pracownicy w wieku 18 i 65 mogą być dodawane do źródła danych, można sprawdzić że wiek wpisuje przypada w tym zakresie przed dodaniem wiersza.

[!UWAGA]

Należy zawsze sprawdzić dane wejściowe użytkownika na serwerze, oprócz klienta.Aby uzyskać więcej informacji, zobacz Secure Client Applications.

Do sprawdzania poprawności danych, gdy nowy wiersz jest dodawany do obiektu ListObject powiązane z danymi

  1. Tworzenie zmiennych dla Identyfikatora i DataTable na poziomie klasy.

    Dim id As Integer = 0
    Dim employeeTable As System.Data.DataTable
    
    private int id = 0;
    private System.Data.DataTable employeeTable;
    
  2. Utwórz nowy DataTable i dodać kolumny próbki i dane w Startup obsługi zdarzeń z Sheet1 klasy (w projekcie poziomie dokumentu) lub ThisAddIn klasy (w projekcie poziomie aplikacji).

    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. Dodawanie kodu do list1_BeforeAddDataBoundRow obsługi zdarzeń, aby sprawdzić, czy wiek wpisuje mieści się w dopuszczalnym zakresie.

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

Kompilowanie kodu

W tym przykładzie kodu założono, że istniejące ListObject o nazwie list1 w arkuszu, w którym pojawia się ten kod.

Zobacz też

Zadania

Porady: mapowanie kolumn ListObject do danych

Koncepcje

Rozszerzanie dokumentów programu Word i skoroszytów w programie Excel w czasie wykonywania w dodatkach na poziomie aplikacji

Dodawanie formantów do dokumentów pakietu Office w czasie wykonywania

ListObject — Formant

Automatyzowanie programu Excel za pomocą obiektów rozszerzonych

Inne zasoby

Formanty w dokumentach pakietu Office