Share via


如何:向 ListObject 控件添加新行时处理错误

更新:2007 年 11 月

适用对象

本主题中的信息仅适用于指定的 Visual Studio Tools for Office 项目和 Microsoft Office 版本。

文档级项目

  • Excel 2007

  • Excel 2003

应用程序级项目

  • Excel 2007

有关更多信息,请参见按应用程序和项目类型提供的功能

用户可以向绑定到数据的 ListObject 控件中添加新行。有时列表对象与数据源的关系会造成例程错误。例如,您可以映射您希望在 ListObject 中显示的列,因此,如果您省略存在限制的列(如不能接受 null 值的字段),则每次创建行时都会引发错误。您可以通过编写代码在 ErrorAddDataBoundRow 事件的事件处理程序中添加缺少的值。

处理在添加数据绑定行时所发生的错误

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

    Dim id As Integer = 0
    Dim employeeTable As System.Data.DataTable
    
    private int id = 0;
    private System.Data.DataTable employeeTable;
    
  2. 创建一个新的 DataTable,然后在 Sheet1 类(在文档级项目中)或 ThisAddIn 类(在应用程序级项目中)的 Startup 事件处理程序中添加示例列和数据。

    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.ErrorAddDataBoundRow += new Microsoft.Office.Tools.Excel.
        ErrorAddDataBoundRowEventHandler(list1_ErrorAddDataBoundRow);
    
  3. ErrorAddDataBoundRow 事件的事件处理程序中,将下一个递增的 ID 编号添加到 Id 字段中,然后再次添加相应行。

    Private Sub list1_ErrorAddDataBoundRow(ByVal sender As Object, ByVal e As  _
        Microsoft.Office.Tools.Excel.ErrorAddDataBoundRowEventArgs) _
        Handles list1.ErrorAddDataBoundRow
    
        Dim row As System.Data.DataRow = (CType(e.Item, System.Data.DataRowView)).Row
    
        If TypeOf (e.InnerException) Is NoNullAllowedException Then
            row("Id") = id
            id += 1
            e.Retry = True
        End If
    End Sub
    
    private void list1_ErrorAddDataBoundRow(object sender,
        Microsoft.Office.Tools.Excel.ErrorAddDataBoundRowEventArgs e)
    {
        System.Data.DataRow row = ((System.Data.DataRowView)e.Item).Row;
    
        if (e.InnerException is NoNullAllowedException)
        {
            row["Id"]= id;
            id++;
            e.Retry = true;
        }
    }
    

编译代码

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

请参见

任务

如何:将 ListObject 列映射到数据

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

概念

在运行时在应用程序级外接程序中扩展 Word 文档和 Excel 工作簿

Excel 应用程序级外接程序开发

在运行时向 Office 文档添加控件

ListObject 控件

了解 ListObject 列和行顺序持久性

其他资源

Office 文档上的控件

Excel 宿主控件

修订记录

日期

修订

原因

2008 年 7 月

修改了示例以便可以在应用程序级外接程序中使用它。

SP1 功能更改。