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
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;
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);
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
Dodawanie formantów do dokumentów pakietu Office w czasie wykonywania
Automatyzowanie programu Excel za pomocą obiektów rozszerzonych