Share via


Arquitectura del componente BindingSource

Con el componente BindingSource, puede enlazar universalmente todos los controles de formularios Windows Forms a orígenes de datos.

El componente BindingSource simplifica el proceso de enlazar controles a un origen de datos y proporciona las siguientes ventajas sobre el enlace de datos tradicional:

  • Permite enlaces a objetos comerciales en tiempo de diseño.

  • Encapsula la funcionalidad CurrencyManager y expone los eventos CurrencyManager en tiempo de diseño.

  • Simplifica la creación de una lista que admite la interfaz IBindingList proporcionando una notificación de cambios de lista para los orígenes de datos que no tienen compatibilidad nativa con las notificaciones de cambios de lista.

  • Proporciona un punto de extensibilidad para el método IBindingList.AddNew.

  • Proporciona un nivel de direccionamiento indirecto entre el origen de datos y el control. Este direccionamiento indirecto es importante cuando el origen de datos puede cambiar en tiempo de ejecución.

  • Interopera con otros controles de formularios Windows Forms relacionados con datos, específicamente los controles BindingNavigator y DataGridView.

Por esto, el componente BindingSource es la mejor manera de enlazar sus controles de formularios Windows Forms a los orígenes de datos.

Características de BindingSource

El componente BindingSource proporciona varias características para enlazar controles a datos. Con estas características, puede implementar la mayoría de los escenarios de enlace de datos con casi ninguna codificación por su parte.

El componente BindingSource realiza esto proporcionando una interfaz coherente para obtener acceso a diferentes tipos de orígenes de datos. Esto significa que utiliza el mismo procedimiento para enlazar a cualquier tipo. Por ejemplo, puede asociar la propiedad DataSource a una clase DataSet o a un objeto comercial, y en ambos casos se utiliza el mismo conjunto de propiedades, métodos y eventos para manipular el origen de datos.

La interfaz coherente proporcionada por el componente BindingSource simplifica considerablemente el proceso de enlazar los datos a los controles. Para tipos de origen de datos que proporcionan la notificación de cambios, el componente BindingSource comunica automáticamente los cambios entre el control y el origen de datos. Para los tipos de origen de datos que no proporcionan notificación de cambios, se facilitan eventos que le permiten provocar notificaciones de cambios. La siguiente lista muestra las características admitidas por el componente BindingSource:

Direccionamiento indirecto

El componente BindingSource proporciona un nivel de direccionamiento indirecto entre un control y un origen de datos. En lugar de enlazar un control directamente a un origen de datos, enlace el control a BindingSource y asocie el origen de datos a la propiedad DataSource del componente BindingSource.

Con este nivel de direccionamiento indirecto, puede cambiar el origen de datos sin restablecer el enlace del control. Esto le proporciona las funciones siguientes:

Administración de divisa

El componente BindingSource implementa la interfaz ICurrencyManagerProvider para controlar la administración de divisa para usted. Con la interfaz ICurrencyManagerProvider también puede tener acceso al administrador de divisa de un BindingSource, así como al administrador de divisa de otro BindingSource enlazado al mismo DataMember.

El componente BindingSource encapsula la funcionalidad CurrencyManager y expone los eventos y las propiedades CurrencyManager más comunes. La tabla siguiente describe algunos de los miembros relacionados con la administración de divisa.

  • Propiedad CurrencyManager
    Obtiene el administrador de divisa asociado a BindingSource.

  • Método GetRelatedCurrencyManager
    Si hay otro BindingSource enlazado al miembro de datos especificado, obtiene su administrador de divisa.

  • Propiedad Current
    Obtiene el elemento activo del origen de datos.

  • Propiedad Position
    Obtiene o establece la posición actual en la lista subyacente.

  • Método EndEdit
    Aplica los cambios pendientes al origen de datos subyacente.

  • Método CancelEdit
    Cancela la operación de edición actual.

Origen de datos como una lista

El componente BindingSource implementa las interfaces IBindingListView y ITypedList. Con esta implementación, puede utilizar el propio componente BindingSource como un origen de datos, sin ningún almacenamiento externo.

Cuando el componente BindingSource se asocia a un origen de datos, presenta el origen de datos como una lista.

La propiedad DataSource se puede establecer en varios orígenes de datos. Éstos incluyen tipos, objetos y listas de tipos. El origen de datos resultante se presentará como una lista. La tabla siguiente muestra algunos de los orígenes de datos comunes y la evaluación de la lista resultante.

Propiedad DataSource

Resultados de la lista

Una referencia nula (Nothing en Visual Basic)

Una IBindingList vacío de objetos. Al agregar un elemento, se establece la lista en el tipo del elemento agregado.

Una referencia nula (Nothing en Visual Basic) con DataMember establecido

No se admite; provoca ArgumentException.

Tipo de no lista u objeto de tipo "T"

Un IBindingList vacío de tipo "T".

Instancia de la matriz

IBindingList que contiene los elementos de la matriz.

Instancia de IEnumerable

IBindingList que contiene los elementos deIEnumerable

Instancia de la lista que contiene el tipo "T"

Una instancia de IBindingList que contiene el tipo "T".

Además, DataSource se puede establecer en otros tipos de lista, como IListSource y ITypedList, y BindingSource los controlará adecuadamente. En este caso, el tipo contenido en la lista debería tener un constructor predeterminado.

BindingSource como una IBindingList

El componente BindingSource proporciona los miembros para obtener acceso y manipular los datos subyacentes como una IBindingList. La tabla siguiente describe algunos de estos miembros.

Miembro

Descripción

Propiedad List

Obtiene la lista que es el resultado de la evaluación de las propiedades DataSource o DataMember.

Método AddNew

Agrega un nuevo elemento a la lista subyacente. Se aplica a los orígenes de datos que implementan la interfaz IBindingList y permiten agregar elementos (es decir, la propiedad AllowNew se establece en true).

Creación del elemento personalizada

Puede controlar el evento AddingNew para proporcionar su propia lógica de creación de elemento. El evento AddingNew se produce antes de agregar un nuevo objeto a BindingSource. Este evento se produce después de llamar al método AddNew, pero antes de agregar el nuevo elemento a la lista subyacente. Controlando este evento, puede proporcionar un comportamiento de creación de elemento personalizado sin derivar de la clase BindingSource. Para obtener más información, vea Cómo: Personalizar la forma de agregar elementos con el control BindingSource de formularios Windows Forms.

Creación de elemento transaccional

El componente BindingSource implementa la interfaz ICancelAddNew que habilita la creación de elemento transaccional. Después de crear provisionalmente un nuevo elemento mediante una llamada a AddNew, se puede confirmar que se agrega el elemento o revertir la acción de la siguiente manera:

  • El método EndNew confirmará explícitamente la inclusión pendiente.

  • Al realizar otra operación de colección, como una inserción, eliminación o movimiento, implícitamente confirmará la inclusión pendiente.

  • El método CancelNew revertirá la inclusión pendiente si todavía no se ha confirmado éste.

Compatibilidad con IEnumerable

El componente BindingSource permite enlazar controles a los orígenes de datos de IEnumerable. Con este componente, se puede enlazar a un origen de datos como un System.Data.SqlClient.SqlDataReader.

Cuando se asigna un origen de datos de IEnumerable al componente BindingSource, BindingSource crea una IBindingList y agrega el contenido del origen de datos de IEnumerable a la lista.

Compatibilidad en tiempo de diseño

Algunos tipos de objetos no pueden crearse en tiempo de diseño (por ejemplo, los objetos creados a partir de un generador de clases o los devueltos por un servicio Web). En ocasiones tendrá que enlazar los controles a estos tipos en tiempo de diseño, incluso aunque no exista ningún objeto en memoria al que se puedan enlazar los controles. Por ejemplo, puede necesitar etiquetar los encabezados de columna de un control DataGridView con los nombres de las propiedades públicas de su tipo personalizado.

Para que exista compatibilidad con este escenario, el componente BindingSource admite enlazarse a Type. Cuando asigna una clase Type a la propiedad DataSource, el componente BindingSource crea una BindingList<T> vacía de elementos Type. Cualquier control que enlace posteriormente al componente BindingSource estará avisado de la presencia de propiedades, o esquema, de su tipo en tiempo de diseño o de ejecución. Para obtener más información, vea Cómo: Enlazar un control de Windows Forms a un tipo.

Métodos ListBindingHelper estáticos

System.Windows.Forms.BindingContext, System.Windows.Forms.CurrencyManager y los tipos BindingSource comparten la lógica común para generar una lista a partir de un par DataSource/DataMember. Además, esta lógica común se expone públicamente para que lo utilicen los creadores del control y terceros en los métodos static siguientes:

Ordenar y filtrar con la interfaz IBindingListView

El componente BindingSource implementa la interfaz IBindingListView que extiende la interfaz IBindingList. IBindingList proporciona ordenación de columnas única y IBindingListView proporciona ordenación y filtrado avanzados. Con IBindingListView, puede ordenar y filtrar los elementos del origen de datos, si éste también implementa una de estas interfaces. El componente BindingSource no proporciona una implementación de la referencia de estos miembros. En su lugar, las llamadas se reenvían a la lista subyacente.

La tabla siguiente describe las propiedades que se utilizan para ordenar y filtrar.

Miembro

Descripción

Propiedad Filter

Si el origen de datos es una IBindingListView, obtiene o establece la expresión utilizada para filtrar las filas que se ven.

Propiedad Sort

Si el origen de datos es una IBindingList, obtiene o establece un nombre de columna utilizado para ordenar y la información del criterio de ordenación.

O bien

Si el origen de datos es una IBindingListView y admite la ordenación avanzada, obtiene varios nombres de columna utilizados para ordenar así como el criterio de ordenación.

Integración con BindingNavigator

Puede utilizar el componente BindingSource para enlazar cualquier control de formularios Windows Forms al origen de datos, pero el control BindingNavigator se designa específicamente para trabajar con el componente BindingSource. El control BindingNavigator proporciona una interfaz de usuario para controlar el elemento actual del componente BindingSource. De manera predeterminada, el control BindingNavigator proporciona botones que corresponden a los métodos de navegación en el componente BindingSource. Para obtener más información, vea Cómo: Explorar datos con el control BindingNavigator de formularios Windows Forms.

Vea también

Tareas

Cómo: Enlazar un control de Windows Forms a un tipo

Cómo: Reflejar las actualizaciones de los orígenes de datos en un control de Windows Forms con BindingSource

Referencia

Información general sobre el componente BindingSource

BindingSource

BindingNavigator

Otros recursos

BindingNavigator (Control, formularios Windows Forms)

Enlace de datos en Windows Forms

Controles que se utilizan en formularios Windows Forms