共用方式為


HOW TO:將新資料列加入 ListObject 控制項時驗證資料

使用者可將新資料列加入至繫結至資料的 ListObject 控制項。 您可以在對資料來源執行變更之前,驗證使用者的資料。

**適用於:**本主題中的資訊適用於 Excel 2007 和 Excel 2010 的文件層級專案和應用程式層級專案。如需詳細資訊,請參閱依 Office 應用程式和專案類型提供的功能

資料驗證

每當資料列加入繫結至資料的 ListObject 時,便會引發 BeforeAddDataBoundRow 事件。 您可以處理這個事件,執行資料驗證。 例如,您的應用程式要求只能將 18 到 65 歲的員工加入至資料來源,則可以在資料列加入之前,驗證輸入的年齡是否落在該範圍內。

注意事項注意事項

您一定要在伺服器和用戶端檢查使用者輸入。 如需詳細資訊,請參閱安全用戶端應用程式 (ADO.NET)

若要在新資料列加入至資料繫結 ListObject 時驗證資料

  1. 在類別層級建立 ID 和 DataTable 的變數。

    Dim id As Integer = 0
    Dim employeeTable As System.Data.DataTable
    
    private int id = 0;
    private System.Data.DataTable employeeTable;
    
  2. 在 Sheet1 類別 (文件層級專案) 或 ThisAddIn 類別 (應用程式層級專案) 的 Startup 事件處理常式中,建立新的 DataTable 及加入範例資料行和資料。

    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. 將程式碼加入至 list1_BeforeAddDataBoundRow 事件處理常式,以檢查輸入的年齡是否落在可接受的範圍內。

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

編譯程式碼

這個程式碼範例假設您在顯示這個程式碼的工作表上,有名為 list1 的現有 ListObject

請參閱

工作

HOW TO:將 ListObject 欄對應到資料

概念

在應用程式層級增益集的執行階段中擴充 Word 文件和 Excel 活頁簿

在執行階段將控制項加入至 Office 文件

ListObject 控制項

使用擴充物件自動化 Excel

其他資源

Office 文件上的控制項