如何:向 ListObject 控件添加新行时处理错误
更新:2007 年 11 月
适用对象 |
---|
本主题中的信息仅适用于指定的 Visual Studio Tools for Office 项目和 Microsoft Office 版本。 文档级项目
应用程序级项目
有关更多信息,请参见按应用程序和项目类型提供的功能。 |
用户可以向绑定到数据的 ListObject 控件中添加新行。有时列表对象与数据源的关系会造成例程错误。例如,您可以映射您希望在 ListObject 中显示的列,因此,如果您省略存在限制的列(如不能接受 null 值的字段),则每次创建行时都会引发错误。您可以通过编写代码在 ErrorAddDataBoundRow 事件的事件处理程序中添加缺少的值。
处理在添加数据绑定行时所发生的错误
在类级别创建 ID 和 DataTable 的变量。
Dim id As Integer = 0 Dim employeeTable As System.Data.DataTable
private int id = 0; private System.Data.DataTable employeeTable;
创建一个新的 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);
在 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。
请参见
任务
概念
在运行时在应用程序级外接程序中扩展 Word 文档和 Excel 工作簿
其他资源
修订记录
日期 |
修订 |
原因 |
---|---|---|
2008 年 7 月 |
修改了示例以便可以在应用程序级外接程序中使用它。 |
SP1 功能更改。 |