ListObject (Control)

El control ListObject es una lista que expone eventos y se puede enlazar a datos. Cuando se agrega una lista a una hoja de cálculo, Visual Studio crea un control ListObject con el que se puede programar directamente sin tener que pasar por el modelo de objetos de Microsoft Office Excel.

Se aplica a: la información de este tema se aplica a los proyectos de nivel de documento y los proyectos de nivel de aplicación para Excel 2007 y Excel 2010. Para obtener más información, vea Características disponibles por aplicación y tipo de proyecto de Office.

Crear el control

En los proyectos de documento, puede agregar controles ListObject a una hoja de cálculo en tiempo de diseño o tiempo de ejecución. En los proyectos de aplicación, se pueden agregar controles ListObject a una hoja de cálculo únicamente en tiempo de ejecución. Para obtener más información, vea Cómo: Agregar controles ListObject a hojas de cálculo.

Nota

De manera predeterminada, los objetos de lista creados de forma dinámica no se conservan en la hoja de cálculo como controles host cuando ésta se cierra. Para obtener más información, vea Agregar controles a documentos de Office en tiempo de ejecución.

Enlazar datos al control

Un control ListObject admite el enlace de datos simple y complejo. El control ListObject se puede enlazar a un origen de datos utilizando las propiedades DataSource y DataMember en tiempo de diseño o el método SetDataBinding en tiempo de ejecución.

Nota

ListObject se actualiza automáticamente cuando se enlaza a un origen de datos, como DataTable, que provoca eventos cuando los datos cambian. Si se enlaza ListObject a un origen de datos que no provoca eventos cuando los datos cambian, se debe llamar al método RefreshDataRow o RefreshDataRows para actualizar ListObject.

Cuando se agrega un control ListObject a una celda de una hoja de cálculo asignando un elemento de esquema de repetición a esa celda, Visual Studio lo asigna automáticamente al conjunto de datos generado. Sin embargo, ListObject no se enlaza automáticamente a los datos. Es posible enlazar manualmente ListObject al conjunto de datos en tiempo de diseño o en tiempo de ejecución en un proyecto en el nivel del documento. Es posible enlazar mediante programación el control ListObject al conjunto de datos en tiempo de ejecución en un complemento en el nivel de la aplicación.

Dado que los datos están separados del objeto ListObject, debe agregar y quitar los datos a través del conjunto de datos enlazado, y no directamente a través del control ListObject. Si los datos del conjunto de datos enlazado se actualizan mediante cualquier mecanismo, el control ListObject reflejará los cambios automáticamente. Para obtener más información, vea Enlazar datos a controles en soluciones de Office.

Se puede rellenar rápidamente un control ListObject enlazando ListObject a un origen de datos. Si se editan los datos en un ListObject enlazado a datos, los cambios también se realizarán automáticamente en el origen de datos. Si desea rellenar un ListObject y, a continuación, permitir que el usuario pueda cambiar los datos del ListObject sin modificar el origen de datos, puede usar el método Disconnect para desasociar el ListObject del origen de datos. Para obtener más información, consulte Cómo: Rellenar los controles ListObject con datos.

Nota

No se admite el enlace de datos en controles ListObject solapados.

Mejorar el rendimiento en los controles ListObject

La lectura de un archivo XML en un control ListObject enlazado a datos tiende a ser más lenta si se enlaza primero el control y, a continuación, se llama a ReadXml para rellenar el conjunto de datos. Para mejorar el rendimiento, llame a ReadXml antes de enlazar el control.

Desconectar controles ListObject del origen de datos

Una vez rellenado un control ListObject con datos mediante el enlace con un origen de datos, es posible desconectarlo para que las modificaciones efectuadas en los datos del objeto de lista no afecten al origen de datos. Para obtener más información, vea Cómo: Rellenar los controles ListObject con datos.

Restaurar el orden de columnas y filas

Cuando enlaza los datos a un control ListObject agregado a un documento en tiempo de diseño, Visual Studio realiza un seguimiento del orden de columnas y filas cada vez que se guarda el libro. Si un usuario mueve las columnas o filas de ListObject en tiempo de ejecución, el nuevo orden se conserva la próxima vez se abre el libro y el control ListObject se enlaza de nuevo al origen de datos.

Si desea restaurar el control ListObject a su orden de columnas y filas original, puede llamar al método ResetPersistedBindingInformation. Este método quita las propiedades de documento personalizadas relacionadas con el orden de columnas y filas del control ListObject especificado. Llame a este método desde el evento Shutdown del Libro si no desea conservar el orden de columnas y filas del control ListObject.

Formato

El formato que puede aplicarse a Microsoft.Office.Interop.Excel.ListObject también puede aplicarse a un control Microsoft.Office.Tools.Excel.ListObject. Estas características de formato incluyen bordes, fuentes, formato de número y estilos. Los usuarios finales pueden reorganizar las columnas de un control ListObject enlazado a datos y estos cambios se conservarán con el documento, siempre que se agregara ListObject en tiempo de diseño al documento. La próxima vez que se abra el documento, el objeto de lista estará enlazado al mismo origen de datos, pero el orden de las columnas reflejará los cambios efectuados por los usuarios.

Agregar y quitar columnas en tiempo de ejecución

En tiempo de ejecución no puede agregar ni quitar manualmente columnas de un control ListObject enlazado a datos. Si un usuario final intenta eliminar una columna, ésta se restaurará inmediatamente y se quitarán las columnas agregadas. Por consiguiente, es importante escribir código para explicar a los usuarios por qué no pueden realizar estas acciones en un control ListObject enlazado a datos. Visual Studio proporciona varios eventos en un control ListObject relacionado con el enlace de datos. Por ejemplo, puede utilizar el evento OriginalDataRestored para advertir a los usuarios que no se pueden eliminar los datos que han intentado eliminar y que se han restaurado.

Agregar y quitar filas en tiempo de ejecución

Puede agregar manualmente y quitar filas de un control ListObject enlazado a datos, siempre que el origen de datos permita la adición de nuevas filas y no sea de sólo lectura. Puede escribir código para eventos como BeforeAddDataBoundRow para validar los datos. Para obtener más información, vea Cómo: Validar datos cuando se agrega una fila nueva a un control ListObject.

A veces, la relación del objeto de lista con el origen de datos produce errores de rutina. Por ejemplo, puede asignar las columnas que desea que aparezcan en ListObject. En este caso, si omite columnas con restricciones, como un campo que no puede aceptar valores Null, se provocará un error cada vez que se cree una fila. Puede escribir código para agregar los valores que faltan en un controlador del evento ErrorAddDataBoundRow.

Cambiar el nombre de controles ListObject en Excel

Excel permite a los usuarios cambiar el nombre de las tablas de Excel en tiempo de ejecución mediante la pestaña Diseño. Sin embargo, el control ListObject no admite esta característica. Si un usuario intenta cambiar el nombre de una tabla de Excel que corresponde a ListObject, el nombre de la tabla de Excel se invertirá automáticamente al nombre original cuando se guarde el libro.

Eventos

Los siguientes eventos están disponibles para el control ListObject:

Vea también

Tareas

Cómo: Agregar controles ListObject a hojas de cálculo

Cómo: Cambiar el tamaño de los controles ListObject

Cómo: Validar datos cuando se agrega una fila nueva a un control ListObject

Cómo: Asignar columnas ListObject a datos

Cómo: Rellenar los controles ListObject con datos

Cómo: Rellenar hojas de cálculo con datos de una base de datos

Conceptos

Automatizar Excel usando objetos extendidos

Ampliar documentos de Word y libros de Excel en complementos en el nivel de la aplicación en tiempo de ejecución

Agregar controles a documentos de Office en tiempo de ejecución

Limitaciones de programación de elementos y controles Host

Otros recursos

Ejemplos y tutoriales del desarrollo de Office

Enlazar datos a controles en soluciones de Office

Controles en documentos de Office