ListObject 控件
ListObject 控件是一个用于公开事件的列表,可绑定到数据。向工作表中添加列表时,Visual Studio 将创建一个 ListObject 控件,可以直接对此控件进行编程,而不必遍历 Microsoft Office Excel 对象模型。
**适用于:**本主题中的信息适用于 Excel 2013 和 Excel 2010 的文档级项目和应用程序级项目。有关更多信息,请参见按 Office 应用程序和项目类型提供的功能。
创建控件
在文档级项目中,您可以在设计时或运行时向工作表中添加 ListObject 控件。在应用程序级项目中,只能在运行时向工作表中添加 ListObject 控件。有关更多信息,请参见如何:向工作表添加 ListObject 控件。
说明 |
---|
默认情况下,关闭工作表时,动态创建的列表对象不会像宿主控件那样保留在工作表中。有关更多信息,请参见在运行时向 Office 文档添加控件。 |
将数据绑定到控件
ListObject 控件支持简单数据绑定和复杂数据绑定。通过在设计时使用 DataSource 和 DataMember 属性或在运行时使用 SetDataBinding 方法,可将 ListObject 控件绑定到数据源。
说明 |
---|
ListObject 将在绑定到数据发生更改时会引发事件的数据源(如 DataTable)时自动更新。如果将 ListObject 绑定到数据发生更改时不会引发事件的数据源,则必须调用 RefreshDataRow 或 RefreshDataRows 方法更新 ListObject。 |
通过将重复的架构元素映射到工作表单元格的方式将 ListObject 添加到该单元格中时,Visual Studio 会将 ListObject 自动映射到生成的数据集。但是,ListObject 不会自动绑定到该数据。在文档级项目中,可以在设计时或运行时执行一些步骤来将 ListObject 绑定到数据集。在应用程序级外接程序中,可以在运行时通过编程方式将 ListObject 绑定到数据集。
由于该数据与 ListObject 是分离的,因此应通过被绑定的数据集添加和移除数据,而不能直接通过 ListObject 进行此类操作。如果可以通过某种机制更新被绑定数据集内的数据,则 ListObject 控件会自动反映所做的更改。有关更多信息,请参见将数据绑定到 Office 解决方案中的控件。
可以通过将 ListObject 绑定到数据源的方式快速填充 ListObject 控件。如果在数据绑定的 ListObject 中编辑数据,所做的更改将同时自动应用于数据源。如果要填充 ListObject,并使用户无需修改数据源即可更改 ListObject 中的数据,可使用 Disconnect 方法将 ListObject 从数据源中分离开来。有关更多信息,请参见如何:用数据填充 ListObject 控件。
说明 |
---|
重叠的 ListObject 控件上不支持数据绑定。 |
改善 ListObject 控件的性能
如果先绑定 ListObject 控件,然后再调用 ReadXml 填充数据集,则会降低将 XML 文件读入到该数据绑定控件的速度。若要提高性能,请在绑定该控件之前调用 ReadXml。
断开 ListObject 控件与数据源的连接
通过将 ListObject 控件绑定到数据源来为其填充数据之后,可以断开连接,这样对列表对象中的数据所做的修改将不会影响数据源。有关更多信息,请参见如何:用数据填充 ListObject 控件。
还原列和行顺序
在将数据绑定到在设计时添加到文档中的 ListObject 控件时,Visual Studio 会在每次保存工作簿时跟踪列和行的顺序。如果用户在运行期间移动 ListObject 列或行,新顺序便会保持下来,下次打开工作簿时,ListObject 控件会再次绑定到相应的数据源。
如果要将 ListObject 还原为其原始的列和行顺序,可以调用 ResetPersistedBindingInformation 方法。此方法会移除与指定 ListObject 的列和行顺序相关的自定义文档属性。如果不想保持 ListObject 的列和行顺序,则可从工作簿的 Shutdown 事件中调用此方法。
格式设置
可应用于 Microsoft.Office.Interop.Excel.ListObject 的格式设置也可应用于 Microsoft.Office.Tools.Excel.ListObject 控件。这包括边框、字体、数字格式和样式。最终用户可以重新排列绑定了数据的 ListObject 中的列,并且如果在设计时已将 ListObject 添加到文档,则这些更改将保留在文档中。下次打开该文档时,此列表对象将绑定到相同的数据源,但列顺序将反映出用户所做的更改。
在运行时添加和移除列
在运行时不能手动添加或移除绑定了数据的 ListObject 控件中的列。如果最终用户尝试删除某列,则该列将立即还原,而添加的任何列也将被移除。因此,非常有必要编写代码以向用户说明为何不能在绑定到数据的 ListObject 上执行这些操作。Visual Studio 在 ListObject 上提供了与数据绑定相关的一些事件。例如,可以使用 OriginalDataRestored 事件警告用户不能删除其尝试删除的数据,而且该数据已还原。
在运行时添加和移除行
如果数据源允许添加新行并且数据源不是只读的,则可以手动添加和移除绑定了数据的 ListObject 控件中的行。可以针对事件编写代码,如针对 BeforeAddDataBoundRow 编写代码以对数据进行验证。有关更多信息,请参见如何:在向 ListObject 控件添加新行时验证数据。
有时列表对象与数据源的关系会造成例程错误。例如,您可以映射您希望在 ListObject 中显示的列,因此,如果您省略存在限制的列(如不能接受 null 值的字段),则每次创建行时都会引发错误。您可以通过编写代码在 ErrorAddDataBoundRow 事件的事件处理程序中添加缺少的值。
在 Excel 中重命名 ListObject 控件
利用 Excel,用户能够在运行时使用**“设计”**选项卡来更改 Excel 表的名称。但是,ListObject 控件不支持此功能。如果用户尝试重命名与 ListObject 相对应的 Excel 表,则 Excel 表的名称将自动在保存工作簿时恢复为原来的名称。
事件
以下事件可用于 ListObject 控件:
请参见
任务
概念
在运行时在应用程序级外接程序中扩展 Word 文档和 Excel 工作簿