Compartir a través de


Arquitectura del componente BindingSource

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

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

  • Habilita el enlace en tiempo de diseño a objetos empresariales.

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

  • Simplifica la creación de una lista que admita la IBindingList interfaz proporcionando una notificación de cambios de lista para los orígenes de datos que no admiten de forma nativa la notificación de cambios de lista.

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

  • 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 Windows Forms relacionados con los datos, específicamente los controles BindingNavigator y DataGridView.

Por estos motivos, el BindingSource componente es la manera preferida de enlazar los controles de Windows Forms a los orígenes de datos.

Características de BindingSource

El BindingSource componente 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 sin casi ninguna codificación por su parte.

El BindingSource componente lo logra proporcionando una interfaz coherente para acceder a muchos tipos diferentes de orígenes de datos. Esto significa que usas el mismo procedimiento para vincular a cualquier tipo. Por ejemplo, puede adjuntar la propiedad DataSource a un DataSet o a un objeto de negocio y, en ambos casos, se usa el mismo conjunto de propiedades, métodos y eventos para manipular el origen de datos.

La interfaz coherente proporcionada por el BindingSource componente simplifica considerablemente el proceso de enlace de datos a los controles. En el caso de los tipos de origen de datos que proporcionan notificaciones de cambios, el BindingSource componente comunica automáticamente los cambios entre el control y el origen de datos. En el caso de los tipos de origen de datos que no proporcionan notificaciones de cambios, se proporcionan eventos que permiten generar notificaciones de cambios. En la lista siguiente se muestran las características admitidas por el BindingSource componente:

Indirección

El BindingSource componente 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, se enlaza el control a BindingSourcey se adjunta el origen de datos a la BindingSource propiedad del DataSource componente.

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

Administración de monedas

El componente BindingSource implementa la interfaz ICurrencyManagerProvider para gestionar la administración de monedas por usted. Con la ICurrencyManagerProvider interfaz, también puede acceder al administrador de divisas para un BindingSource, además del administrador de divisas para otro BindingSource enlazado al mismo DataMember.

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

CurrencyManager Propiedad obtiene el administrador de divisas asociado con BindingSource.

GetRelatedCurrencyManager método Si hay otro BindingSource enlazado al miembro de datos especificado, obtiene su administrador de monedas.

Current property Obtiene el elemento actual del origen de datos.

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

EndEdit método Aplica cambios pendientes al origen de datos subyacente.

CancelEdit method Cancela la operación de edición actual.

Origen de datos como lista

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

Cuando el BindingSource componente está asociado a un origen de datos, expone el origen de datos como una lista.

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

Propiedad Fuente de Datos Enumerar los resultados
Referencia nula (Nothing en Visual Basic) Un IBindingList vacío de objetos. Al agregar un elemento, se establece la lista en el tipo del elemento agregado.
Referencia nula (Nothing en Visual Basic) con DataMember establecido. No soportado; eleva ArgumentException.
Tipo que no es una lista o objeto de tipo "T" Un IBindingList vacío de tipo "T".
Instancia de matriz Un IBindingList que contiene los elementos de la matriz.
IEnumerable instancia Un IBindingList que contiene los IEnumerable elementos
Instancia de lista que contiene un elemento del tipo "T" Instancia IBindingList que contiene el tipo "T".

Además, DataSource se puede configurar en otros tipos de lista, como IListSource y ITypedList, y BindingSource los controlará adecuadamente. En este caso, el tipo contenido en la lista debe tener un constructor sin parámetros.

BindingSource como IBindingList

El componente BindingSource proporciona miembros para acceder y manipular los datos subyacentes como un IBindingList. En la tabla siguiente se describen algunos de estos miembros.

Miembro Descripción
Propiedad List Obtiene la lista resultante 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 IBindingList interfaz y permiten agregar elementos (es decir, la AllowNew propiedad se establece en true).

Creación de elementos personalizados

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

Creación de elementos transaccionales

El componente BindingSource implementa la interfazICancelAddNew, que permite la creación de elementos transaccionales. Después de crear provisionalmente un nuevo elemento mediante una llamada a AddNew, la adición se puede confirmar o revertir de las maneras siguientes:

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

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

  • El CancelNew método revertirá la adición pendiente si el método aún no ha sido confirmado.

Compatibilidad con IEnumerable

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

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

compatibilidad con Design-Time

Algunos tipos de objeto no se pueden crear en tiempo de diseño, como objetos creados a partir de una clase de fábrica o objetos devueltos por un servicio web. A veces, es posible que tenga que enlazar los controles a estos tipos en tiempo de diseño, aunque no haya ningún objeto en memoria al que los controles puedan enlazarse. Por ejemplo, puede que tenga que etiquetar los encabezados de las columnas de un DataGridView control con los nombres de las propiedades públicas del tipo personalizado.

Para admitir este escenario, el componente BindingSource admite la vinculación a un Type. Al asignar un Type a la DataSource propiedad, el BindingSource componente crea un BindingList<T> vacío de Type elementos. Los controles que posteriormente se enlacen al componente BindingSource serán informados de la presencia de las propiedades o el 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 formularios Windows Forms a un tipo.

Métodos Estáticos de ListBindingHelper

Los tipos System.Windows.Forms.BindingContext, System.Windows.Forms.CurrencyManager y BindingSource comparten una lógica común para generar una lista a partir de una pareja DataSource/DataMember. Además, esta lógica común se expone públicamente para que la usen los autores de controles y otros terceros en los métodos siguientes static :

Ordenar y filtrar con la interfaz IBindingListView

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

En la tabla siguiente se describen las propiedades que se usan para ordenar y filtrar.

Miembro Descripción
Propiedad Filter Si el origen de datos es , IBindingListViewobtiene o establece la expresión usada para filtrar qué filas se ven.
Propiedad Sort Si el origen de datos es un IBindingList, se obtiene o establece el nombre de una columna utilizada para la ordenación y la información del criterio de ordenación.

-o-

Si el origen de datos es un IBindingListView y admite la clasificación avanzada, obtiene múltiples nombres de columna utilizados para la ordenación y el orden de clasificación.

Integración con BindingNavigator

Puede usar el BindingSource componente para enlazar cualquier control de Windows Forms a un origen de datos, pero el BindingNavigator control está diseñado específicamente para trabajar con el BindingSource componente. El BindingNavigator control proporciona una interfaz de usuario para controlar el BindingSource elemento actual del componente. De forma predeterminada, el BindingNavigator control proporciona botones que corresponden a los métodos de navegación del BindingSource componente. Para obtener más información, vea Cómo: Navegar datos con el control BindingNavigator de Windows Forms.

Consulte también