Inicio | Contacto | Mapa Sitio     
HomeTutoriales Fotos Contacto
tutoriales > Databinding .NET

Databinding .NET

Databinding Databinding es una característica del Framework .NET que permite que elementos visuales estén conectados a datasources tales como dataset o dataview. Estos elementos pueden ser Textbox, Datagrid, etc. Es una conexión de ida y vuelta en la cual cualquier cambio efectuado en cualquiera de los dos estará reflejado automáticamente.

Ventajas del Databinding

1. Databinding facilita desarrollar aplicaciones más rápidamente ya que se escribe mucho menos código para desarrollar una aplicación.
2. .NET automáticamente escribe código databinding en el fondo (se puede ver en la parte “Windows Generated Code”). Aquí podremos modificar el código según nos sea necesario
3. Se controla el proceso de databinding con los eventos

Desventajas del Databing

1. Se podría escribir código más optimizado
2. Para obtener un código flexible se debería tener los datos desenlazados.

Los controles de .NET puede tener muchas propiedades que puede ser enlazadas a un DataSource. Cada una de las propiedades enlazadas a datos (databound) tiene una objeto binding (lazo).
Ya que un control puede tener muchos objetos binding el control tiene una colección (instancia de ControlBindings Collection class) de todos los objetos binding. Es importante saber que propiedades del mismo control pueden ser enlazadas a diferentes datasources.

Cada uno de los objetos enlazados se comunica a un CurrencyManager o a un PropertyManager. CurrencyManager y PropertyManager derivan de la clase base BindingManagerBase.

El propósito de la clase BindingManagerBase es mantener la concurrencia entre el datasource y el control.

El currencyManager se implementa cuando el datasource implementa la interface ILIST, tales como Dataview, Dataset, Arraylist.

El PropertyManager se usa cuando el datasource es una instancia de un clase definida por el usuario. La propiedad del control esta enlazada con la propiedad expuesta por este objeto. PropertyManager solo se usa para simple databinding.

En un enlazado simple de datos (Property Manager) solo un valor puede verse por un control cada vez, por ejemplo un TextBox. En Databinding complejo (CurrencyManager) más de un valor del DataSource puede verse (Datagrid).

Como regla si se quiere usar la clase como un dataSource se debe usar CurrencyManager, la clase es un contenedor de datos. Sin embargo si lo que se quiere es enlazar las propiedades expuestas por la clase se debe de usar el propertyManager.

Ya que un formulario puede contener muchos controles y cada uno enlazada a un datasource diferente, una clase se necesita para manejar el objeto currencyManager y el PropertyManager.

Por lo tanto cada form de Windows tiene un objeto BindingContext asociado con el. El objeto BindingContext es una collección de objetos CurrencyManager y PropertyManagers.

En resumen:
  • Un control puede tener muchas propiedades que se pueden enlazar
  • Cada propiedad databound del control tienen un objeto binding asociado
  • Todos los objetos binding están controlados por la propiedad del control databinding que es una instancia de la clase ControlBindingCollection.
  • Cada objeto databinding se comunica con el objeto currencyManager o PropertyManager.
  • CurrencyManager y PropertyManager derivan de la clase BindingManagerBase
  • El Objeto BindingContext es una colleción de objetos CurrencyManager y PropertyManager.
  • Por defecto un formulario contiene un objeto BindingContext. Más objetos BindingManagerBase son creados y añadidos a la colección BindingContext.
  • Cada CurrencyManager o PropertyManager encapsulan el acceso a datos a un datasource por objeto BindingContext

Controlando Databinding

La real flexibilidad y poder del databinding en .NET is que las clases del BindingManagerBase suporta eventos. Esto nos permite cambiar los datos que se pasan entre el control y el datasource.

El objeto binding expone dos eventos: Format y Parse. El evento format es disparado dos veces. El primero cuando los datos son pasados del datasource al control y el sengundo cuando el datasource cambia y los datos son actualizados en el control.
El evento parse es disparado una vez cuando los datos se pasan desde el control al datasource.
El CurrencyManager (derivada desde el BindingManagerBase) expone tres eventos: CurrencyChanged, PositionChanges and ItemChanged.
CurrentChanged se dispara cuando los datos enlazados cambian.
PositionChanges se dispara cuando la propiedad posición cambia.
ItemChanges se dispara cuando el elemento actual cambia.
El propertyManager solo soporta 2 eventos: CurrentChanged y positionChanged

Estos eventos permiten al usuario tener un supercontrol sobre el flujo de datos del control al datasource y viceversa.

Ejemplo:
‘’El objeto binding debe ser declarado con la palabra “WithEvent” para poder usar los eventos
Dim WithEvents oBinding As Binding

Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs)Handles MyBase.Load
   ‘’Se añade el control al binding
   oBinding = New Binding("Text", oDt, "GetDateTime")
   txt1.DataBindings.Add(oBinding)

   ‘’En este caso no se crea ningún objeto binding y por lo tanto no se disparará ningún evento.
   txt2.DataBindings.Add("Text", oDt, "GetDateTime")
End Sub

‘’Este evento se dispara justo antes de que el txt1 enseñe los datos.
Private Sub oBinding_Format(ByVal sender As Object, ByVal e As System.Windows.Forms.ConvertEventArgs) Handles oBinding.Format
     e.Value = Format(e.Value, "MM/dd/yy")
End Sub

Binding con los formularios sin bindingContext

En el framework .Net cualquier propiedad que contenga un simple control puede ser simple-enlazado con un valor en un datasource.
Binding se puede realizar en diseño o en ejecución. En cualquier de las dos situaciones se debe especificar tres valores: el nombre de la propiedad a enlazar, el datasource y un una ruta de navegación dentro del datasource a un único valor.

La ruta de navegación consiste en un jerarquía delimitado por nombres. Por ejemplo, para referenciar la columna idProducto de la tabla producto, la ruta de navegación seria Productos.ProductoID.

La pantalla de propiedades de Visual Studio .NET contiene una sección de Data Bindings en la que se visualizan las propiedades que más normalmente se enlazan. Otras propiedades se pueden obtener a través de la sección avanzada.

Enlazar una propiedad

1. Seleccionar el control
2. En la ventana de propiedades seleccionar databindings y buscar el datasource
3. Enlazar el control con la propiedad de datos que se desee

Enlazar en tiempo de ejecución un simple binding

Este código primero declara un nuevo objeto binding, después lo inicializa pasando el nombre de la propiedad, el datasource y la ruta de la propiedad al constructor. Finalmente se añade a la colección usando el add method.
   Dim newBinding As System.Windows.Forms.Binding    newBinding = New system.Windows.Forms.Binding("Text", Me.dsMaster1,Categories.Description")    Me.tbCategoryDescription.DataBindings.Add(newBinding)

Binding Complejos

Los controles enlazados complejos contienen múltiples datos. Los ejemplos más comunes de binding complejos son Listbox o Combobox pero cualquier control que permita valores múltiples puede ser enlazado complejamente.
Lo más normal es que los controles se enlacen con la propiedad datasource directamente.
Los más comunes de los controles enlazados como son el listbox, datagrid, combo también exponen un Display Member property, que determina que enseñara el control. En el caso de un listbox o combobox la propiedad display member se resigna a un valor mientras que el datagrid pueden ser múltiples valores por ejemplo todos los valores de un datatable.
Enlazar con propiedades

1. Seleccionar el control
2. En la ventana de propiedades seleccionar dataSorce
3. Enlazar el control con la propiedad de datos que se desee


Enlazar en tiempo de ejecución
Me.DataGrid1.DataSource=me.DataSet11

Con CurrencyManager

El objeto currenyManager es fundamental para el databinding. A través de sus propiedades y métodos y eventos el objeto CurrencyManager controla el enlace entre el origen de los datos y los controles en los que se visualizan los datos.

Las propiedades del CurrencyManager son:
1. Bindings: La colección de objetos enlazados que controles el currencymanager
2. Count: El número de rows manejado por el currencyManager
3. Current: El valor de objeto actual del origen de datos
4. List: La lista controlada por el currencyMager
5. Position: Especifica la posición dentro del currencyManager

Las propiedades bindings y list definen la relación entre el origen de datos y los controles enlazados. Las propiedades enlazadas, las cuales devuelven un objeto de tipo BindingsCollection, contienen el objeto enlazada para cada propiedad de control individual que esta enlazada al origen de datos.

La propiedad list devuelve una referencia al origen de datos que es controlada por el CurrencyManager. La propiedad lista devuelve una referencia a la interface IList.

La propiedad de Count devuelve el número de rows controlada por el currencyManager

La propiedad Current devuelve el valor de la row actual es read only

La propiedad position accede a un registro en el currencyManager y nos permite modificar el registro, lo mismo que current pero sin ser readOnly
Public Event CurrencyGuardar(ByVal mycurrencyManager As CurrencyManager)
 ''Añadir el currency manager
  myCurrencyManager = CType(Me.BindingContext(frm.explora.dtNewExplora.Tables(0)), CurrencyManager)

  myCurrencyManager.count
  mycurrencyManager.current(“nombreColumna”)

Métodos del currencyManager

AddNew: Añade un Nuevo a la lista
CancelCurrentEdit: Cancel la edición actual
EndCurrentEdit: Actualizar, confirma la edición actual
Refresh: Vuelve visualizar el contenido de los datos enlazados. Solo se usa con controles que no soporten notificación de cambio tales como colecciones y arrays
RemoveAt(Index): Borra el artículo de la posición especificada en el índice.
ResumeBinding: Continúa con el enlace y validación de datos después de la llamada al suspendBinding.
SuspendBinding: Temporalmente suspende el enlace de datos y la validación de datos

Eventos del currencyManager

CurrentChanged: Ocurre cuando el valor enlazada cambia
ItemChanged: Ocurre cuando el artículo cambia
PositionChanged: Ocurre cuando la posición de la propiedad cambia

La diferencia entre CurrentChanged y ItemChanges es que los argumentos del evento son diferentes. En ItemChanged recibe un argumento del tipo ItemChangedEventArgs que incluye una propiedad índice.

Binding Object

El objeto Binding representa el enlace entre un control de enlace simple y el currencyManager. La colección Databinding del control contiene un Objeto bindining para cada propiedad enlazada.

Propiedades del objeto binding

Las propiedades son todas read-only

BindingManagerBase: Controla el objeto binding, devuelve el CurrencyManager o el propertyManager que controla el objeto binding.
BindingMemberInfo: Devuelve información acerca de este objeto basado en el DataMember especificado por le constructor. Devuelve también la ruta de navegación
   BindingField: La propiedad de origen de datos especificada por la ruta de navegación
   BindingMember: La ruta completa del objeto binding, Categories.CategoryProducts.ProductID
   BindingPath: La ruta, sin incluir, hasta el datasource "Categories.CategoryProducts."

Control: El control enlazado
DataSource: El datasource del enlace
IsBinding: Inidica si el control esta enlazado. Devuelve siempre true si no se ha llamado a SuspendBinding
PropertyName: La propiedad enlazada al control

Eventos del objeto Binding

Los eventos del objeto binding son format and parse. Se usan para controlar como son los datos presentados al usuario.

Format: Ocurre cuando los datos se pasan desde el datasource al control o viceversa
Parse: Ocurre cuando los datos se pasan desde el control al datasource

Resumen:

Simple enlace de datos en tiempo Ejecución:
  Crear un nuevo objeto enlazado y añadir a la colección databiding:
    newBinding = New Binding(, , )
    myControl.DataBindings.Add(newBinding)

Crear un control complejo en tiempo de ejecución

Especificar el datasource y el miembro de presentación:
myControl.DataSource = myDataSource
myControl.DisplayMember = "field"

Usar el currencyManager

Obtener una referencia al currencyManager especificando el datasource y la ruta y entonces referenciar sus propiedades:
myCM = Me.BindingContext(, ) MessageBox.Show(myCM.Count.ToString())



Errores, Recomendanciones, Omisiones u otra información por favor contacte conmigo
 
Directorio