Share via


在新增數據列至 ListObject 控制項時驗證數據

使用者可以將新的資料列加入繫結至資料的 ListObject 控制項。 您可以先驗證使用者的資料,再認可資料來源的變更。

適用於: 本主題中的資訊適用於 Excel 的文件層級專案和 VSTO 載入宏專案。 如需詳細資訊,請參閱 Office 應用程式 lication 和項目類型所提供的功能。

資料驗證

每次將資料列加入繫結至資料的 ListObject ,就會引發 BeforeAddDataBoundRow 事件。 您可以處理這個事件以執行資料驗證。 例如,如果您的應用程式要求只有 18 到 65 歲之間的員工可以新增至數據源,請確認輸入的年齡落在該範圍內,然後再加入數據列。

注意

除用戶端之外,亦請一律檢查伺服器上的使用者輸入。 如需詳細資訊,請參閱 保護用戶端應用程式

在新資料列加入資料繫結的 ListObject 時驗證資料

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

    private int id = 0;
    private System.Data.DataTable employeeTable;
    
  2. 在類別的Sheet1事件處理程式中建立新的DataTable數據行和數據行和數據Startup,或ThisAddIn類別(在 VSTO 載入宏專案中)。

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

編譯程式碼

這個程式碼範例假設在這個程式碼出現的工作表中已有名為 ListObjectlist1