在向 ListObject 控件添加新行时验证数据

用户可以向绑定到数据的 ListObject 控件添加新行。 可以在将更改提交到数据源之前验证用户数据。

适用于: 本主题中的信息适用于 Excel 的文档级项目和 VSTO 外接程序项目。 有关详细信息,请参阅办公室应用程序和项目类型提供的功能。

数据验证

每当向绑定到数据的 ListObject 添加行时,便会引发 BeforeAddDataBoundRow 事件。 可以处理此事件以执行数据验证。 例如,如果应用程序要求仅将 18 至 65 岁的员工添加到数据源,请验证输入的年龄是否在添加行之前属于该范围。

注意

除了在客户端上,还应始终在服务器上检查用户输入。 有关详细信息,请参阅 安全客户端应用程序

在向数据绑定 ListObject 添加新行时验证数据

  1. 在类级别为 ID 和 DataTable 创建变量。

    private int id = 0;
    private System.Data.DataTable employeeTable;
    
  2. 在类的Sheet1事件处理程序(在文档级项目中)或ThisAddIn类(在 VSTO 外接程序项目中)中创建新的DataTable和添加示例列和数据Startup

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

编译代码

此代码示例假定在此代码出现的工作表中有一个名为 ListObject 的现有 list1