Udostępnij za pośrednictwem


Jak: Sprawdzanie poprawności danych podczas dodawania nowego wiersza 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.

Dotyczy: Informacje przedstawione w tym temacie dotyczą projektów na poziomie dokumentu i projektów na poziomie aplikacji dla programów Excel 2013 i Excel 2010. Aby uzyskać więcej informacji, zobacz Funkcje dostępne w aplikacji 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 Creating Secure User Interfaces.

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

Jak: mapowanie kolumn ListObject do danych

Koncepcje

Rozszerzanie dokumenty programu Word oraz skoroszyty programu Excel w dodatki poziomie aplikacji w czasie wykonywania

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

Formant ListObject

Automatyzowanie programu Excel przy użyciu obiektów rozszerzony

Inne zasoby

Kontrole dokumentów pakietu Office