TEMA 9. CONTROLES WINDOWS DE ENLACE A DATOS 9.1. VINCULAR CONTROLES AL CONJUNTO DE DATOS · 2010....

19
9.1 Programación .NET (II). Controles Windows de enlace a datos TEMA 9. CONTROLES WINDOWS DE ENLACE A DATOS 9.1. VINCULAR CONTROLES AL CONJUNTO DE DATOS Hemos visto cómo recuperar datos de un origen de datos directamente mediante adaptadores de datos y lectores. Normalmente, en las aplicaciones, va a ser más frecuente que el usuario trabaje con los datos a través de una interfaz que les facilite la visualización y manipulación de los datos. Como desarrolladores vamos a contar con controles enlazables a datos para crear este tipo de interfaces. Ahora veremos cómo enlazar directamente controles a objetos contenedores de datos, lo que se conoce como Data Binding. Al enlazar los controles a los datos, no sólo vamos a poder visualizar los datos en los controles, sino que podremos contemplar su modificación y actualización. Así, el usuario podrá, desde un formulario de Windows interactuar con los datos desde los controles del formulario. Tipos de enlace a datos Simple. Un enlace a datos simple consiste en el enlace entre un control que muestra un único valor y los datos de un origen. Un ejemplo de este tipo de enlace sería un control TextBox enlazado a un objeto DataColumn de una tabla de un conjunto de datos.

Transcript of TEMA 9. CONTROLES WINDOWS DE ENLACE A DATOS 9.1. VINCULAR CONTROLES AL CONJUNTO DE DATOS · 2010....

Page 1: TEMA 9. CONTROLES WINDOWS DE ENLACE A DATOS 9.1. VINCULAR CONTROLES AL CONJUNTO DE DATOS · 2010. 7. 30. · 9.2 Programación .NET (II). Controles Windows de enlace a datos Complejo.

9.1Programación .NET (II). Controles Windows de enlace a datos

TEMA 9. CONTROLES WINDOWS DE ENLACE A DATOS

9.1. VINCULAR CONTROLES AL CONJUNTO DE DATOS

Hemos visto cómo recuperar datos de

un origen de datos directamente

mediante adaptadores de datos y

lectores. Normalmente, en las

aplicaciones, va a ser más frecuente

que el usuario trabaje con los datos a

través de una interfaz que les facilite la

visualización y manipulación de los

datos.

Como desarrolladores vamos a contar

con controles enlazables a datos para

crear este tipo de interfaces. Ahora

veremos cómo enlazar directamente

controles a objetos contenedores de datos, lo que se conoce como DataBinding.

Al enlazar los controles a los datos, no sólo vamos a poder visualizar los datos

en los controles, sino que podremos contemplar su modificación y

actualización. Así, el usuario podrá, desde un formulario de Windows

interactuar con los datos desde los controles del formulario.

Tipos de enlace a datos

Simple.

Un enlace a datos simple consiste en el enlace entre un control quemuestra un único valor y los datos de un origen.

Un ejemplo de este tipo de enlace sería un control TextBox enlazado a un

objeto DataColumn de una tabla de un conjunto de datos.

Page 2: TEMA 9. CONTROLES WINDOWS DE ENLACE A DATOS 9.1. VINCULAR CONTROLES AL CONJUNTO DE DATOS · 2010. 7. 30. · 9.2 Programación .NET (II). Controles Windows de enlace a datos Complejo.

Programación .NET (II). Controles Windows de enlace a datos9.2

Complejo.

Consiste en vincular a los datos un control que puede mostrar múltiplesvalores.

El ejemplo más típico de este tipo de enlace sería un control DataGridView

enlazado a un objeto DataTable de un conjunto de datos.

Principales elementos del enlace a datos

Vamos a poder enlazar datos a controles no sólo desde orígenes de datos,

sino que también podremos enlazar cualquier colección estructurada dedatos, como colecciones o propiedades de otros controles.

Todos los controles que admiten el enlace de datos tienen una colección de tipo

DataBindingsCollection, a la que podremos acceder a través de la

propiedad DataBindings. Esta colección está compuesta por objetos de la

clase Binding.

El objeto Binding nos va a permitir crear un enlace para un control. Al crear el

enlace indicaremos la propiedad del control que se enlaza, el objeto quecontiene los datos a enlazar y el campo del origen vinculado.

Una vez creado el enlace, podemos añadirlo a la colección de DataBindings del

control. A continuación puedes ver un sencillo ejemplo en el que se realiza esta

operación mediante código.

Me.SqlDataAdapter1.Fill(Me.DataSet11, "Agenda")

Dim enlace As Binding

'Enlazamos la propiedad Text con el campo Telefono de la tabla Agenda

enlace = New Binding("Text", Me.DataSet11.Tables("Agenda"), "Telefono")

'Añadimos el enlace a la colección de enlaces del TextBox.

Me.TextBox1.DataBindings.Add(enlace)

Page 3: TEMA 9. CONTROLES WINDOWS DE ENLACE A DATOS 9.1. VINCULAR CONTROLES AL CONJUNTO DE DATOS · 2010. 7. 30. · 9.2 Programación .NET (II). Controles Windows de enlace a datos Complejo.

9.3Programación .NET (II). Controles Windows de enlace a datos

Otro objeto interesante es BindingSource, que encapsula el origen dedatos de nuestro formulario y facilita enormemente la manipulación y

enlace de los datos.

Después veremos cómo a través del IDE de Visual Basic, mediante asistentes,

podremos enlazar de forma sencilla controles a datos en tiempo de diseño, así

como BindingSource nos ayudará a manipular el conjunto de datos.

Para comprender cómo funcionan estos elementos vamos a recurrir a un

ejemplo que ponga a trabajar a algunos de ellos.

Lo primero, creamos en una nueva aplicación para Windows el siguiente

formulario, inicializando paa cada control las propiedades que se indican:

Lo siguiente que hacemos es crear un origen de datos y un conjunto dedatos basado en él, a través del menú “Datos”

Page 4: TEMA 9. CONTROLES WINDOWS DE ENLACE A DATOS 9.1. VINCULAR CONTROLES AL CONJUNTO DE DATOS · 2010. 7. 30. · 9.2 Programación .NET (II). Controles Windows de enlace a datos Complejo.

Programación .NET (II). Controles Windows de enlace a datos9.4

Como origen de datos usamos la base de datos “nueva.mdf” anteriormente

creada para nuestra agenda. Llamamos al conjunto de datos “DataSetAgenda”

e incluimos en él la tabla “Agenda”.

Una vez que tenemos el conjunto de datos en nuestro proyecto,podemos vincular nuestros controles (las cajas de texto en nuestrocaso) a los campos de datos correspondientes.

Para ello, modificamos la propiedad DataBindings de cada caja de texto,

creando los enlaces a los campos correspondientes de la tabla “Agenda”.

A continuación vamos a vincular la propiedad Text de la caja de texto “Nif” con

el campo “Nif” de la tabla “Agenda” contenida en nuestro conjunto de datos. El

proceso con el resto de controles sería el mismo.

Page 5: TEMA 9. CONTROLES WINDOWS DE ENLACE A DATOS 9.1. VINCULAR CONTROLES AL CONJUNTO DE DATOS · 2010. 7. 30. · 9.2 Programación .NET (II). Controles Windows de enlace a datos Complejo.

9.5Programación .NET (II). Controles Windows de enlace a datos

Hacemos los siguiente:

Vemos las propiedades de la caja de texto “Nif”. Nos interesa la propiedad

DataBindings, si la desplegamos vemos lo siguiente:

Aparecen las propiedades que con más frecuencia se enlazan a datos, Tag y

Text. Pulsamos en (Avanzado) para ver la ventan de enlace de datos avanzado.

Page 6: TEMA 9. CONTROLES WINDOWS DE ENLACE A DATOS 9.1. VINCULAR CONTROLES AL CONJUNTO DE DATOS · 2010. 7. 30. · 9.2 Programación .NET (II). Controles Windows de enlace a datos Complejo.

Programación .NET (II). Controles Windows de enlace a datos9.6

En este diálogo veremos a la izquierda todas las propiedades enlazables de la

caja de texto “Nif”. Podemos seleccionar la que nos interese enlazar y después

seleccionar los datos a los que queramos enlazar mediante la lista desplegable

situada debajo de “Enlazar a datos:”

Elegimos el campo NIF de la tabla Agenda en nuestro conjunto de datos. Tras

hacer esta selección se creará automáticamente un objeto de tipo

BindingSource que servirá de fuente de datos para el formulario.

Tras vincular el primer control, se ha agregado al formulario una instancia delconjunto de datos (DataSetAgenda), una fuente de datos(AgendaBindingSource) y un adaptador de datos (AgendaTableAdapter).

Page 7: TEMA 9. CONTROLES WINDOWS DE ENLACE A DATOS 9.1. VINCULAR CONTROLES AL CONJUNTO DE DATOS · 2010. 7. 30. · 9.2 Programación .NET (II). Controles Windows de enlace a datos Complejo.

9.7Programación .NET (II). Controles Windows de enlace a datos

En la propiedad Text de la caja Nif ha aparecido una marca que indica su vínculo

a datos.

Page 8: TEMA 9. CONTROLES WINDOWS DE ENLACE A DATOS 9.1. VINCULAR CONTROLES AL CONJUNTO DE DATOS · 2010. 7. 30. · 9.2 Programación .NET (II). Controles Windows de enlace a datos Complejo.

Programación .NET (II). Controles Windows de enlace a datos9.8

Vinculamos los demás controles de igual forma, seleccionando como origen la

fuente de datos “AgendaBindingSource” recién creada.

Al finalizar, si probamos la aplicación, veremos que el formulario muestra los

datos del primer registro de la tabla “Agenda”.

Lo siguiente que vamos a hacer es preparar los botones de nuestro formulario

para que nos permitan desplazarnos por los registros de la tabla.

Para movernos por los registros del origen de datos nos valdremos delobjeto de clase BindingSource que tenemos en el formulario(“BindingSourceAgenda”). Este objeto tiene una propiedad llamada

Position que indica o establece el índice del elemento actual en la lista

subyacente, eso es los datos que engloba.

Para avanzar o retroceder esta posición existen cuatro métodos deBindingSource, de los que nos vamos a valer: MoveFirst, MoveLast,MovePrevious, MoveNext. Con ellos nos situamos en el primer registro, elúltimo, avanzamos uno o retrocedemos uno, respectivamente.

Entonces, si queremos que el botón

nos muestre los datos en el primer registro, añadiremos el siguiente código al

evento click del botón “Primero”:

Page 9: TEMA 9. CONTROLES WINDOWS DE ENLACE A DATOS 9.1. VINCULAR CONTROLES AL CONJUNTO DE DATOS · 2010. 7. 30. · 9.2 Programación .NET (II). Controles Windows de enlace a datos Complejo.

9.9Programación .NET (II). Controles Windows de enlace a datos

Para ver el último registro al pulsar el botón

añadimos el siguiente código al evento click del botón:

Avanzamos un registro pulsando

Retrocedemos un registro pulsando

Private Sub Primero_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles Primero.Click

AgendaBindingSource.MoveFirst()

End Sub

Private Sub Ultimo_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles Ultimo.Click

AgendaBindingSource.MoveLast()

End Sub

Private Sub Siguiente_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles Siguiente.Click

AgendaBindingSource.MoveNext()

End Sub

Private Sub Anterior_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles Anterior.Click

AgendaBindingSource.MovePrevious()

End Sub

Page 10: TEMA 9. CONTROLES WINDOWS DE ENLACE A DATOS 9.1. VINCULAR CONTROLES AL CONJUNTO DE DATOS · 2010. 7. 30. · 9.2 Programación .NET (II). Controles Windows de enlace a datos Complejo.

Programación .NET (II). Controles Windows de enlace a datos9.10

Ahora, si iniciamos la aplicación, ahora los botones nos permiten navegar por

los registros.

Como ves, usando BindingSource es muy sencillo moverse por los registros.

Basta invocar el método correspondiente para que todas las cajas detexto actualicen sus valores con los correspondientes campos delregistro actual.

Si editamos alguno de los campos en las cajas de texto, los cambios no seactualizarán automáticamente en el origen de datos. Puede parecerlo,

porque si nos desplazamos a otro registro y después volvemos al editado,

veremos los valores modificados. Sin embargo, si paramos la aplicación y la

volvemos a iniciar, observaremos que el registro conserva los valores

inalterados, no ha habido cambios en la base “nueva.mdf”.

Esto sucede porque hemos hecho cambios en el conjunto de datos, no enel propio origen de datos. Recuerda que, al acceder a los datos con DataSets,

estamos trabajando con un modelo de datos desconectado. Será necesario

realizar, con posterioridad a la edición, la actualización de los datos en la base

de datos.

¿Cómo guardar los cambios? Haremos unas modificaciones en la aplicación.

Añadimos tres botones, uno para guardar los cambios realizados otro para

añadir nuevos registros y otro para borrarlos. Así la aplicación quedará

completa y nos permitirá control total de los datos.

Llamamos “Guardar” al botón que se encargará de actualizar los cambios en la

base de datos, “Añadir” al que añadirá un nuevo elemento a la lista subyacente

del BindingSource y “Borrar” al botón que eliminará el elemento actual de la

lista subyacente.

Page 11: TEMA 9. CONTROLES WINDOWS DE ENLACE A DATOS 9.1. VINCULAR CONTROLES AL CONJUNTO DE DATOS · 2010. 7. 30. · 9.2 Programación .NET (II). Controles Windows de enlace a datos Complejo.

9.11Programación .NET (II). Controles Windows de enlace a datos

Nuestro formulario ya tiene un aspecto parecido al siguiente:

Preparamos el código necesario en estos nuevos botones para que la cosa

funcione.

El primer botón que vamos a preparar es el botón que añade un nuevo

elemento a la lista de registros que maneja nuestro BindingSource. Como ves,

basta con usar el método AddNew de “AgendaBindingSource”.

Para eliminar, existe el método RemoveCurrent, que elimina el elemento en

el que estemos situados actualmente. También existen métodos para eliminar

un elemento concreto (Remove) o para eliminar el elemento que ocupe cierto

índice de la lista (RemoveAt).

Private Sub Añadir_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles Añadir.Click

AgendaBindingSource.AddNew()

End Sub

Page 12: TEMA 9. CONTROLES WINDOWS DE ENLACE A DATOS 9.1. VINCULAR CONTROLES AL CONJUNTO DE DATOS · 2010. 7. 30. · 9.2 Programación .NET (II). Controles Windows de enlace a datos Complejo.

Programación .NET (II). Controles Windows de enlace a datos9.12

Todo esto está muy bien, pero, si pruebas la aplicación, verás que los cambios

siguen sin reflejarse en la base de datos. Al pulsar el botón que elimina el

registro este desaparecerá en nuestra aplicación, pero seguirá en la base de

datos. Y si añadimos un nuevo elemento con el botón “Añadir” nos aparecerán

las cajas de texto en blanco para añadir nuevos datos, pero… éstos no llegan

“solos” a la base de datos.

Queda pues, el último detalle. Tenemos que volcar de vuelta los datosmanejados en la aplicación a la base de datos. En el tema anterior ya

comentamos que es el adaptador de datos el que se encarga de ello. En el

código correspondiente al evento click del botón “Guardar” puedes ver que es

el adaptador de datos el que actualiza los datos en el origen, desde los datos

contenidos en el conjunto de datos que maneja la aplicación.

Private Sub Borrar_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles Borrar.Click

AgendaBindingSource.RemoveCurrent()

End Sub

Private Sub Actualizar_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles Actualizar.Click

'Con EndEdit terminamos cualquier edición que pudiera estar produciéndose

AgendaBindingSource.EndEdit()

'Usamos Try...Catch para capturar posibles errores producidos durante la

' actualización

Try

'Actualiza la BD!

AgendaTableAdapter.Update(DataSetAgenda.Agenda)

Catch ex As Exception

'Se produjo un error

MessageBox.Show(ex.Message, "Excepción", MessageBoxButtons.OK, _

MessageBoxIcon.Warning)

Exit Sub

End Try

MessageBox.Show("Se guardaron los cambios", "Actualizar", _

MessageBoxButtons.OK, MessageBoxIcon.Information)

End Sub

Page 13: TEMA 9. CONTROLES WINDOWS DE ENLACE A DATOS 9.1. VINCULAR CONTROLES AL CONJUNTO DE DATOS · 2010. 7. 30. · 9.2 Programación .NET (II). Controles Windows de enlace a datos Complejo.

9.13Programación .NET (II). Controles Windows de enlace a datos

Este ejemplo nos ha permitido ver cómo podemos enlazar controles a un origen

de datos, y cómo, desde estos controles, podemos editar, añadir y eliminar

datos del mismo.

Lo hemos hecho de una forma bastante fácil, pero se pueden utilizar soluciones

aún más sencillas y que nos pueden proporcionar resultados con apariencia y

opciones más avanzadas. Son controles especialmente pensados paratrabajar con datos.

9.2. CONTROLES ESPECÍFICOS PARA TRABAJAR CON DATOS

Como ya hemos mencionado antes, existen controles especialmente

preparados para tratar datos. A continuación vamos a describir el

funcionamiento de dos de ellos: el control DataGridView (o rejilla) y el control

BindingNavigator.

El primero sirve para presentar registros de datos en una tabla o rejilla y el

segundo nos permitirá navegar entre los registros de forma similar al ejemplo

que viste en el apartado anterior.

Control BindingNavigator

Este control funciona exactamente igual que los botones que nos permitían

movernos por los registros en el ejemplo del apartado anterior.

Consta de una barra de herramientas o ToolStrip, compuesta inicialmente por

dos controles, TextBox y Label, para indicar la possición del registro actual, y

botones para recorrer, añadir y eliminar registros. Podemos decir que setrata de un control ToolStrip especializado para navegar y manipularcontroles enlazados a datos en el formulario.

A continuación mostramos los controles que incluye la barra de herramientas

del control BindingNavigator. Podremos añadir controles creados por nosotros

a esta barra, tal como explicábamos para cualquier control ToolStrip.

Page 14: TEMA 9. CONTROLES WINDOWS DE ENLACE A DATOS 9.1. VINCULAR CONTROLES AL CONJUNTO DE DATOS · 2010. 7. 30. · 9.2 Programación .NET (II). Controles Windows de enlace a datos Complejo.

Programación .NET (II). Controles Windows de enlace a datos9.14

La propiedad principal de este control es BindingSource, que establece el

origen de los datos.

Para probar este control podemos modificar el ejemplo del apartado anterior

sustituyendo los botones que habíamos preparado para navegar porlos registros por un control BindingNavigator.

Por sí solo, este control no guardará los cambios realizados en el origen de

datos, por lo que vamos a incorporar un nuevo botón a la barra delBindingNavigator que guarde los cambios.

Como supondrás, el código que escribiremos en el evento click de este nuevo

ToolStripButton será el mismo que se ejecutaba con el click de nuestro primitivo

botón.

Page 15: TEMA 9. CONTROLES WINDOWS DE ENLACE A DATOS 9.1. VINCULAR CONTROLES AL CONJUNTO DE DATOS · 2010. 7. 30. · 9.2 Programación .NET (II). Controles Windows de enlace a datos Complejo.

9.15Programación .NET (II). Controles Windows de enlace a datos

Vayamos por partes. Tras añadir el control BindingNavigator a nuestro

formulario deberemos asignar su propiedad BindingSource a la fuente de

datos del formulario: AgendaBindingSource. Así quedará vinculado con

nuestros datos.

Con sólo hacer esto, los botones del control BindingNavigator tendránfuncionalidad completa: ir al primer registro, al último, avanzar,retroceder, añadir y borrar el registro actual del conjunto de datos.

Page 16: TEMA 9. CONTROLES WINDOWS DE ENLACE A DATOS 9.1. VINCULAR CONTROLES AL CONJUNTO DE DATOS · 2010. 7. 30. · 9.2 Programación .NET (II). Controles Windows de enlace a datos Complejo.

Programación .NET (II). Controles Windows de enlace a datos9.16

Ahora añadiremos un botón al control BindingNavigator, tal como haríamos en

un control ToolStrip, para guardar los cambios realizados, en el origen de los

datos. Lo llamamos “GuardarCambios”.

El código para el evento click de este botón será, como ya hemos dicho, similar

al que elaboramos para el ejemplo anterior:

Como ves, disponiendo de una fuente de datos o BindingSource y un control

BindingSourceNavigator en nuestro formulario, resulta muy sencillo presentar,

manipular y navegar por información procedente de un origen de datos.

Private Sub GuardarCambios_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles GuardarCambios.Click

AgendaBindingSource.EndEdit()

Try

'Actualiza la BD!

AgendaTableAdapter.Update(DataSetAgenda.Agenda)

Catch ex As Exception

MessageBox.Show(ex.Message, "Excepción", MessageBoxButtons.OK, _

MessageBoxIcon.Warning)

Exit Sub

End Try

MessageBox.Show("Se guardaron los cambios", "Actualizar", _

MessageBoxButtons.OK, MessageBoxIcon.Information)

End Sub

Page 17: TEMA 9. CONTROLES WINDOWS DE ENLACE A DATOS 9.1. VINCULAR CONTROLES AL CONJUNTO DE DATOS · 2010. 7. 30. · 9.2 Programación .NET (II). Controles Windows de enlace a datos Complejo.

9.17Programación .NET (II). Controles Windows de enlace a datos

Control DataGridView

Este control nos va a permitir presentar los datos en forma de tabla.

Podremos, además, personalizar su apariencia y comportamiento en función

de nuestras necesidades.

Entre otras cosas, será posible permitir al usuario reordenar los datos, añadir,

editar, eliminar datos o modificar el aspecto de la tabla (alto de filas, ancho de

comunas).

De igual forma que pasaba con el control BindingNavigator, podremosvincular un DataGridView con un origen de datos a través de supropiedad DataSource, la cual podremos establecer en tiempo dediseño o durante la ejecución mediante programación.

Si el conjunto de datos seleccionado contiene más de una tabla, podremos

especificar una en la propiedad DataMember.

En tiempo de diseño, la forma más sencilla de configurar la rejilla será a través

de su ventana de tareas, desde donde podremos seleccionar su fuente de

datos, las columnas a visualizar y establecer las acciones sobre los datos

disponibles, entre otras.

Page 18: TEMA 9. CONTROLES WINDOWS DE ENLACE A DATOS 9.1. VINCULAR CONTROLES AL CONJUNTO DE DATOS · 2010. 7. 30. · 9.2 Programación .NET (II). Controles Windows de enlace a datos Complejo.

Programación .NET (II). Controles Windows de enlace a datos9.18

Veamos ahora un ejemplo de cómo configurar un control DataGridView para

que muestre los datos de un conjunto de datos.

Una vez que hemos añadido el control DataGridView a un formulario, lo más

fácil es recurrir a su ventana de tareas.

Mediante la opción “Elegir origen de datos” podremos vincular el control con el

origen de datos deseado.

Podremos elegir las columnas de la tabla que queremos mostrar con “Editar

columnas...” y “Agrega columna...”.

Además, seleccionaremos aquí si queremos que el usuario tenga la opción de

agregar, editar o eliminar registros en la tabla, así como de ordenar los mismos

por la columna deseada.

Elegimos nuestro origen de datos:

Page 19: TEMA 9. CONTROLES WINDOWS DE ENLACE A DATOS 9.1. VINCULAR CONTROLES AL CONJUNTO DE DATOS · 2010. 7. 30. · 9.2 Programación .NET (II). Controles Windows de enlace a datos Complejo.

9.19Programación .NET (II). Controles Windows de enlace a datos

Igual que ocurría al vincular una caja de texto con un origen de datos, el

vínculo con datos del control DataGridView ha provocado que se cree

automáticamente un control BindingSource (“AgendaBindingSource”).

Como ves, enlazar un control rejilla con un conjunto de datos es bastante

sencillo. No debemos olvidar que, al igual que BindingNavigator, este control

por sí solo no actualiza los datos en el origen, por lo que será necesario que el

programador incorpore los métodos necesarios para realizar esta tarea.

Es posible combinar el uso de la rejilla con el control navegador,consiguiendo así desplazarnos por las filas de la tabla rápidamente. Esto es

muy útil para grandes tablas de datos. Además, nos facilita añadir y eliminar

filas de la tabla con los botones que incorpora.

Para usar el BindingNavigator junto al DataGridView bastará con añadirlo al

formulario y establecer su propiedad BindingSource a la misma fuente de datos

a la que está vinculada la rejilla. A partir de ese momento los datos mostrados

en la rejilla estarán sincronizados con las acciones que realicemos con el

navegador.

Ejemplo. en el manejador del evento CellEndEdit de la rejilla

podemos escribir el siguiente código:

'Finaliza la edición de la celda

Me.AgendaBindingSource.EndEdit()

'Actualiza en el origen a través del adaptador

Me.AgendaTableAdapter.Update(Me.DataSet11.Agenda)