Está en la página 1de 44

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

Introduccin
ADO .NET es la nueva versin del modelo de objetos ADO (ActiveX Data Objetos), es decir, la estrategia que ofrece Microsoft para el acceso a datos. ADO .NET ha sido ampliado para cubrir toda las necesidades que ADO no ofreca, ADO .NET est diseado para trabajar con conjuntos de datos desconectados, lo que permite reducir el trfico de red. ADO .NET utiliza XML como formato universal de trasmisin de los datos. ADO .NET posee una serie de objetos que son los mismos que aparecen en la versin anterior de ADO, como puede ser el objeto Connection o Command, e introduce nuevos objetos tales como el objeto DataReader, DataSet o DataView. ADO .NET se puede definir como: Un conjunto de interfaces, clases, estructuras y enumeraciones que permiten el acceso a los datos desde la plataforma .NET de Microsoft. Supone una evolucin lgica del API ADO tradicional de Microsoft. Permite un modo de acceso desconectado a los datos que pueden provenir de mltiples fuentes de datos de diferente arquitectura de almacenamiento. Soporta un completo modelo de programacin y adaptacin basado en el estndar XML.

Asesora didctica 1
Durante este mes usted deber revisar el presente compendio con los temas relacionados con la programacin, adems en la Seccin CONTENIDOS encontrar ejercicios realizados por m; adicionalmente dispone de este material de apoyo que le servir de referencia para la elaboracin de la actividad correspondiente a este mes. Aplicaciones de estilo MDI Una aplicacin de tipo o estilo MDI (Multiple Document Interface), Interfaz de Documento Mltiple, se compone de un formulario principal, tambin denominado formulario MDI, que actuar como contenedor de otros formularios (documentos) abiertos durante el transcurso del programa, denominados formularios hijos o secundarios MDI. Como ejemplos de este tipo de aplicacin tenemos PowerPoint o Access. A diferencia de lo que ocurra en versiones anteriores de VB, un formulario MDI admite los mismos controles que un formulario normal, aunque dada su orientacin de formulario contenedor, se recomienda limitar los controles en un MDI a los estrictamente necesarios. El men es el ejemplo ms identificativo de control idneo para un formulario MDI, ya que a travs de sus opciones, podremos abrir los formularios hijos de la aplicacin. Seguidamente describiremos el proceso de creacin de un proyecto que contenga un formulario MDI y dos formularios hijos, as como el comportamiento de estos ltimos cuando son abiertos dentro del formulario padre MDI. Este ejemplo tiene el nombre MDIPru y se debe hacer clic aqu para acceder al mismo. Una vez creado el nuevo proyecto, cambiaremos el nombre del formulario por defecto a frmPrincipal. Para conseguir que este formulario tenga el comportamiento de un contenedor MDI, debemos asignar el valor True a su propiedad IsMdiContainer. Tambin debemos establecer a este formulario como inicial en las propiedades del proyecto.

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

Ahora pasaremos a la creacin de los formularios hijos del MDI. El primero, frmCarta, permite la escritura en un TextBox multilnea, cuyo contenido podremos grabar a un archivo en disco. La Figura 291 muestra este formulario.

Figura 291. Formulario hijo de MDI para escribir un texto largo El cdigo del botn que realiza la grabacin del texto lo podemos ver en el Cdigo fuente 497. Debemos importar el espacio de nombres System.IO, ya que en esta clase de formulario hacemos uso de los tipos File y StreamWriter.

Cdigo fuente 497 El otro formulario hijo, frmInfo, muestra la fecha y hora actuales; esta ltima es actualizada a travs del control Timer tmrTiempo (Figura 292).

Figura 292. Formulario hijo de MDI para mostrar fecha y hora actuales

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

El Cdigo fuente 498 muestra las instrucciones que se ejecutan en el evento Tick del control Timer.

Cdigo fuente 498 El siguiente paso consiste en crear un men para poder abrir los formularios hijos a travs de sus opciones (Figura 293).

Figura 293. Men del formulario MDI En las opciones Carta e informacin del men, instanciaremos un objeto del formulario correspondiente, teniendo en cuenta que para conseguir que dichos formularios se comporten como hijos del MDI, debemos asignar a su propiedad MdiParent, la instancia actual del formulario en ejecucin, es decir, Me. Veamos este punto en el Cdigo fuente 499.

Cdigo fuente 499

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

En la Figura 294 mostramos el formulario MDI en ejecucin, conteniendo a los formularios hijos dependientes.

Figura 294. Aplicacin MDI en ejecucin Controles de cuadros de dilogo del sistema Del conjunto de controles que nos ofrece la ventana Cuadro de herramientas del IDE, existe un grupo que nos permite el acceso a los cuadros de dilogo estndar del sistema operativo, esto es, los cuadros de seleccin de color, tipo de letra o fuente, apertura-grabacin de archivo, etc. Para ilustrar el uso de algunos de estos controles, vamos a crear un proyecto de ejemplo con el nombre Dilogos Sistema, en el que describiremos su modo de uso en los aspectos de diseo y codificacin. Crearemos pues, un nuevo proyecto de tipo aplicacin Windows, y en su formulario, insertaremos un men, aadiendo las siguientes opciones: Abrir, Guardar, Color y Fuente. Cada opcin mostrar un tipo de dilogo del sistema. A continuacin describiremos cada uno de los controles: ColorDialog Este control muestra el cuadro de dilogo del sistema para la seleccin de colores. Entre sus propiedades podemos destacar las siguientes. _Color. Contiene un tipo de la estructura Color, que nos permite obtener el color seleccionado por el usuario mediante este cuadro de dilogo, para poder aplicarlo sobre alguno de los elementos del formulario. _AllowFullOpen. Contiene un valor lgico que permite habilitar y deshabilitar el botn que Muestra el conjunto de colores personalizados del cuadro de dilogo de seleccin de colores. FontDialog Este control muestra el cuadro de dilogo del sistema para la seleccin del tipo de fuente. Entre sus propiedades podemos destacar las siguientes: _Font. Contiene un tipo de la clase Font. Una vez seleccionada una fuente por el usuario en el cuadro de dilogo, podremos cambiar la fuente de los controles del formulario. _ShowApply. Contiene un valor lgico que permite mostrar-ocultar el botn Aplicar, que nos permitir asignar el tipo de letra sin cerrar el dilogo. Al pulsar este botn se desencadenar el evento Apply de este control de dilogo, en el que podremos escribir el cdigo necesario para aplicar la nueva fuente seleccionada.

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

SaveFileDialog Este control muestra el cuadro de dilogo del sistema, mediante el cual escribimos un nombre de archivo y elegimos un directorio, sobre el cual grabaremos informacin. Es importante precisar que el control no se ocupa del proceso de grabacin de datos; su cometido es el permitirnos navegar por la estructura del sistema de archivos del equipo, y la seleccin de un nombre para el archivo a grabar. Entre las propiedades del control, podemos destacar las siguientes: _ Title. Contiene una cadena con el ttulo que aparecer en el cuadro de dilogo. _ InitialDirectory. Ruta inicial que mostrar el control al abrirse. _ Filter. Cadena con el tipo de archivos que mostrar el cuadro de dilogo al navegar por el sistema de archivos. El formato de esta cadena es el siguiente: NombreArchivo (*.Extensin)|*.Extensin; pudiendo situar varios filtros separados por el carcter de barra vertical ( | ). _ FilterIndex. Nmero que corresponde a alguno de los tipos de archivo establecidos en la propiedad Filter. _ FileName. Nombre del archivo en el que se realizar la escritura. _ DefaultExt. Cadena con la extensin por defecto a aplicar sobre el nombre del archivo. _ CheckFileExists. Valor lgico que nos permite comprobar si el archivo sobre el que vamos a grabar ya existe. _ ValidateNames. Valor lgico que comprobar si el nombre de archivo proporcionado contiene caracteres especiales, es decir, si se trata de un nombre vlido. OpenFileDialog Este control muestra el cuadro de dilogo del sistema, mediante el que seleccionamos un archivo para poder abrirlo posteriormente, y realizar sobre las mismas operaciones de lectura-escritura. Al igual que en el control anterior, la lectura y escritura de informacin es algo que deberemos realizar por cdigo, una vez que hayamos elegido el archivo mediante este cuadro de dilogo. Las propiedades de este control son prcticamente las mismas que las de SaveFileDialog, con algunas excepciones como las siguientes: _ Multiselect. Contiene un valor lgico, que nos permitir la seleccin de mltiples archivos. _ ShowReadOnly. Permite mostrar la casilla de verificacin para mostrar los archivos de slo lectura. _ ReadOnlyChex. Permite obtener y establecer el valor para la casilla de verificacin de slo lectura del cuadro de dilogo. Ejercicio 1. Desarrollar una aplicacin que permita seleccionar una imagen y luego poder guardar esa imagen en otro lugar de la computadora.

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

2. 3.

Digitar el siguiente Cdigo dentro de cada uno de los Controles. Dentro del Botn btnAbrir

4.

Dentro del Botn btnPreview

5.

Dentro del Botn btnNuevo

6.

Dentro del Botn btnGuardar

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

7.

Dentro del Botn btnSalir

8. 9.

Ejecutar el Programa. Presionar el Botn Abrir y seleccionar una imagen.

Acceso a datos con ADO .NET En este captulo aprender a: Utilizar el Explorador de servidores para establecer una conexin con una base de datos. Crear un adaptador de datos que extraiga informacin especfica de una base de datos. Crear un conjunto de datos que represente una o varias tablas de datos en un programa.

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

Utilizar los controles textbox, label y button para visualizar informacin de la base de datos y controles de navegacin.

Para esto deber revisar los siguientes temas del material adjunto a esta gua, el que se encuentra en formato PDF (Acrobat Reader); el archivo se llama. Acceso a datos con ADO_NET (PDF): Comparativa de ADO y ADO .NET Beneficios de ADO .NET Arquitectura de datos desconectados DataSet ADO .NET y XML Visin general de ADO .NET Las clases de ADO .NET Estableciendo la conexin

Las clases de ADO .NET Las clases DataAdapter Como hemos comentado en anteriores apartados, los objetos DataAdapter (SqlDataAdapter y OleDbDataAdapter) van a desempear el papel de puente entre el origen de datos y el DataSet, permitindonos cargar el DataSet con la informacin de la fuente de datos, y posteriormente, actualizar el origen de datos con la informacin del DataSet. Un objeto DataAdapter puede contener desde una sencilla sentencia SQL, como hemos visto en el apartado anterior, hasta varios objetos Command. La clase DataAdapter dispone de cuatro propiedades, que nos van a permitir asignar a cada una, un objeto Command (SqlCommand u OleDbCommand) con las operaciones estndar de manipulacin de datos. Estas propiedades son las siguientes: InsertCommand. Objeto de la clase Command, que se va a utilizar para realizar una insercin de datos. SelectCommand. Objeto de la clase Command que se va a utilizar para ejecutar una sentencia Select de SQL. UpdateCommand. Objeto de la clase Command que se va a utilizar para realizar una modificacin de los datos. DeleteCommand. Objeto de la clase Command que se va a utilizar para realizar una eliminacin de datos.

Un mtodo destacable de las clases SqlDataAdapter/OleDbDataAdapter es el mtodo Fill( ), que ejecuta el comando de seleccin que se encuentra asociado a la propiedad SelectCommand, los datos obtenidos del origen de datos se cargarn en el objeto DataSet que pasamos por parmetro. La Figura 344 muestra la relacin entre los objetos DataAdapter y el objeto DataSet.

Fig. 344. Relacin entre objetos DataAdapter y DataSet

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

Para demostrar el uso de los objetos DataAdapter vamos a desarrollar un proyecto con el nombre PruDataAdapter. En esta aplicacin vamos a utilizar el mismo objeto DataAdapter para realizar una consulta contra una tabla e insertar nuevas filas en esa misma tabla. En primer lugar disearemos el formulario del programa. Como novedad, introduciremos el control DataGrid, que trataremos con ms profundidad en un prximo apartado. Baste decir por el momento, que a travs del DataGrid visualizaremos una o varias tablas contenidas en un DataSet. La Figura 345 muestra el aspecto de esta aplicacin en funcionamiento.

Figura 345. Formulario para operaciones con DataAdapter y DataGrid. Respecto al cdigo del formulario, en primer lugar, vamos a declarar varios objetos de acceso a datos a nivel de la clase para poder tenerlos disponibles en diversos mtodos. Veamos el Cdigo fuente 569. Imports System.Data.SqlClient Public Class Form1 Inherits System.Windows.Forms.Form Private oConexion As SqlConnection Private oDataSet As DataSet Private oDataAdapter As SqlDataAdapter '.... '.... Cdigo fuente 569 En el siguiente paso escribiremos el procedimiento del evento Load del formulario, y el mtodo CargarDatos( ), que se ocupa de cargar el DataSet, y asignrselo al DataGrid a travs de su propiedad DataSource. Observe el lector que en el mtodo CargarDatos( ) lo primero que hacemos es vaciar el DataSet, puesto que este objeto conserva los datos de tablas y registros; en el caso de que no limpiramos el DataSet, se acumularan las sucesivas operaciones de llenado de filas sobre la tabla que contiene. Veamos el Cdigo fuente 570. Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load ' crear conexin oConexion = New SqlConnection() oConexion.ConnectionString = "Server=(local);Database=MUSICA;uid=sa;pwd=;" ' crear adaptador oDataAdapter = New SqlDataAdapter() ' crear comandos para insercin, consulta con sus parmetros y asignarlos al adaptador

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

Dim oCmdInsercion As New SqlCommand("INSERT INTO AUTORES " & _ "(IDAutor,Autor) VALUES(@IDAutor,@Autor)", oConexion) oDataAdapter.InsertCommand = oCmdInsercion oDataAdapter.InsertCommand.Parameters.Add(New SqlParameter("@IDAutor", SqlDbType.Int)) oDataAdapter.InsertCommand.Parameters.Add(New SqlParameter("@Autor", SqlDbType.NVarChar)) Dim oCmdConsulta As New SqlCommand("SELECT * FROM AUTORES", _oConexion) oDataAdapter.SelectCommand = oCmdConsulta ' crear conjunto de datos oDataSet = New DataSet() Me.CargarDatos() End Sub Private Sub CargarDatos() ' vaciar el dataset oDataSet.Clear() oConexion.Open() ' abrir conexin ' utilizar el adaptador para llenar el dataset con una tabla oDataAdapter.Fill(oDataSet, "Autores") oConexion.Close() ' cerrar conexin ' enlazar dataset con datagrid; ' en DataSource se asigna el dataset, ' en DataMember el nombre de la tabla del ' dataset que mostrar el datagrid Me.grdDatos.DataSource = oDataSet Me.grdDatos.DataMember = "Autores" End Sub Cdigo fuente 570 Finalmente, en el botn Grabar, escribiremos las instrucciones para insertar un nuevo registro en la tabla. Veamos el Cdigo fuente 571. Private Sub btnGrabar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGrabar.Click Dim iResultado As Integer ' asignar valores a los parmetros para el comando de insercin oDataAdapter.InsertCommand.Parameters("@IDAutor").Value = Me.txtIDAutor.Text oDataAdapter.InsertCommand.Parameters("@Autor").Value = Me.txtAutor.Text ' abrir conexin oConexion.Open() ' ejecutar comando de insercin del adaptador iResultado = oDataAdapter.InsertCommand.ExecuteNonQuery() ' cerrar conexin oConexion.Close() Me.CargarDatos() MessageBox.Show("Registros aadidos: " & iResultado) End Sub Cdigo fuente 571 Navegacin y edicin de registros en modo desconectado Anteriormente vimos la forma de realizar operaciones de edicin en modo conectado, sobre las tablas de una base de datos, empleando los objetos Command. Como tambin ya sabemos, la arquitectura de ADO .NET est orientada a un modelo de trabajo desconectado del almacn de datos, al que recurriremos slo cuando necesitemos obtener los datos para su consulta y manipulacin, o bien, cuando esos mismos datos desconectados, los hayamos modificado y tengamos que actualizarlos en la fuente de datos.

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

El objeto DataSet, combinado con un grupo de objetos enfocados al mantenimiento de datos desconectados, como son DataAdapter, DataTable, DataRow, etc., nos va a permitir realizar tareas como la navegacin entre los registros de una tabla del DataSet, adems de la modificacin de sus datos en las operaciones habituales de insercin, modificacin y borrado de filas. El proyecto NavegaEdita que se acompaa como ejemplo, muestra los pasos necesarios que debemos dar para crear un sencillo mantenimiento de datos para una tabla albergada en un DataSet, junto a las tpicas operaciones de navegacin por las filas de dicha tabla. Seguidamente iremos desgranando el conjunto de pasos a realizar. Partimos de una sencilla base de datos en SQL Server, que contiene la tabla Clientes, con los campos ms caractersticos de esta entidad de datos: cdigo cliente, nombre, fecha ingreso, crdito. Una vez creado un nuevo proyecto en VB.NET, disearemos el formulario de la aplicacin que como vemos en la Figura 346, a travs de sus controles, nos permitir realizar las operaciones mencionadas. Pasando a la escritura del cdigo del programa, en primer lugar importaremos el espacio de nombres System.Data.SqlClient, y declararemos a nivel de clase un conjunto de variables para la manipulacin de los datos. Veamos el Cdigo fuente 572. Imports System.Data.SqlClient Public Class Form1 Inherits System.Windows.Forms.Form ' variables a nivel de clase para la manipulacin de datos Private oDataAdapter As SqlDataAdapter Private oDataSet As DataSet Private iPosicFilaActual As Integer '.... '.... Cdigo fuente 572

Figura 346. Formulario de navegacin y edicin manual de datos Como siguiente paso, escribiremos el manipulador del evento Load del formulario y un mtodo para cargar los datos del registro actual en los controles del formulario, el Cdigo fuente 573 muestra esta parte. Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load ' crear conexin Dim oConexion As SqlConnection oConexion = New SqlConnection() oConexion.ConnectionString = "Server=(local);" & _

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

"Database=Gestion;uid=sa;pwd=;" ' crear adaptador Me.oDataAdapter = New SqlDataAdapter("SELECT * FROM Clientes", _ oConexion) ' crear commandbuilder Dim oCommBuild As SqlCommandBuilder = New SqlCommandBuilder(oDataAdapter) ' crear dataset Me.oDataSet = New DataSet() oConexion.Open() ' llenar con el adaptador el dataset Me.oDataAdapter.Fill(oDataSet, "Clientes") oConexion.Close() ' establecer el indicador del registro a mostrar de la tabla Me.iPosicFilaActual = 0 ' cargar columnas del registro en los controles del formulario Me.CargarDatos() End Sub Private Sub CargarDatos() ' obtener un objeto con la fila actual Dim oDataRow As DataRow oDataRow = Me.oDataSet.Tables("Clientes").Rows(Me.iPosicFilaActual) ' cargar los controles del formulario con ' los valores de los campos del registro Me.txtIDCliente.Text = oDataRow("IDCliente") Me.txtNombre.Text = oDataRow("Nombre") Me.txtFIngreso.Text = oDataRow("FIngreso") Me.txtCredito.Text = oDataRow("Credito") ' mostrar la posicin actual del registro ' y el nmero total del registros Me.lblRegistro.Text = "Registro: " & _ Me.iPosicFilaActual + 1 & " de " & _ Me.oDataSet.Tables("Clientes").Rows.Count End Sub Cdigo fuente 573 Observe el lector que en el evento Load hemos creado un objeto CommandBuilder, pasndole como parmetro el DataAdapter. Como ya sabemos, un DataAdapter contiene una serie de objetos Command para las operaciones de consulta, insercin, etc. La misin en este caso del objeto CommandBuilder es la de construir automticamente tales comandos y asignrselos al DataAdapter, ahorrndonos ese trabajo de codificacin. En cuanto a las operaciones de navegacin por la tabla, no hay un objeto, como ocurra con el Recordset de ADO, que disponga de mtodos especficos de movimiento como MoveNext( ), MoveLast( ), etc. Lo que debemos hacer en ADO .NET, tal y como muestra el mtodo CargarDatos() es obtener del DataSet, la tabla que necesitemos mediante su coleccin Tables, y a su vez, a la coleccin Rows de esa tabla, pasarle el nmero de fila/registro al que vamos a desplazarnos. En nuestro ejemplo utilizaremos la variable iPosicFilaActual, definida a nivel de clase, para saber en todo momento, la fila de la tabla en la que nos encontramos. El Cdigo fuente 574 muestra el cdigo de los botones de navegacin, reunidos en el GroupBox Navegar del formulario. Private Sub btnAvanzar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAvanzar.Click ' si estamos en el ltimo registro, ' no hacer movimiento If Me.iPosicFilaActual = _ (Me.oDataSet.Tables("Clientes").Rows.Count - 1) Then MessageBox.Show("ltimo registro") Else ' incrementar el marcador de registro y actualizar los controles con los datos del registro

Nombre de la asignatura: Parcial de estudio


actual Me.iPosicFilaActual += 1 Me.CargarDatos() End If End Sub

Programacin Visual Segundo parcial

Private Sub btnRetroceder_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRetroceder.Click ' si estamos en el primer registro, no hacer movimiento If Me.iPosicFilaActual = 0 Then MessageBox.Show("Primer registro") Else ' disminuir el marcador de registro y actualizar los controles con los datos del registro actual Me.iPosicFilaActual -= 1 Me.CargarDatos() End If End Sub Private Sub btnPrimero_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrimero.Click ' establecer el marcador de registro en el primero Me.iPosicFilaActual = 0 Me.CargarDatos() End Sub Private Sub btnUltimo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUltimo.Click ' establecer el marcador de registro en el primero obteniendo el nmero de filas que contiene la tabla menos uno Me.iPosicFilaActual = (Me.oDataSet.Tables("Clientes").Rows.Count - 1) Me.CargarDatos() End Sub Cdigo fuente 574 Respecto a las operaciones de edicin, debemos utilizar los miembros del objeto tabla del DataSet, como se muestra en el Cdigo fuente 575. Una vez terminado el proceso de edicin, actualizaremos el almacn de datos original con el contenido del DataSet, empleando el DataAdapter.

Private Sub btnInsertar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInsertar.Click Dim oDataRow As DataRow ' obtener un nuevo objeto fila de la tabla del dataset oDataRow = Me.oDataSet.Tables("Clientes").NewRow() ' asignar valor a los campos de la nueva fila oDataRow("IDCliente") = Me.txtIDCliente.Text oDataRow("Nombre") = Me.txtNombre.Text oDataRow("FIngreso") = Me.txtFIngreso.Text oDataRow("Credito") = Me.txtCredito.Text ' aadir el objeto fila a la coleccin de filas de la tabla del dataset Me.oDataSet.Tables("Clientes").Rows.Add(oDataRow) End Sub Private Sub btnModificar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnModificar.Click Dim oDataRow As DataRow

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

' obtener el objeto fila de la tabla del dataset ' en el que estamos posicionados oDataRow = Me.oDataSet.Tables("Clientes").Rows(Me.iPosicFilaActual) ' modificar las columnas de la fila excepto la correspondiente al identificador cliente oDataRow("Nombre") = Me.txtNombre.Text oDataRow("FIngreso") = Me.txtFIngreso.Text oDataRow("Credito") = Me.txtCredito.Text End Sub Private Sub btnActualizar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnActualizar.Click ' actualizar los cambios realizados en el dataset ' contra la base de datos real Me.oDataAdapter.Update(Me.oDataSet, "Clientes") End Sub Cdigo fuente 575 El caso del borrado de filas es algo diferente, por ello lo mostramos aparte del resto de operaciones de edicin. En el Cdigo fuente 576 vemos el cdigo del botn Eliminar, dentro del cual obtenemos la fila a borrar mediante un objeto DataRow, procediendo a su borrado con el mtodo Delete( ). Para actualizar los borrados realizados, empleamos el mtodo GetChanges( ) del objeto DataTable, obteniendo a su vez, un objeto tabla slo con las filas borradas; informacin esta, que pasaremos al DataAdapter, para que actualice la informacin en el origen de datos. Private Sub btnEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEliminar.Click Dim oDataRow As DataRow ' obtener el objeto fila, de la tabla del dataset en el que estamos posicionados oDataRow = Me.oDataSet.Tables("Clientes").Rows(Me.iPosicFilaActual) oDataRow.Delete() ' borrar la fila mediante el mtodo GetChanges(), obtenemos una tabla ' con las filas borradas Dim oTablaBorrados As DataTable oTablaBorrados = Me.oDataSet.Tables("Clientes").GetChanges(DataRowState.Deleted) ' actualizar en el almacn de datos las filas borradas Me.oDataAdapter.Update(oTablaBorrados) ' confirmar los cambios realizados Me.oDataSet.Tables("Clientes").AcceptChanges() ' reposicionar en la primera fila Me.btnPrimero.PerformClick() End Sub Cdigo fuente 576

Asesora didctica 2
Una base de datos es una coleccin de datos clasificados y estructurados que son guardados en uno o varios ficheros pero referenciados como si de un nico fichero se tratara. Para crear y manipular Bases de Datos Relacionales, objetivo de esta unidad, existen en el mercado varios sistemas administradores de bases de datos; por ejemplo, Access, SQL Server, Oracle y DB2. Otros sistemas administradores de bases de datos de inters y de libre distribucin son MySQL y PostgreSQL. Para el desarrollo de las actividades usted deber revisar el compendio con los temas relacionados al crear proyectos de instalacin, adicionalmente dispone de este material de apoyo que le servir de referencia para la elaboracin de las tareas correspondientes a este mes.

Nombre de la asignatura: Parcial de estudio


Crear o agregar un proyecto de instalacin

Programacin Visual Segundo parcial

Los proyectos de instalacin sirven para crear archivos de Windows Installer (.msi), que se utilizan con el fin de distribuir la aplicacin para su instalacin en otro equipo o servidor Web. Existen dos tipos de proyectos de instalacin: los proyectos de instalacin estndar creados por instaladores para aplicaciones Windows en un equipo de destino, y los proyectos de instalacin Web creados por instaladores para aplicaciones Web en un servidor Web. Nota: Los proyectos de instalacin Web no estn disponibles en la edicin Standard de Visual Basic .NET. Para obtener ms informacin vea Caractersticas de Visual Basic Standard. Para crear un nuevo proyecto de instalacin 1. 2. 3. En el men Archivo, elija Agregar proyecto y despus haga clic en Nuevo proyecto. En el cuadro de dilogo Agregar nuevo proyecto, seleccione la carpeta Proyectos de instalacin e implementacin. Elija Proyecto de instalacin para una instalacin estndar o Proyecto de instalacin Web para el Web.

Para agregar un proyecto de instalacin existente a una solucin 1. 2. En el men Archivo, elija Agregar proyecto y despus haga clic en Proyecto existente. En el cuadro de dilogo Agregar proyecto existente, busque en la ubicacin del proyecto de instalacin y haga clic en Abrir.

Agregar elementos a un proyecto de implementacin Para crear un instalador, primero hay que especificar qu hay que incluir en el instalador y en qu lugar del equipo de destino hay que instalarlo. Para ello, hay que agregar elementos al proyecto de implementacin. Los tipos de elementos que se pueden agregar a un proyecto de implementacin son los resultados del proyecto, archivos, mdulos de combinacin y componentes. Para agregar resultados del proyecto o un archivo a un proyecto de implementacin 1. 2. Abra el Editor del sistema de archivos. Para obtener ms informacin, vea Abrir los editores de implementacin. Seleccione la carpeta del equipo de destino donde se vaya a instalar el elemento. Nota: Es posible crear nuevas carpetas en el equipo de destino. Para obtener ms informacin vea Agregar y eliminar carpetas en el Editor del sistema de archivos. 3. En el men Archivo, elija Agregar y despus haga clic en Resultados del proyecto o Archivo. En el cuadro de dilogo que aparece, seleccione el elemento que desea agregar. Nota: Tambin se pueden agregar elementos a un proyecto de implementacin haciendo clic con el botn secundario del mouse en el nodo del proyecto en Explorador de soluciones. Todos los elementos agregados de esta forma se colocarn en la carpeta predeterminada. Para las aplicaciones estndar, la carpeta predeterminada es la carpeta Aplicacin, y para las aplicaciones Web es la carpeta Aplicacin Web. Los elementos se pueden mover a otra carpeta. Para agregar un mdulo de combinacin o un componente a un proyecto de implementacin

Nombre de la asignatura: Parcial de estudio


1. 2.

Programacin Visual Segundo parcial

Seleccione el proyecto de implementacin en el Explorador de soluciones. En el men Archivo, elija Agregar y, a continuacin, haga clic en Mdulo de combinacin o Componente. En el cuadro de dilogo que aparece, seleccione el elemento que desea agregar.

Presentacin de Datos Utilizando el control DataGrid Este control, del que ya realizamos una pequea demostracin en un apartado anterior, nos va a permitir realizar enlace complejo de datos con ADO .NET. Se trata de la versin mejorada del control DataGrid de ADO, disponible en Visual Basic 6, pero con una serie de funcionalidades optimizadas y otras nuevas aadidas. Para utilizar algunas de sus caractersticas, crearemos un proyecto de prueba con el nombre DataGridPru (hacer clic aqu para acceder a este ejemplo), consistente en un formulario MDI, con una serie de opciones de men, a travs de las cuales, mostraremos diversas caractersticas de este control y algunas otras adicionales sobre ADO .NET. La opcin de men DataGrid + Normal mostrar el formulario frmNormal, que contiene un sencillo DataGrid con una tabla. Podemos editar los registros de la tabla y aadir nuevos; al trabajar en desconexin, hasta que no pulsemos el botn Actualizar de este formulario, el objeto DataAdapter del mismo no actualizar los datos del DataSet hacia la base de datos fsica. Otra caracterstica incluida por defecto es la ordenacin de las filas por columna al hacer clic en su ttulo. Finalmente, al redimensionar el formulario, tambin cambiar el tamao del DataGrid, puesto que hemos utilizado su propiedad Anchor para anclarlo a todos los bordes de la ventana. La Figura 350 muestra este formulario.

Figura 350. DataGrid editable

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

El Cdigo fuente 582 muestra el cdigo principal de este formulario. Recordamos al lector, la necesidad de crear un objeto CommandBuilder para el DataAdapter, ya que en caso contrario, al intentar actualizar el DataSet contra la base de datos, se producir un error.

El Cdigo fuente 582 Acceso a Elementos de un DataGrid en el Cliente Utilizamos ASP .NET y JavaScript Introduccin Cuando utilizamos un DataGrid en ASP .NET podemos necesitar tener acceso a ms de un elemento de este, como por ejemplo, en el caso de que queramos llamar a otra pgina pasndole ms de un argumento. El problema Por ejemplo, si tenemos este DataGrid:

Nos puede interesar abrir una pgina con el nombre del beneficiario y el nmero del cliente. Por supuesto, desde el evento OnSelectedIndexChanged del DataGrid podramos tener acceso a esos elementos, pero eso supone un roolback al servidor, con la prdida de tiempo que eso supone. Tambin tenemos la opcin de utilizando una HyperLinkColumn en el DataGrid, asociarle un campo del DataSet, pero solo podemos asignarle un campo, pero no varios. En este ejemplo, nos interesa abrir una pgina pop-up de envo de mensajes, y le queremos pasar el nmero del cliente y el nombre del beneficiario.

Nombre de la asignatura: Parcial de estudio


La solucin

Programacin Visual Segundo parcial

La solucin a este problema pasa por utilizar una funcin JavaScript para navegar por el DOM del documento y acceder a los valores de las columnas que nos interesen. En primer lugar, agregamos a nuestro DataGrid una columna HyperLinkColumn: <asp:HyperLinkColumn Text="Enviar Mensaje" NavigateUrl="javascript:NuevoMensaje(this)"></asp:HyperLinkColumn> De esta manera, cuando hagamos clic en esta columna, llamamos a la funcin JavaScript NuevoMensaje, pasndole como argumento this, que es una referencia al enlace donde hemos pulsado. La funcin JavaScript es la siguiente: function NuevoMensaje(obj) { Nmero = obj.document.activeElement.parentElement.parentElement.firstChild.innerText; Nombre = obj.document.activeElement.parentElement.parentElement.firstChild.nextSibling.innerText; direccin = "NuevoMensaje.aspx"; direccin += "?Numero=" + Nmero; direccin += "&Nombre=" + Nombre; window.open(direccion,"Mensajes","width=500,height=400,toolbars=no,menubar= no,scrollbars=yes,resizable=yes"); } Para obtener tanto el nmero como el nombre, navegamos por el objeto actual (obj.document.activeElement) hacia arriba, recorriendo el rbol de la estructura del elemento Table (la representacin en HTML del DataGrid) hasta el elemento TR (mediante parentElement), que sera: obj.document.activeElement.parentElement.parentElement Para obtener el nmero, una vez que estamos en el elemento TR, en la fila, descendemos por el rbol hasta la primera celda TD (mediante firstChild), y obtenemos el texto representado en ella (mediante innerText). Para obtener el nombre, una vez que estamos en el elemento raz de nuestro rbol (TR), nos movemos hacia la siguiente celda (mediante nextSibling) y obtenemos de nuevo el contenido de esa celda (mediante innerText) De esta manera, podemos navegar por la fila seleccionada para conseguir los valores que necesitemos. Una vez que tenemos los valores deseados, creamos una variable donde ponemos la direccin de la pgina y le agregamos en la QueryString estos dos valores. En la pgina "NuevoMensaje.aspx" los leeremos de esta manera: Request.QueryString["Nmero"] Request.QueryString["Nombre"]

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

Para abrir esta pgina mediante una ventana pop-up, utilizamos el mtodo window.open, donde el primer argumento es la pgina. El segundo argumento, optativo, es el nombre de la ventana, y el tercer argumento, tambin optativo son atributos de la ventana. Personalizando el Control DataGrid http://www.elguille.info/colabora/NET2005/Percynet_PersonalizandoDataGrid.htm Fuentes de datos para el control de DataGrid Las fuentes de datos vlidos para la DataGrid incluyen: Clase Clase Clase Clase DataTable DataView DataSet DataViewManager

Si su fuente es un conjunto de datos, puede ser un objeto en el formulario o un objeto que se pas al formulario a travs de un servicio Web XML. Puede unir a los conjuntos de datos, ya sean escritos o no escritos. Puede unir a las siguientes estructuras si sus elementos exponen propiedades pblicas: Cualquier componente que implemente la interfaz IList. Esto incluye: Arreglos de una sola dimensin. Cualquier componente que implemente la interfaz IListSource. Cualquier componente que implemente la interfaz IBindingList. Un uso comn del control de DataGrid es mostrar una sola tabla de datos desde un conjunto de datos. Sin embargo, tambin se puede utilizar el control para mostrar mltiples tablas, incluyendo tablas relacionadas. La presentacin de la cuadrcula se ajusta automticamente de acuerdo con la fuente de datos: Tabla individual. La tabla aparece en una cuadrcula. Tablas mltiples. La cuadrcula puede mostrar una vista de rbol en la que los usuarios pueden navegar para localizar la tabla que desean mostrar. Cuando el control de DataGrid muestra una tabla y la propiedad AllowSorting se configura a verdadero, los datos se pueden clasificar al hacer clic en los encabezados de la columna. El usuario tambin puede agregar filas y editar celdas. La relacin entre un conjunto de tablas se muestra utilizando una estructura principal / secundaria de navegacin. Las tablas principales son el nivel ms alto de datos, y las tablas secundarias son aquellas tablas de datos que se derivan de los listados individuales en las tablas principales. Los expansores se muestran en cada fila principal que contenga una tabla secundaria. Al hacer clic en un ampliador, se genera una lista de vnculos tipo Web en las tablas secundarias, que cuando se seleccionan causan que las tablas secundarias aparezcan en pantalla. Al hacer clic en el icono "mostrar / ocultar las filas principales" ocultar la informacin acerca de la tabla principal (o causar que reaparezca si la ha ocultado previamente). Un botn hacia atrs permite la navegacin inversa en la tabla vista previamente. Algunas caractersticas del control de DataGrid, como colores, fuente de texto, alterar colores de fondo y propiedades de los datos, se puede formatear en el ambiente de diseo utilizando la ventana Propiedades. Estn disponibles varias propiedades tales como CaptionForeColor, CaptionBackColor y CaptionFont.

Nombre de la asignatura: Parcial de estudio


Columnas y filas

Programacin Visual Segundo parcial

Una DataGrid consiste en una coleccin de objetos DataGridTableStyle dentro de la propiedad TableStyles del control de DataGrid. Un estilo de tabla puede contener una coleccin de objetos DataGridColumnStyle incluidas en la propiedad GridColumnStyles del objeto DataGridTableStyle. Puede editar las propiedades TableStyles y ColumnStyles con editores de coleccin a los que se accede a travs de la ventana Propiedades.

Cualquier objeto DataGridTableStyle asociado con el control de DataGrid puede ser accedido a travs de GridTableStylesCollection. GridTableStylesCollection se puede editar en el diseador con el Editor de la coleccin DataGridTableStyle, o de manera programtica a travs de la propiedad TableStyles del control de DataGrid, como se muestra en el ejemplo que se encuentra ms abajo. Los estilos de la tabla y los estilos de la columna se sincronizan con los objetos DataTable y DataColumn al establecer sus propiedades MappingName en las propiedades TableName y ColumnName apropiadas. Cuando un objeto DataGridTableStyle sin estilos de columna se agrega a una unin de control DataGrid a una fuente de datos vlida, y la propiedad MappingName del estilo de la tabla se configura a una propiedad TableName vlida, se crea una coleccin de objetos DataGridColumnStyle para ese estilo de tabla. Para cada objeto DataColumn que se encuentra en la coleccin Columnas del objeto DataTable, se agrega un objeto DataGridColumnStyle correspondiente al objeto GridColumnStylesCollection, al cual se accede a travs de la propiedad GridColumnStyles del objeto DataGridTableStyle. Se pueden agregar o eliminar columnas de la cuadrcula utilizando el mtodo Agregar o Eliminar en el objeto GridColumnStylesCollection. Una coleccin de tipos de columna extiende la clase DataGridColumnStyle con capacidades de formateo y edicin enriquecidas. Todos los tipos de columna se heredan de la clase base DataGridColumnStyle. La clase que se crea depende de la propiedad DataType del objeto DataColumn en el cual se basa DataGridColumn. Por ejemplo, un objeto DataColumn con su propiedad DataType configurada a System.Boolean se asociar con DataGridBoolColumn. La siguiente tabla describe cada uno de estos tipos de columna. DataGridTextBoxColumn Acepta y muestra los datos como cadenas formateadas o no formateadas.

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

Las capacidades de edicin son las mismas que las que se utilizan para editar datos en un TextBox sencillo. Se hereda de DataGridColumnStyle. DataGridBoolColumn Eventos Aparte de los eventos de control comunes como MouseDown, Intro y Desplazar, el control de DataGrid soporta los eventos asociados con la edicin y navegacin dentro de la cuadrcula. La propiedad CurrentCell determina cul celda se selecciona. El evento CurrentCellChanged surge cuando el usuario navega a una celda nueva. Cuando el usuario navega a una tabla nueva (a travs de las relaciones principales / secundarias), el evento Navegar surge. El evento BackButtonClick surge cuando el usuario hace clic en el botn posterior cuando ve una tabla secundaria, y el evento ShowParentDetailsButtonClick surge cuando se hace clic en el icono "mostrar / ocultar filas principales. Ejemplo 1. 2. 3. 4. 5. Para poder mostrar los datos en la tabla, primero debe unir el control de DataGrid al conjunto de datos. Declare un nuevo estilo de tabla y establezca el nombre de su correlacin. Declare un estilo de columna nuevo y establezca el nombre de su correlacin y otras propiedades. Invoque el mtodo Agregar del objeto GridColumnStylesCollection para agregar la columna al estilo de la tabla. Invoque el mtodo Agregar del objeto GridTableStylesCollection para agregar el estilo de tabla a la cuadrcula de datos. Acepta y muestra valores verdaderos, falsos y nulos. Se hereda de DataGridColumnStyle.

VB .NET ... DataGrid1.SetDataBinding(DsCustomers1, "Clientes") Dim tableStyle As New DataGridTableStyle tableStyle.MappingName = "Customers" Dim myDataCol As New DataGridBoolColumn myDataCol.HeaderText = "My New Column" myDataCol.MappingName = "Current" tableStyle.GridColumnStyles.Add(myDataCol) DataGrid1.TableStyles.Add(tableStyle) ...

C# .NET ... dataGrid1.SetDataBinding(DsCustomers1, "Clientes"); DataGridTableStyle tableStyle = new DataGridTableStyle(); tableStyle.MappingName = "Customers";

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

DataGridBoolColumn myDataCol = new DataGridBoolColumn(); myDataCol.HeaderText = "My New Column"; myDataCol.MappingName = "Current"; tableStyle.GridColumnStyles.Add(myDataCol); dataGrid1.TableStyles.Add(tableStyle); ... Ahora veamos un ejemplo sencillo de cmo aplicar los conceptos explicados anteriormente. En este ejemplo (formatear una datagrid usando estilos) se muestra cmo poco a poco vamos creando estilos de columnas y el estilo de tabla, los cuales sern usados para formatear los datos de cada columna de nuestra datagrid. Revise el cdigo. A continuacin, sigue el cdigo en Visual Basic NET: Imports Imports Imports Imports Imports Imports System System.Drawing System.Collections System.ComponentModel System.Windows.Forms System.Data

Public Class Form1 Inherits System.Windows.Forms.Form ' ... ' cdigo generado por el diseador de Windows form ' ... Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles MyBase.Load 'establecemos la referencia cultural del subproceso actual Espaol-Per. System.Threading.Thread.CurrentThread.CurrentCulture = _ New System.Globalization.CultureInfo("es-PE") Dim TableName As New String("MyTable") Dim ObjEstiloTabla As New DataGridTableStyle With ObjEstiloTabla .MappingName = TableName .AlternatingBackColor = Color.Coral .BackColor = Color.Orange .ForeColor = Color.White .HeaderForeColor = Color.Blue .LinkColor = SystemColors.Control .AllowSorting = False .HeaderFont = New System.Drawing.Font("Verdana", 8.25F, _ System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, _ CType(1, System.Byte)) End With Me.DataGrid1.TableStyles.Add(ObjEstiloTabla) Me.DataGrid1.DataSource = GetMyTable(TableName) Dim ObjEstiloColumna As DataGridTextBoxColumn 'formateamos la columna 0 "Integer" para datos enteros ObjEstiloColumna = DataGrid1.TableStyles(0).GridColumnStyles(0) If Not (ObjEstiloColumna Is Nothing) Then ObjEstiloColumna.Format = "n1" End If

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

'formateamos la columna 1 "Double" para datos de tipo double ObjEstiloColumna = DataGrid1.TableStyles(0).GridColumnStyles(1) ' If Not (ObjEstiloColumna Is Nothing) Then ObjEstiloColumna.Format = "f3" End If 'formateamos los datos de la columna anterior como moneda nacional '(en este caso, usaremos la moneda nacional peruana) ObjEstiloColumna = DataGrid1.TableStyles(0).GridColumnStyles(2) ' If Not (ObjEstiloColumna Is Nothing) Then ObjEstiloColumna.Format = "c2" End If 'formateamos los datos de la columna 3 "Date" como Date ObjEstiloColumna = DataGrid1.TableStyles(0).GridColumnStyles(3) ' If Not (ObjEstiloColumna Is Nothing) Then ObjEstiloColumna.Format = "d" ObjEstiloColumna.Width = 100 End If End Sub Private Function GetMyTable(ByVal TableName As String) As DataTable Dim dt As New DataTable(TableName) Dim RowsCount As Integer = 10 dt.Columns.Add(New DataColumn("Integer", GetType(Integer))) dt.Columns.Add(New DataColumn("Double", GetType(Double))) dt.Columns.Add(New DataColumn("s/. Double", GetType(Double))) dt.Columns.Add(New DataColumn("Date", GetType(DateTime))) Dim r As New Random 'objeto que generar un nmero aleatorio Dim i As Integer While i < RowsCount Dim d As Double = 1000 * r.NextDouble() Dim dr As DataRow = dt.NewRow() dr(0) = Fix(d) dr(1) = d dr(2) = d dr(3) = DateTime.Now.Date.AddMonths(CType(r.NextDouble * 21, Double)) dt.Rows.Add(dr) i += 1 End While Return dt End Function End Class

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

Espacios de nombres usados en el cdigo de este artculo: System.Drawing System.Collections System.ComponentModel System.Data System.Threading System.Globalization Agregando funcionalidad al control DataGrid con VB .NET http://www.elguille.info/colabora/puntoNET/yosall_datagrid.htm En este ejemplo de cdigo vamos a ver cmo agregar funcionalidad al Control DataGrid con VB .NET Entre las funcionalidades que agregaremos estn el poder agregar columnas calculadas dinmicamente al DataGrid, poder darle formato a las columnas, poder evitar o permitir agregar ms registros en el DataGrid (el registro que aparece al final del DataGrid con un asterisco *), poder validar las teclas presionadas por el usuario a fin de permitir solo nmeros o bien convertir las letras minsculas a MAYSCULAS y finalmente el poder sumar una columna completa de manera rpida y colocar su resultado dinmicamente en un control Label.

'************************************************************************* *** '* Cdigo realizado por Eduardo Puchades Fuentes (Mexicano) ;-) * '************************************************************************* *** Public Class Form1 Inherits System.Windows.Forms.Form #Region "Cdigo generado por el Diseador de Windows Forms"

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

#End Region Private Sub CheckBox5_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox5.CheckedChanged ' Aqu cambiamos el valor de AllowNew para ' evitar o permitir agregar registros ' a nuestro DataGrid Dim Valor As Boolean If sender.Checked = True Then Valor = False Else Valor = True End If 'Instanciamos y creamos nuestro manejador Dim cm As CurrencyManager cm = CType(BindingContext(DataSet1, Me.DataSet1.Tables(0).TableName), CurrencyManager) 'Instanciamos y creamos un DataView asociado a nuestro manejador CurrencyManager Dim Dv As DataView = CType(cm.List, DataView) 'Asignamos el valor que deseamos para evitar o permitir nuevos registros Dv.AllowNew = Valor End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Cargamos nuestro DataSet leyendo nuestro archivo XML que contiene los datos Me.DataSet1.ReadXml("..\Datos.xml") 'Asignamos el DataSource y el DataMember de nuestro DataGrid Me.DataGrid1.DataSource = Me.DataSet1 Me.DataGrid1.DataMember = Me.DataSet1.Tables(0).TableName End Sub Private Sub CheckBox2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox2.CheckedChanged 'Aqu vamos a agregar una columna en tiempo de ejecucin 'llamada Cantidad para que el usuario pueda cambiar la cantidad If sender.Checked = True Then 'Cambiamos el estado del cursor poniendo un reloj de arena Me.Cursor = System.Windows.Forms.Cursors.WaitCursor 'Declaramos una variable de DataColumn y creamos la columna Dim MiColum As DataColumn = New DataColumn MiColum.DataType = System.Type.GetType("System.Int32") MiColum.AllowDBNull = False MiColum.DefaultValue = 1 MiColum.Caption = "Cantidad" MiColum.ColumnName = "Cantidad" 'Agregamos la columna a la coleccin de columnas del DataSet1 Me.DataSet1.Tables(0).Columns.Add(MiColum) 'Regresamos el estado del cursor a normal Me.Cursor = System.Windows.Forms.Cursors.Default End If End Sub Private Sub CheckBox3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox3.CheckedChanged

Nombre de la asignatura: Parcial de estudio


'Aqu vamos a agregar una columna calculada dinmicamente 'y llamada SubTotal para multiplicar la columna Precio x cantidad

Programacin Visual Segundo parcial

If sender.Checked = True Then 'Verificamos que ya est agregada la columna de Cantidad If Me.DataSet1.Tables(0).Columns.Count = 3 And Me.CheckBox2.Checked = False Then Me.CheckBox2.Checked = True 'Cambiamos el estado del cursor poniendo un reloj de arena Me.Cursor = System.Windows.Forms.Cursors.WaitCursor 'Declaramos una variable de DataColumn y creamos la columna Dim MiColum As DataColumn = New DataColumn MiColum.DataType = System.Type.GetType("System.Decimal") MiColum.AllowDBNull = False MiColum.DefaultValue = 1 MiColum.Caption = "Sub Total" MiColum.ColumnName = "SubTotal" 'Aplicamos el tipo de operacin que deseamos MiColum.Expression = "Precio * Cantidad" 'Agregamos la columna a la coleccin de columnas del DataSet1 Me.DataSet1.Tables(0).Columns.Add(MiColum) 'Regresamos el estado del cursor a normal Me.Cursor = System.Windows.Forms.Cursors.Default End If End Sub Private Sub CheckBox4_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox4.CheckedChanged 'Aqu vamos a agregar una columna calculada dinmicamente 'y llamada Impuesto para multiplicar la columna SubTotal x .1 If sender.Checked = True Then 'Verificamos que ya est agregada la columna de Subtotal If Me.DataSet1.Tables(0).Columns.Count <= 4 And Me.CheckBox3.Checked = False Then Me.CheckBox3.Checked = True 'Cambiamos el estado del cursor poniendo un reloj de arena Me.Cursor = System.Windows.Forms.Cursors.WaitCursor 'Declaramos una variable de DataColumn y creamos la columna Dim MiColum As DataColumn = New DataColumn MiColum.DataType = System.Type.GetType("System.Decimal") MiColum.AllowDBNull = False MiColum.DefaultValue = 1 MiColum.Caption = "Impuesto" MiColum.ColumnName = "Impuesto" 'Aplicamos el tipo de operacin que deseamos MiColum.Expression = "SubTotal * .1" 'Agregamos la columna a la coleccin de columnas del DataSet1 Me.DataSet1.Tables(0).Columns.Add(MiColum) 'Regresamos el estado del cursor a normal Me.Cursor = System.Windows.Forms.Cursors.Default End If End Sub Private Sub CheckBox6_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox6.CheckedChanged 'Aqu vamos a agregar una columna calculada dinmicamente 'y llamada Total para sumar la columna Subtotal + Impuesto If sender.Checked = True Then 'Verificamos que ya est agregada la columna de Impuesto If Me.DataSet1.Tables(0).Columns.Count <= 5 And Me.CheckBox4.Checked = False Then Me.CheckBox4.Checked = True 'Cambiamos el estado del cursor poniendo un reloj de arena Me.Cursor = System.Windows.Forms.Cursors.WaitCursor

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

'Declaramos una variable de DataColumn y creamos la columna Dim MiColum As DataColumn = New DataColumn MiColum.DataType = System.Type.GetType("System.Decimal") MiColum.AllowDBNull = False MiColum.DefaultValue = 1 MiColum.Caption = "Total" MiColum.ColumnName = "Total" 'Aplicamos el tipo de operacin que deseamos MiColum.Expression = "SubTotal + Impuesto" 'Agregamos la columna a la coleccin de columnas del DataSet1 Me.DataSet1.Tables(0).Columns.Add(MiColum) 'Regresamos el estado del cursor a normal Me.Cursor = System.Windows.Forms.Cursors.Default End If End Sub

Private Sub DataGrid1_CurrentCellChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid1.CurrentCellChanged 'Aqu vamos a sumar toda la columna llamada Total 'Comprobamos que nuestro DataGrid tenga nuestra columna llamada Total If Me.CheckBox7.Checked = True And Me.DataSet1.Tables(0).Columns.Count = 7 Then 'Declaramos una variable objeto Dim objSum As Object ' Y Ocupamos la Funcin Compute del DataTable para sumar y asignar el valor a la variable ' Note que estamos ocupando el Nombre de la columna agregada como Total en Sum(Total) ' y despus de la coma estamos agregando un filtro para que sume nicamente los registros donde el ' Valor de la columna Total es mayor que 0, as evitamos que al utilizar nmeros negativos ' Estos ocasionen un resultado inesperado, puede ocupar ese filtro para sumar nicamente ' Los registros de un producto determinado o un producto con descuento por ejemplo. objSum = Me.DataSet1.Tables(0).Compute("Sum(Total)", "Total > 0") ' Convertimos el resultado a un string y le damos formato de Moneda Me.Label1.Text = Format(CStr(objSum), "Currency") End If End Sub Private Sub CreaFormato() 'Aqu vamos a aplicar un formato a nuestro DataGrid 'y vamos a validar las teclas presionadas en las columnas Precio y Cantidad 'Borramos la tabla de estilos en el DataGrid si es que existe Me.DataGrid1.TableStyles.Clear() 'Instanciamos y creamos una nueva tabla de estilos Dim TableStyle1 As New DataGridTableStyle 'Le indicamos el nombre de la tabla de nuestro DataSet TableStyle1.MappingName = Me.DataSet1.Tables(0).TableName 'Creamos un formato de celdas Alternando el color blanco del fondo 'con un color gris claro TableStyle1.AlternatingBackColor = Color.LightGray 'Instanciamos y creamos nuestro primer formato de columna Dim TextCol1 As New DataGridTextBoxColumn 'Le indicamos el nombre de la columna

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

TextCol1.MappingName = "IDProducto" 'Le indicamos el nombre que deseamos aparezca en el encabezado de la columna TextCol1.HeaderText = "IDProducto" 'Le indicamos el ancho de la columna TextCol1.Width = 70 'Agregamos nuestro formato de columna a la coleccin de nuestra Tabla de estilos TableStyle1.GridColumnStyles.Add(TextCol1) 'Instanciamos y creamos nuestro segundo formato de columna Dim TextCol2 As New DataGridTextBoxColumn 'Le indicamos el nombre de la columna TextCol2.MappingName = "Nombre" 'Le indicamos el nombre que deseamos aparezca en el encabezado de la columna TextCol2.HeaderText = "Nombre" 'Le indicamos el ancho de la columna TextCol2.Width = 120 'Agregamos nuestro formato de columna a la coleccin de nuestra Tabla de estilos TableStyle1.GridColumnStyles.Add(TextCol2) Atencin! 'Aqu vamos a instanciar y crear nuestro tercer formato de columna 'Pero puede usted notar que estoy ocupando una clase llamada 'DataGridTextBoxColumnSoloNumeros esta clase es una clase que previamente he 'Creado y esta clase es un componente heredado de DataGridTextBoxColumn 'A esta clase heredada le he agregado la Funcionalidad de permitirnos 'Validar las teclas que presionan los usuarios, evitando de esta manera 'que inserten letras donde solo deben ir nmeros. 'En esta clase tambin he agregado un ejemplo para poder convertir 'las teclas presionadas por el usuario de minsculas a MAYSCULAS 'Instanciamos y creamos nuestro Tercer Formato de columna 'ocupando la clase antes mencionada Dim TextCol3 As New DataGridTextBoxColumnSoloNumeros 'Le indicamos que la alineacin la queremos del lado derecho TextCol3.Alignment = HorizontalAlignment.Right 'Le indicamos el nombre de la columna TextCol3.MappingName = "Precio" 'Le indicamos el nombre que deseamos aparezca en el encabezado de la columna TextCol3.HeaderText = "Precio" 'Le indicamos el ancho de la columna TextCol3.Width = 60 'Aqu con la letra "c" le estamos indicando que queremos un formato currency (Moneda) TextCol3.Format = "c" 'Agregamos nuestro formato de columna a la coleccin de nuestra Tabla de estilos TableStyle1.GridColumnStyles.Add(TextCol3) 'Instanciamos y creamos nuestro Cuarto Formato de columna 'ocupando la clase antes mencionada Dim TextCol4 As New DataGridTextBoxColumnSoloNumeros 'Le indicamos que la alineacin la queremos del lado derecho TextCol4.Alignment = HorizontalAlignment.Right 'Le indicamos el nombre de la columna TextCol4.MappingName = "Cantidad" 'Le indicamos el nombre que deseamos aparezca en el encabezado de la columna TextCol4.HeaderText = "Cantidad" 'Le indicamos el ancho de la columna TextCol4.Width = 60 'Aqu con la letra "g" le estamos indicando que queremos un formato de nmero general TextCol4.Format = "g" 'Agregamos nuestro formato de columna a la coleccin de nuestra Tabla de estilos

Nombre de la asignatura: Parcial de estudio


TableStyle1.GridColumnStyles.Add(TextCol4)

Programacin Visual Segundo parcial

'Instanciamos y creamos nuestro segundo formato de columna Dim TextCol5 As New DataGridTextBoxColumn 'Le indicamos que la alineacin la queremos del lado derecho TextCol5.Alignment = HorizontalAlignment.Right 'Le indicamos el nombre de la columna TextCol5.MappingName = "SubTotal" 'Le indicamos el nombre que deseamos aparezca en el encabezado de la columna TextCol5.HeaderText = "Sub total" 'Le indicamos el ancho de la columna TextCol5.Width = 60 'Aqu con la letra "c" le estamos indicando que queremos un formato currency (Moneda) TextCol5.Format = "c" 'Agregamos nuestro formato de columna a la coleccin de nuestra Tabla de estilos TableStyle1.GridColumnStyles.Add(TextCol5) 'Instanciamos y creamos nuestro segundo formato de columna Dim TextCol6 As New DataGridTextBoxColumn 'Le indicamos que la alineacin la queremos del lado derecho TextCol6.Alignment = HorizontalAlignment.Right 'Le indicamos el nombre de la columna TextCol6.MappingName = "Impuesto" 'Le indicamos el nombre que deseamos aparezca en el encabezado de la columna TextCol6.HeaderText = "Impuesto" 'Le indicamos el ancho de la columna TextCol6.Width = 60 'Aqu con la letra "c" le estamos indicando que queremos un formato currency (Moneda) TextCol6.Format = "c" 'Agregamos nuestro formato de columna a la coleccin de nuestra Tabla de estilos TableStyle1.GridColumnStyles.Add(TextCol6) 'Instanciamos y creamos nuestro segundo formato de columna Dim TextCol7 As New DataGridTextBoxColumn 'Le indicamos que la alineacin la queremos del lado derecho TextCol7.Alignment = HorizontalAlignment.Right 'Le indicamos el nombre de la columna TextCol7.MappingName = "Total" 'Le indicamos el nombre que deseamos aparezca en el encabezado de la columna TextCol7.HeaderText = "Total" 'Le indicamos el ancho de la columna TextCol7.Width = 60 'Aqu con la letra "c" le estamos indicando que queremos un formato currency (Moneda) TextCol7.Format = "c" 'Agregamos nuestro formato de columna a la coleccin de nuestra Tabla de estilos TableStyle1.GridColumnStyles.Add(TextCol7)

Me.DataGrid1.TableStyles.Add(TableStyle1) End Sub Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged If sender.Checked = True Then CreaFormato() Else Me.DataGrid1.TableStyles.Clear() End If

Nombre de la asignatura: Parcial de estudio


End Sub End Class

Programacin Visual Segundo parcial

Aqu termina el cdigo del Form1 NOTA: Este cdigo no incluye la seccin de cdigo generado por el diseador de Windows Forms. Esta es la clase heredada de DataGridTextBoxColumn para validar las teclas presionadas en el DataGrid. Option Strict Off Option Explicit On Imports Imports Imports Imports Microsoft.VisualBasic System System.ComponentModel System.Windows.Forms

Public Class DataGridTextBoxColumnSoloNumeros Inherits DataGridTextBoxColumn Public Sub New() MyBase.New() AddHandler Me.TextBox.KeyPress, New System.Windows.Forms.KeyPressEventHandler(AddressOf HandleKeyPress) End Sub Private Sub HandleKeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) 'Aqu puede cambiar el cdigo para que el usuario nicamente presione letras 'o para cambiar las letras minsculas por MAYSCULAS con el ejemplo siguiente 'If e.KeyChar.IsLower(e.KeyChar) Then ' e.KeyChar.ToUpper(e.KeyChar) 'End If 'Ignora la tecla presionada si no es dgito o tecla de control If e.KeyChar.IsDigit(e.KeyChar) Then e.Handled = False ElseIf e.KeyChar.IsControl(e.KeyChar) Then e.Handled = False Else e.Handled = True End If 'Ignora la tecla presionada si el valor es ms grande de cuatro dgitos If ((Me.TextBox.Text.Length >= 4) AndAlso Not (e.KeyChar.IsControl(e.KeyChar)) AndAlso Me.TextBox.SelectionLength = 0) Then e.Handled = True End If End Sub End Class Enlace de Datos con ADO .NET y DATA Bind http://www.elguille.info/colabora/NET2005/Percynet_EnlaceDatos_ParteI.htm

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

Para mayor referencia puede consultar esta pgina y descargarse los archivos digitales como ejemplos. Enlace o vinculacin de datos - Parte I El enlace de datos es el mecanismo proporcionado por la plataforma .NET, que en aplicaciones con interfaz Windows o en aplicaciones Web enlaza objetos contenedores de datos con los controles de formulario, para poder realizar operaciones de navegacin y edicin. Es as que, este artculo explicar cmo colocar un conjunto de datos en un formulario Windows y cmo permitir a los usuarios interactuar con el conjunto de datos a travs de los controles de formulario Windows. Aprender tambin, cmo vincular datos SQL Server a los controles de formulario Windows tales como adjuntar datos a cuadros de texto, lista combinadas y cuadrculas de datos. Cabe resaltar que este artculo se limita a la vinculacin de datos en formularios Windows y no a formularios Web Forms, dado que a la naturaleza de las pginas de formularios Web Forms y a la arquitectura de la programacin Web, el enlace de datos en este tipo de pginas difiere ligeramente del efectuado en otros formularios ms tradicionales, como los formularios Windows Forms. NOTA Para la comprensin de este artculo usted debe conocer conceptos bsicos acerca de ADO NET. Si usted no tiene conocimientos en ADO .NET, revise los siguientes artculos sobre la Arquitectura y Funcionalidad de ADO .NET, tanto en modo conectado como en modo desconectado. Arquitectura y Funcionalidad de ADO .NET (Conectado) Arquitectura y Funcionalidad de ADO .NET (Desconectado) Tipos de Data Binding o enlace a datos Simple Data Binding. Consiste en una asociacin entre un control que puede mostrar un nico dato y el objeto que acta como contenedor de datos, como por ejemplo el enlace entre un control TextBox o un label y un objeto DataColumn de una DataTable de un DataSet. Complex Data Bindings. Este tipo de enlace es posible entre un control que puede actuar como interfaz o visualizador de datos debido a que dispone de la capacidad de mostrar varios o todos los datos, normalmente ms de un registro, del objeto contenedor de datos. Esto se utiliza normalmente en controles DataGrid ("grilla"), ListBox o ErrorProvider. Un ejemplo clsico viene a ser el enlace entre una grilla y un objeto DataTable de un DataSet. Elementos del Data Binding Es posible enlazar datos (Databind) con los controles de formularios Windows, no solamente desde orgenes de datos tradicionales (como DataSets ADO .NET), sino tambin a casi cualquier estructura que contenga datos como estructuras, colecciones, propiedades y otros controles. Cualquier objeto que deriva de la clase Control tiene una coleccin de tipo ControlBindingsCollection (expuesta en la propiedad DataBinding) que puede tener objetos Binding (para enlazar). El mecanismo de enlace automtico de datos a controles est compuesto por un elevado conjunto de elementos del conjunto de tipos del .NET Framework, entre clases, colecciones, enumeraciones, etc. Entre ellos tenemos: Binding Clase que permite crear un enlace (Binding) para un control indicando algunos parmetros, donde el primer parmetro es la propiedad de destino, el segundo parmetro es el objeto origen que contiene todos los datos y el tercer parmetro es el campo origen en el objeto origen. Cuando hay una modificacin en la propiedad de destino, el cambio tambin se hace para el objeto Origen. Si el objeto es un Dataset, los datos de la base de datos no son modificados. El Dataset debe ser sincronizado con la base de datos. Por ejemplo, puede vincular el campo ContactName y un control TextBox1 de la siguiente manera: Me.SqlDataAdapter1.Fill(Me.DataSet11, "Customers")

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

Dim bind As Binding bind = New Binding("Text", Me.DataSet11, "Customers.Contactname") 'otra manera de configurar nuestro enlace es usando este cdigo. 'bind = New Binding("Text", Me.DataSet11.Tables("Customers"), "Contactname") Me.TextBox1.DataBindings.Add(bind) BindingContext Propiedad de la clase Form que representa el contexto de enlace a datos establecido en los controles del formulario, es decir, toda la informacin de enlaces establecida entre los controles y objetos proveedores de datos. Devuelve un objeto de tipo BindingManagerBase o administrador base de enlaces de datos. Cada objeto que herede de la clase Control puede tener un slo objeto BindingContext. Ese objeto BindingContext administra los objetos BindingManagerBase para ese control y cualquier control que est incluido. Hay que utilizar BindingContext con el fin de crear o devolver BindingManagerBase para un origen de datos utilizado por los controles con enlace a datos incluidos. Normalmente, se utiliza el objeto BindingContext de la clase Form con el fin de devolver objetos BindingManagerBase para los controles con enlace a datos del formulario. Si se utiliza un control contenedor, como GroupBox, Panel o TabControl, para incluir controles con enlace a datos, se puede crear un objeto BindingContext slo para ese control contenedor y sus controles. De este modo, cada parte de un formulario puede ser administrada por su propio objeto BindingManagerBase. BindingMangerBase Objeto que se encarga de administrar un conjunto de objetos de enlace, por ejemplo, los de un formulario obtenidos a travs del BindingContext del formulario. Para devolver un objeto BindingManagerBase concreto, es necesario pasar uno de los siguientes parmetros a la propiedad Item: 1. Slo el origen de datos, si el objeto BindingManagerBase que se desea no requiere una ruta de desplazamiento. Por ejemplo, si BindingManagerBase administra un conjunto de objetos Binding que usan ArrayList o DataTable como DataSource, no se requiere ninguna ruta de desplazamiento. Origen de datos y ruta de desplazamiento. La ruta de desplazamiento (establecida en el parmetro DataMember de la propiedad Item) es obligatoria cuando BindingManagerBase administra un conjunto de objetos Binding cuyo origen de datos contiene mltiples objetos. Por ejemplo, DataSet puede contener varios objetos DataTable vinculados mediante objetos DataRelation. En tal caso, se requiere la ruta de desplazamiento para permitir que BindingContext devuelva el objeto BindingManagerBase correcto.

2.

Yo le aconsejara que siempre opte por manejar una ruta de desplazamiento, an cuando est manejando un origen de datos sencillo como un slo DataTable, de esta manera, se evitarn algunas complicaciones y podrn ser ms "formales". NOTA: Algo a resaltar es que una de las caractersticas interesantes en el desarrollo con Visual Basic .NET es la posibilidad de vincular cualquier propiedad de un control visible, como su propiedad BackColor o ForeColor, a una columna de datos. De esta manera, existe la posibilidad de que un origen de datos local controle dinmicamente el formato de un formulario as como los datos que muestra el formulario. Ejemplo ilustrativo... A continuacin mostrar un ejemplillo donde tras rellenar el conjunto de datos (usando el asistente de configuracin de objetos ADO .NET ) asociado a un formulario, haremos referencia al conjunto de datos mediante los controles de formulario. Para vincular los controles de formulario a las columnas del conjunto de datos (una sola tabla) y que los cuadros dependan de la pulsacin de nuestros botones navegadores se necesitan unas

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

cuantas lneas de cdigo o tambin puede hacerlo en tiempo de diseo (esto le ahorrara bastante tiempo). Esencialmente se trata de navegar los registros cuyos campos son CustomerId, CompanyName, ContactName, ContactTitle de la tabla Customers de la base de datos Northwind, para esto previamente debi vincularse los respectivos controles TextBox a cada una de estas columnas. Como le deca, esta vinculacin puede hacerse en tiempo de diseo o en tiempo de ejecucin, personalmente, lo hice en tiempo de diseo, pero no se alarme, que a continuacin le enseo a hacerlo de ambas maneras. Para que se vaya haciendo una idea acerca de lo que ver, all le va la interfaz del formulario.

Esto es fcil. Siga los siguientes pasos para implementar el ejemplo: 1. Debe generar el conjunto de datos (tan slo los campos CustomerId, CompanyName, ContactName, ContactTitle de la tabla Customers), mediante el asistente de configuracin de ADO .NET. 2. Ahora agregue cuatro controles TextBox sobre su formulario Windows y en la propiedad DataBinding de cada uno de los controles debe establecer el campo a enlazar, como se aprecia en la siguiente imagen:

Opcionalmente puede hacerlo mediante cdigo. Y esto sera: Dim AdministradorBaseDeEnlaces As BindingManagerBase Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles MyBase.Load

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

'Rellenamos nuestro contenedor de datos Me.SqlDataAdapter1.Fill(Me.MisDatos1, "Customers") 'Establecemos la vinculacin para cada uno de los controles TextBox. Dim Bind As Binding Bind = New Binding("Text", Me.MisDatos1, "Customers.CustomerId") Me.TextBox1.DataBindings.Add(Bind) Bind = Nothing Bind = New Binding("Text", Me.MisDatos1, "Customers.CompanyName") Me.TextBox2.DataBindings.Add(Bind) Bind = Nothing Bind = New Binding("Text", Me.MisDatos1, "Customers.ContactName") Me.TextBox3.DataBindings.Add(Bind) Bind = Nothing Bind = New Binding("Text", Me.MisDatos1, "Customers.ContactTitle") Me.TextBox4.DataBindings.Add(Bind) Bind = Nothing 'Finalmente obtenemos del contexto de enlace de nuestro 'formulario un objeto administrador que nos servir para navegar 'cada uno de los registros de la tabla customers. AdministradorBaseDeEnlaces = Me.BindingContext(Me.MisDatos1, "Customers") End Sub Sobre la base del cdigo anterior, este sera el resto de cdigo que hace posible la navegacin de los registros. Private Sub Navegar(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles Button1.Click, Button2.Click, Button3.Click, Button4.Click If sender Is Me.Button1 Then Me.AdministradorBaseDeEnlaces.Position = _ Me.AdministradorBaseDeEnlaces.Position.MinValue ElseIf sender Is Me.Button2 Then Me.AdministradorBaseDeEnlaces.Position += 1 ElseIf sender Is Me.Button3 Then Me.AdministradorBaseDeEnlaces.Position -= 1 ElseIf sender Is Me.Button4 Then Me.AdministradorBaseDeEnlaces.Position = _ Me.AdministradorBaseDeEnlaces.Position.MaxValue End If End Sub 3. Despus de realizar la vinculacin (en tiempo de diseo) debemos implementar la funcionalidad de nuestros botones navegadores. Y esto sera todo el cdigo: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles MyBase.Load 'Rellenamos nuestro contenedor de datos Me.SqlDataAdapter1.Fill(Me.MisDatos1, "Customers") End Sub Private Sub Navegar(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles Button1.Click, Button2.Click, Button3.Click, Button4.Click If sender Is Me.Button1 Then Me.BindingContext(Me.MisDatos1, Me.BindingContext(Me.MisDatos1, ElseIf sender Is Me.Button2 Then Me.BindingContext(Me.MisDatos1, ElseIf sender Is Me.Button3 Then Me.BindingContext(Me.MisDatos1, "Customers").Position = _ "Customers").Position.MinValue "Customers").Position += 1 "Customers").Position -= 1

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

ElseIf sender Is Me.Button4 Then Me.BindingContext(Me.MisDatos1, "Customers").Position = _ Me.BindingContext(Me.MisDatos1, "Customers").Position.MaxValue End If End Sub NOTA: Le recomiendo que la vinculacin de datos lo haga, en la medida posible, en tiempo de diseo, ya que es ms rpido, fcil y se necesita menos cdigo, de esta manera se evitar unos pequeos dolores de cabeza durante la depuracin de cdigo. 4. Hasta aqu hemos terminado. Ahora tiene que ir navegando cada uno de los registros de la tabla customers.

Como habr notado, es relativamente sencillo realizar este tipo de vinculacin. Vnculo de un DataSet con un Control DataGrid Una vez terminado de explicar el ejemplo de Enlace Simple de Datos o Simple DataBinding, pasaremos a aprender algo ms divertido, se trata de cmo implementar la vinculacin Compleja de Datos usando controles un poco ms complicados como por ejemplo una grilla, un ListBox... pero por esta vez usar la Grilla. Para esto agregaremos un control DataGrid en el formulario, este control se va a enlazar con la tabla Customers de la base de datos Northwind. A travs de este formulario podemos editar los registros de la tabla y aadir nuevos; al trabajar en desconexin, hasta que no pulsemos el botn Actualizar de este formulario, el objeto DataAdapter no actualizar los datos del DataSet hacia la base de datos fsica. Observe que he modificado los campos City y Country en el primer registro de la grilla. Luego de actualizar, un mensaje nos avisar que los cambios han sido guardados. Una forma prctica de verificar esto, es volver a cargar la aplicacin, la cual contendr los cambios que haya realizado.

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

Ahora dejo a su disposicin todo el cdigo que hace posible la ilustracin anterior. Imports System.Data.SqlClient Public Class Form1 Inherits System.Windows.Forms.Form 'CDIGO GENERADO POR EL DISEADOR DE WINDOWS FORMS Public DataSet As New DataSet Public Adapter As SqlDataAdapter Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles MyBase.Load Me.StatusBar1.Panels(0).Text = "Percy Reyes:: Los peruanos S podemos !" Dim SQL_CONECTION_STRING As String = "Server=localhost;" & _ "DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5" Dim oConection As New SqlConnection(SQL_CONECTION_STRING) Dim SQL_COMMAND_STRING As String = "Select CustomerID,CompanyName,ContactName," & _ "ContactTitle,Address,City,Country From Customers" Adapter = New SqlDataAdapter(SQL_COMMAND_STRING, oConection) Dim oCommandBuilder As SqlCommandBuilder = New SqlCommandBuilder(Adapter) DataSet = New DataSet Adapter.Fill(DataSet, "Clientes") Me.DataGrid1.DataSource = DataSet Me.DataGrid1.DataMember = "Clientes" End Sub Private Sub BtnActualizar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles BtnActualizar.Click If DataSet.HasChanges Then Adapter.Update(DataSet, "Clientes") Me.StatusBar1.Panels(0).Text = "Los cambios han sido guardados." Me.Timer1.Enabled = True Me.Timer1.Start() End If

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

End Sub Public i As Integer Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles Timer1.Tick If i = 5 Then i=0 Timer1.Stop() Timer1.Enabled = False Me.StatusBar1.Panels(0).Text = "Percy Reyes: Los peruanos S podemos!" Else i += 1 Me.StatusBar1.Panels(0).Text = " " Me.StatusBar1.Panels(0).Text = Space(2 * i) & "Los cambios han sido guardados." End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles Button1.Click End End Sub End Class Relacin Maestro/Detalles en dos DataGrid Es posible configurar las propiedades del DataGrid de tal manera que nos permita visualizar ms de una tabla, permitiendo al usuario elegir cualquiera de las tablas que se muestran en l, tambin podemos trabajar con tablas relacionadas, permitindonos obtener, de esta manera, las filas hijas, relacionadas con la fila seleccionada de la tabla padre. Este control implementa de forma transparente todos los mecanismos necesarios gracias al DataBinding, por lo que, una vez creada la relacin, slo hemos de asignar a su propiedad DataSource, la tabla padre del DataSet. Podemos separar la visualizacin de las tablas maestro detalle en dos DataGrid independientes. Para sincronizar ambos controles, debemos asignar al que actuar como detalle, una cadena con el nombre de la tabla maestra, junto con el nombre de la relacin empleando el siguiente formato: TablaMaestra.Relacion. Ms adelante muestro un sencillo ejemplo de cmo lograr esto. Sigamos. Como le deca, en muchas ocasiones las aplicaciones tienen que trabajar con tablas relacionadas. Aunque un conjunto de datos contiene tablas y columnas al igual que una base de datos, no incluye intrnsecamente la capacidad de las bases de datos para relacionar tablas. No obstante, se pueden crear objetos DataRelation que establezcan una relacin entre una tabla primaria (maestra) y una tabla secundaria (de detalle) sobre la base de una clave comn. El objeto DataRelation puede ejecutar dos funciones:

Puede poner a su disposicin los registros relacionados con el registro con el que est trabajando. Proporciona registros secundarios cuando se est en un registro primario y un registro primario si se est trabajando con un registro secundario. Puede exigir restricciones de integridad referencial, como la eliminacin de los registros secundarios relacionados cuando se elimina un registro primario.

NOTA: Es importante comprender la diferencia entre una combinacin autntica y la funcin de un objeto DataRelation. En una combinacin autntica, los registros se toman de tablas primarias y secundarias y se ponen en un nico conjunto de registros planos. Cuando se utiliza un objeto DataRelation no se crea ningn conjunto de registros nuevo. En su lugar, se hace un seguimiento de la relacin entre las tablas y se mantienen sincronizados los registros primarios y secundarios. Ejemplo

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

Para esta ilustracin emplearemos dos tablas (Categories y Products) de la base de datos Northwind. Estableceremos la relacin maestro-detalle entre estas dos tablas a travs de la columna CategoryId. Luego de hacer esto, escribiremos el cdigo necesario para visualizar la tabla detalle "Productos" en otra DataGrid de acuerdo con la fila seleccionada en la tabla padre "Categorias".

All le dejo con el cdigo para que lo revise y espero sea de utilidad. Imports System.Data.SqlClient Public Class Form1 Inherits System.Windows.Forms.Form 'CDIGO GENERADO POR EL DISEADOR DE WINDOWS FORMS Public DataSet As New DataSet Public AdapterCategories As SqlDataAdapter Public AdapterProducts As SqlDataAdapter Dim SQL_CONECTION_STRING As String = "Server=localhost;" & _ "DataBase=Northwind;Integrated Security=SSPI;Connect Timeout=5" Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles MyBase.Load Me.StatusBar1.Panels(0).Text = "Percy

Nombre de la asignatura: Parcial de estudio


Reyes:: Los peruanos S podemos !"

Programacin Visual Segundo parcial

Dim oConection As New SqlConnection(SQL_CONECTION_STRING) Dim SQL_STRING_CATEGORIES As String = "Select CategoryID,CategoryName,Description From Categories" Dim SQL_STRING_PRODUCTS As String = "Select ProductID,ProductName, SupplierID, " & _ " CategoryID,QuantityPerUnit,UnitPrice,UnitsInStock, UnitsOnOrder From Products" AdapterCategories = New SqlDataAdapter(SQL_STRING_CATEGORIES, oConection) Dim oCommandBuilder1 As SqlCommandBuilder = New SqlCommandBuilder(AdapterCategories) AdapterProducts = New SqlDataAdapter(SQL_STRING_PRODUCTS, oConection) Dim oCommandBuilder2 As SqlCommandBuilder = New SqlCommandBuilder(AdapterProducts) DataSet = New DataSet AdapterCategories.Fill(DataSet, "Categorias") Me.DataGrid1.DataSource = DataSet Me.DataGrid1.DataMember = "Categorias" AdapterProducts.Fill(DataSet, "Productos") Me.DataGrid2.DataSource = DataSet DataSet.Relations.Add("Categorias_Productos", DataSet.Tables("Categorias").Columns("CategoryId"), _ DataSet.Tables("Productos").Columns("CategoryId")) Me.DataGrid2.DataMember = "Categorias.Categorias_Productos" Me.DataGrid1.CaptionText = "Tabla maestra: " & _ UCase(DataSet.Relations("Categorias_Productos").ParentTable.TableName.ToString()) End Sub Private Sub BtnActualizar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles BtnActualizar.Click If DataSet.HasChanges Then AdapterCategories.Update(DataSet, "Categorias") AdapterProducts.Update(DataSet, "Productos") Me.StatusBar1.Panels(0).Text = "Los cambios han sido guardados." Me.Timer1.Enabled = True Me.Timer1.Start() End If End Sub Public i As Integer Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As

Nombre de la asignatura: Parcial de estudio


System.EventArgs) _ Handles Timer1.Tick If i = 5 Then i=0

Programacin Visual Segundo parcial

Timer1.Stop() Timer1.Enabled = False Me.StatusBar1.Panels(0).Text = "Percy Reyes:: Los peruanos S podemos!" Else i += 1 Me.StatusBar1.Panels(0).Text = " " Me.StatusBar1.Panels(0).Text = Space(2 * i) & "Los cambios han sido guardados." End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles Button1.Click End End Sub Private Sub DataGrid1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) _ Handles DataGrid1.MouseDown Try 'este cdigo nos permite capturar el contenido de la celda actual, e informar al usuario sobre la lista de productos por categora. Dim Hit As DataGrid.HitTestInfo Hit = Me.DataGrid1.HitTest(e.X, e.Y) If Hit.Type = DataGrid.HitTestType.Cell Then Me.DataGrid2.CaptionText = "Tabla detalle: Lista de " & _ UCase(DataSet.Relations("Categorias_Productos").ChildTable.TableName.ToString()) & _ "de " & Mid(UCase(DataSet.Relations("Categorias_Productos").ParentTable.TableName.ToString()), _ 1, DataSet.Relations("Categorias_Productos").ParentTable.TableName.Length - 1) _ & Space(1) & Microsoft.VisualBasic.UCase(Me.DataGrid1(Hit.Row, 1)) End If Catch ex As Exception Me.DataGrid2.CaptionText = "Tabla detalle: Lista VACA " End Try End Sub End Class Espacios de nombres usados en el cdigo de este artculo: System.Data System.Data.SqlClient

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

Actividades de aprendizaje
Actividad de aprendizaje 2.1.
Tomando de referencia el material entregado Acceso a datos con ADO_NET (PDF), realice los siete (7) casos de conexin a las bases de datos (desde la pgina 23 a la 27 del material que se encuentra en la Seccin Contenidos), para esto usted puede usar bases de datos ya creadas que existen en los motores de base de datos (SQL Server, Microsoft Access, Oracle, MySQL) o crear una base de prueba. Por favor, documente este trabajo en Word del funcionamiento de la conexin.

Planteamiento

Orientaciones didcticas

Recuerde que deber documentar en Word cada programa que vaya creando, con el cdigo fuente que program o digit (no imprima el cdigo fuente que la herramienta inserta en forma automtica), tambin debe capturar las pantallas de corridas con datos de prueba y comprimir los archivos. El archivo comprimido debe incluir el documento de Word con el desarrollo de la gua y el cdigo fuente de cada programa, de faltar alguno de ellos su nota tendr una rebaja del 50% del puntaje correspondiente a cada actividad.

Actividad de aprendizaje 2.2.


Planteamiento Acceso a datos con ADO_NET (PDF): Ejercicio 1 (pgina 27), Ejercicio 2 (pgina
28), Ejercicio 3 (pgina 29), Ejercicio 4 (pgina 30). Realice los siguientes ejercicios del tema Consultas a bases de datos del archivo

Revise el material que se encuentra en la Seccin CONTENIDOS. Recuerde que deber documentar en Word cada programa que vaya creando, con el cdigo fuente que program o digit (no imprima el cdigo fuente que la herramienta inserta en forma automtica), tambin debe capturar las pantallas de corridas con datos de prueba y comprimir los archivos. El archivo comprimido debe incluir el documento de Word con el desarrollo de la gua y el cdigo fuente de cada programa, de faltar cada alguno de ellos su nota tendr una rebaja del 50% del puntaje correspondiente a cada actividad.

Orientaciones didcticas

Actividad de aprendizaje 2.3.


Planteamiento del archivo Acceso a datos con ADO_NET (PDF): Ejercicio 37 (pp. 69, 70, 71 y
72), Ejercicio 38 (pp. 72 y 73). Realice los siguientes ejercicios del tema Mantenimiento de una tabla (p. 67)

Revise el material que se encuentra en la Seccin Contenidos.

Orientaciones didcticas

Recuerde que deber documentar en Word cada programa que vaya creando, con el cdigo fuente que program o digit (no imprima el cdigo fuente que la herramienta inserta en forma automtica), tambin debe capturar las pantallas de corridas con datos de prueba y comprimir los archivos. El archivo comprimido debe incluir el documento de Word con el desarrollo de la

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

gua y el cdigo fuente de cada programa, de faltar cada alguno de ellos su nota tendr una rebaja del 50% del puntaje correspondiente a cada actividad.

Actividad de aprendizaje 2.4.


Utilizando todos los conocimientos aprendidos de formularios, mens, MDI y base de datos realice lo siguiente: Cree una aplicacin que permita automatizar el proceso de registro de solicitudes, toma de exmenes atrasados y cambios de centro. Para esto usted debe disear la Base de Datos con las siguientes tablas: Estudiante, Materias, Centros de Apoyo, Semestres. La aplicacin debe informacin de las Materias, las que eliminar, consultar y contar con los formularios de administracin de tablas Estudiante, Semestres, Centros de Apoyo, deben incluir las operaciones de crear, modificar, los cursores de movimiento de registro.

Planteamiento

Su aplicacin debe contar con formularios MDI (men principal) y formularios contenedores por cada opcin de men. La aplicacin debe contar con un formulario de seguridad que pida usuario y clave al inicio de la aplicacin. No aada ms requerimientos ya que los dems requisitos se pedirn en la siguiente gua.

Revise el material de la Seccin Contenidos. Recuerde que deber documentar en Word cada programa que vaya creando, con el cdigo fuente que program o digit (no imprima el cdigo fuente que la herramienta inserta en forma automtica), tambin debe capturar las pantallas de corridas con datos de prueba y comprimir los archivos. El archivo comprimido debe incluir el documento de Word con el desarrollo de la gua y el cdigo fuente de cada programa, de faltar alguno de ellos su nota tendr una rebaja del 50% del puntaje correspondiente a cada actividad.

Orientaciones didcticas

Actividad de aprendizaje 2.5.


Contine con la aplicacin que se plante en la actividad de aprendizaje anterior y agregue los siguientes requisitos: Cree la tabla o tablas la que permitan registrar la informacin de una solicitud para rendir examen atrasado o con cambio de centro (investigue qu informacin se pide en la solicitud para exmenes atrasados y cambios de centro). Cree los formularios de administracin de informacin de la tabla registro de solicitudes, la que debe incluir las operaciones de crear, modificar, eliminar y los cursores de movimiento de registro. Por cada formulario o tabla deber generarse un reporte e impresin. Cree los siguientes reportes: o Reporte de estudiantes que rinden exmenes por cambio de centro

Planteamiento

Nombre de la asignatura: Parcial de estudio


o o

Programacin Visual Segundo parcial


Reporte de estudiantes que rinden exmenes por fechas de examen Reporte de estudiantes que rinden exmenes por centro de apoyo

Documente la creacin del instalador del sistema.

Orientaciones didcticas

Entregue el proyecto en un CD, el que contendr: el programa instalador del sistema, fuentes y base de datos. Usted deber enviar el CD con lo solicitado la primera semana de los segundos exmenes, al centro de apoyo 50 a las oficinas de la Carrera de la Tecnologa en Computacin.

Enviar a

Enve la gua didctica a travs de la plataforma, mediante la Seccin Contenidos, en un archivo cuyo nombre debe ser: Formato: G#.Apellido.Apellido.Nombre.Asignatura

Preguntas o dudas

Enve sus preguntas o dudas a travs de la plataforma: utilice la seccin Enviar correo y marque el nombre de su tutor.

El tutor de la asignatura

Nombre de la asignatura: Parcial de estudio

Programacin Visual Segundo parcial

Puntaje por Actividad


Actividad 3 Actividad Actividad Actividad Actividad Actividad de de de de de aprendizaje aprendizaje aprendizaje aprendizaje aprendizaje 2.1. 2.2. 2.3. 2.4. 2.5. Puntaje 2 2 2 5 9

Tarea a Tarea b Tarea c Tarea d

1.5 puntos 3 puntos 3 puntos 1.5 puntos


Total 20

También podría gustarte