Maestro-Detalle con UltraWinGrid 2004
 

Fecha: 25/Ene/2005 (24/01/05)
Autor: Lic. Giovanni Cuadra Reyes
Email: [email protected]

Managua, Nicaragua.

La nueva comunidad de desarrollo!!!

 


Lo que explicare a continuaci�n es un ejemplo para un formulario Maestro-Detalle, utilizando una versi�n de UltraWinGrid de Infragistics NetAdventage 2004 Volumen 3. El cual puedes descargar la versi�n de prueba desde el sitio  http://www.infragistics.com/

Desde que obtuve la primera versi�n Beta de Microsoft Visual Studio 2005, me he puesto a evaluar Microsoft Visual Basic 2005 Beta 1, e ir comparando las diferencias y mejoras entre la �ltima versi�n de Visual Basic .Net 2003 y la versi�n Beta 1 de Visual Basic 2005, por lo cual he encontrado numerosas mejoras as� como grandes diferencias que vienen a simplificar aun m�s el desarrollo de software en la nueva generaci�n en .NetFramework 2.0 Beta 1.

En este articulo explicare la forma en c�mo se puede utilizar el UltraWinGrid de Infragistics en Visual Basic .Net 2005. Para comenzar mencionare los requerimientos para poder ejecutar el proyecto de ejemplo:

REQUERIMIENTOS

� VB .Net 2005 Beta 1

� Microsoft Windows XP o superior.

� Mem�ria m�nima 256 RAM.

� Espacio en disco duro de por lo menos 10 Gigas o m�s.

� El software de Infragistics NetAdventage 2004 Volumen 3 (Por lo menos el software de prueba). El cual lo puedes descargar de http://www.infragistics.com/

� Microsoft SQL Server 2000 o superior.

El proyecto va acompa�ado de un archivo en formato texto, el cual contiene comentarios de cada l�nea de c�digo escrito y del Namespace Nicasoft.dll Beta 1. El cual m�s adelante hablare con m�s detalle acerca de este.

Una vez que ya tengas instalado los requerimientos de software, lo que tienes que hacer es ir a VB .Net 2005 Beta 1 y abrir el proyecto de ejemplo. Recuerda cambiar el nombre del servidor de datos de SQL Server, ya que el que yo estoy usando es el de Mi Pc localmente, y si no cambias el nombre del servidor lo m�s seguro es que te enviara un mensaje de error, as� que recuerda cambiarlo.

El proyecto de ejemplo utiliza un Namespace denominado Nicasoft.dll Beta 1, el cual proporciona una interfaz muy amigable para el acceso de los objetos de ADO.NET. En esta primera versi�n Beta de Nicasoft.dll, solo puede conectar bases de datos de Microsoft SQL Server 7 o 2000, no lo he probado en versiones superiores, pero cuando tenga listo la versi�n final de Nicasoft.dll muy seguro que agrego esa caracter�stica, incluyendo conectarse a bases de datos de otros entornos como Access  etc.

A continuaci�n muestro algunos de los formularios del proyecto fuente de este ejemplo:

 


Este primer formulario corresponde el esquema relacional de las dos tablas que utilizaremos para el proyecto de ejemplo maestro-detalle. Recuerda que esto se genero cuando se creo el dataset mediante los SqlAdapter. Menciono esto porque VB .Net 2005, trae con el una nueva interfaz de conexi�n a datos, denominada DataSource, TableAdapter, el cual viene a simplificar los pasos en la creaci�n de la conexi�n a una base de datos. Pero en este caso quiero mostrar que se pueden seguir utilizando perfectamente la interfaz de conexi�n de VB .NET 2003 sin ning�n problema. As� que puedes migrar perfectamente tus aplicaciones en las versiones anteriores de VB .NET. La base de datos de ejemplo es la com�nmente conocido como Northwind que es la que trae instalada SQL Server. Las dos tablas que se utilizan son la de las categor�as y productos, las cuales se pueden apreciar en el formulario.

  

El siguiente formulario muestra un poco de la interfaz del editor de c�digo de VB .NET 2005.

 

Toda la codificaci�n se encuentra bien documentada, para explicar que es lo que procesa cada l�nea escrita. M�s adelante en este mismo articulo anexo toda la p�gina de c�digo totalmente documentada.

  

A continuaci�n mostrare el formulario de datos en modo de dise�o.

 

 

Aqu� se puede observar varios controles, unos son propios de VB .NET 2005 y otros como es el caso del UltraWinGrid, UltraWinLabel el cual no pertenece a dicha herramienta de programaci�n.

Si observas el UltraWinGrid no se encuentra conectado a ninguna base de datos en tiempo de dise�o todo se hace en ejecuci�n, el cual mostrare el c�digo m�s adelante.

Hay que recordar descargar la versi�n de Infragicstic NetAdventage 2004 Volumen 3, ya que se requiere para poder ejecutar el ejemplo.

A continuaci�n muestro el explorador de soluciones el cual muestra cuales son los archivos dentro del proyecto que se est�n utilizando.

 

 

Aqu� se puede apreciar los archivos contenidos en el proyecto, como por ejemplo el formulario, el archivo XSD que es el que contiene el esquema relacional entre las dos tablas, as� como tambi�n archivos generados autom�ticamente por  VB .NET 2005.

A continuaci�n muestro la estructura de las dos tablas relacionadas que son las que se utilizar�n en todo el proyecto.

De forma grafica se puede apreciar los campos que contienen cada tabla y de forma intuitiva se puede observar de qu� tipo son cada unos de estos.

   

A continuaci�n muestro una p�gina de propiedades en el cual se puede apreciar la forma de c�mo se puede enlazar un control TextBox en tiempo de dise�o a un DataSet.

 

A continuaci�n muestro la secci�n donde se exponen el resto de los controles utilizados en el proyecto.

 

 

Aqu� se puede apreciar los objetos de conexi�n, los adaptadores de datos, el dataset y el control ToolTip.

Estos son el resto de controles utilizados para el funcionamiento del proyecto de ejemplo.

A continuaci�n muestro el c�digo fuente del proyecto, el cual esta documentado y que puedes usar para tus pruebas con VB .NET 2005 y no olvides de usar el Namespace Nicasoft.dll Beta 1, ya que con este te simplificas mucho tiempo en codificaci�n.

'--Esta forma de declaraci�n de este Nasmespace es un atajo para contener en la variable ns

'--solo las clases de Nicasoft.dll Beta 1.

Imports ns = Nicasoft

''' <summary>

''' Este es un ejemplo de un formulario maestro detalle en Microsoft Visual Basic Express Edition Beta 1.

''' Dicho ejemplo utiliza el Namespace Nicasoft.dll Beta 1 el cual permite acceder a la clase AcccessDataBase

''' La cual manipula funciones de ADO.NET. Como por ejemplo el de acceder a una base de datos de

''' Microsoft SQL Server 2000, utilizando los objetos de la clase SqlClient del Namespace System.Data de

''' Microsoft .NetFramework 2.0 Beta.

'''

''' En este ejemplo mencionare algunas de las clases y m�todos, propiedades que utilizo pero

''' creare un archivo de ayuda en formato chm para detallar mas espeficiamente

''' lo que hace cada una de las clases, as� como sus m�todos y propiedades en el Namespace Nicasoft.dll Beta 1

'''

''' En este ejemplo utilizo las siguientes clases del Namespace Nicasoft.dll Beta 1:

'''   AccessDatabase:

'''         Esta clase permite manipular las funciones de ADO.NET para la versi�n

'''         de .NetFramework 2.0 Beta.

'''         En esta primera versi�n del Namespace de Nicasoft.dll solo

'''         se pueden manipular bases de datos de SQL Server 7.0 o superior

'''         Dicha clase posee formas para editar una base de datos

'''         como por ejemplo: Posee un m�todo AddNew que es el que permite

'''         insertar datos a una tabla de base de datos SQL Server

'''         Un m�todo Update para actualizar datos que fueron modificados.

'''         En fin la clase AccessDataBase posee muchos m�todos que pueden

'''         ser de gran utilidad a los desarrolladores en VB .NET 2005

'''  Application:

'''        Esta clase permite manipular funciones tales como la pulsaci�n

'''        de teclas para saltar de un control a otro, dicha funci�n

'''        es la SendKeyIntro. La cual se muestra en este ejemplo su uso.

'''        En el evento KeyPress del control TextBox.

'''

'''        Otro m�todo que expongo en este ejemplo es el de utilizar el control

'''        ToolTip de Vb.net en forma de c�digo, el cual esta declarado

'''        en el evento Load del formulario.

''' </summary>

''' <remarks>

''' Como se puede apreciar con este Namespace las cosas se hacen un poco mas simplificadas

''' ya que todos el c�digo se encuentra encapsulado y no se requiere repetirlo nuevamente

''' en otro formulario, haciendo un Copy to Paste, solo se requiere la instancia al Namespace

''' Nicasoft.dll Beta 1 y despu�s el uso de las clases y m�todos que se requieren necesarias

''' utilizar.

''' </remarks>

Public Class frmProductos

 

    Dim datSource As New ns.AccessDatabase  '--M�todos a funciones de ADO.NET

    Dim AppSendKey As New ns.Application    '--M�todos a funciones varias.

    Dim AppToolTip As New ns.Application    '--M�todos a funciones varias.

 

    Private Sub frmProductos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

 

        Dim objDataSetTemp As New DataNorthWind

 

 

        Try

 

            '--Aqu� expongo el m�todo FillDataSet el cual requiere:

            '--El objeto de conexi�n, que es el que permite entregar

            '--el nombre de la base de datos, as� como tambi�n la informaci�n del servidor

            '--en donde se encuentra la misma.

            '--El segundo objeto que se requiere es de tipo DataSet el posee toda la informaci�n

            '--de la tabla o las tablas y/o consultas que se utilizaran en el formulario de datos.

            '--Luego se requiere como tercer par�metro la informaci�n que posee los SqlData Adapters

 

            '--Con este m�todo declarado se puede conectar a la base de datos, enviando un mensaje

            '--en tiempo de ejecuci�n se logra o no la conexi�n al servidor de datos.

            datSource.FillDataSet(Me.SqlCn, objDataSetTemp, Me.SqlDatProductos, Me.SqlDatCategorias)

 

            '--Para poder crear la relaci�n maestro detalle, inicio con las siguientes instrucciones:

 

            '--Limpiar completamente el DataSet donde se exponen las tablas que se utilizaran.

            Me.DataNorthWind1.Clear()

            '--Limpiar el DataSource del grid y quitarle cualquier objeto que en tiempo de dise�o

            '--tenga asignado.

            Me.grdProductos.DataSource = Nothing

 

            '--En estas dos �ltimas instrucciones creo la sincronizaci�n entre la tabla

            '--principal y tabla secundaria.

            Me.DataNorthWind1.Merge(objDataSetTemp)

            '--Con el m�todo SetDataBinding del grid le paso dos par�metros:

            '--El primero es el dataset que contiene las dos tablas que se relacionaran

            '--el segundo par�metro es el nombre de la relaci�n entre las dos tablas

            '--la cual se encuentra el esquema XML del archivo XSD del proyecto.

            '--Le ante pongo el nombre de la tabla principal y luego el nombre de la relaci�n

            '--que tienen estas.

            Me.grdProductos.SetDataBinding(Me.DataNorthWind1, "Categories.FK_Products_Categories")

 

            '--Con el m�todo RecordCount permito contar e imprimirlo en un label.

            '--este m�todo es de el Namespace Nicasoft.dll Beta 1.

            '--Aqu� paso tres par�metros, el primero es el DataSet del sistema

            '--el segundo, es la tabla principal, este caso porque es un maestro-detalle

            '--y el ultimo al formulario que va afectar.

            Me.lblCountRecord.Text = datSource.RecordCount(Me.DataNorthWind1, "Categories", Me)

 

            '--Aqu� mando a escribir los Tip en cada control al cual le asigno un comentario de

            '--ayuda.

            '--Aqu� uso tres par�metros, uno es el control u objeto al que le asignare el Tip

            '--el segundo es el nombre de control ToolTip y el tercero es el mensaje.

            With AppToolTip

                .ToolTipControl(Me.btnFirts, Me.TtNicasoft, "Ir al inicio")

                .ToolTipControl(Me.btnNext, Me.TtNicasoft, "Ir al siguiente")

                .ToolTipControl(Me.btnPrev, Me.TtNicasoft, "Ir al anterior")

                .ToolTipControl(Me.btnLast, Me.TtNicasoft, "Ir al �ltimo")

                .ToolTipControl(Me.btnPrint, Me.TtNicasoft, "Vista preliminar de datos")

                .ToolTipControl(Me.btnCerrar, Me.TtNicasoft, "Cerrar y salir del sistema")

                .ToolTipControl (Me.txtIdCat, Me.TtNicasoft, "Id. de la categor�a")

                .ToolTipControl(Me.txtCat, Me.TtNicasoft, "Nombre de la categor�a")

                .ToolTipControl(Me.txtDescripCat, Me.TtNicasoft, "Descripci�n del categor�a")

                .ToolTipControl(Me.picFotoCat, Me.TtNicasoft, "Foto del producto")

            End With

        Catch ex As Exception

            '--Este es un mensaje por si ocurre un error.

            MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")

        End Try

 

 

 

    End Sub

 

    Private Sub btnFirts_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFirts.Click

        '--Con el m�todo MoveFirst hago que se mueva la primer registro del conjunto

        '--que tiene la tabla o tablas del sistema.

        datSource.MoveFirst(Me.DataNorthWind1, "Categories", Me)

        '--Aqu� mando a refrescar el contador de registro

        Me.lblCountRecord.Text = datSource.RecordCount(Me.DataNorthWind1, "Categories", Me)

    End Sub

 

    Private Sub btnPrev_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrev.Click

        '--Con el m�todo MovePrevius hago que se mueva registro anterior del conjunto

        '--que tiene la tabla o tablas del sistema.

        datSource.MovePrevius(Me.DataNorthWind1, "Categories", Me)

        '--Aqu� mando a refrescar el contador de registro

        Me.lblCountRecord.Text = datSource.RecordCount(Me.DataNorthWind1, "Categories", Me)

    End Sub

 

    Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNext.Click

        '--Con el m�todo MovePrevius hago que se mueva siguiente registro del conjunto

        '--que tiene la tabla o tablas del sistema.

        datSource.MoveNext(Me.DataNorthWind1, "Categories", Me)

        '--Aqu� mando a refrescar el contador de registro

        Me.lblCountRecord.Text = datSource.RecordCount(Me.DataNorthWind1, "Categories", Me)

    End Sub

 

    Private Sub btnLast_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLast.Click

        '--Con el m�todo MovePrevius hago que se mueva al �ltimo registro del conjunto

        '--que tiene la tabla o tablas del sistema.

        datSource.MoveLast(Me.DataNorthWind1, "Categories", Me)

        '--Aqui mando a refrescar el contador de registro

        Me.lblCountRecord.Text = datSource.RecordCount(Me.DataNorthWind1, "Categories", Me)

    End Sub

 

    Private Sub btnCerrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCerrar.Click, btnPrint.Click

 

        '--Aqui cierro y salgo del sistema.

        With Me

            .Dispose()

            .Close()

        End With

 

        End

       

    End Sub

 

    Private Sub txtIdCat_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtIdCat.KeyPress

        '--Salta al siguiente control seg�n TabIndex.

        AppSendKey.SendKeyIntro(e)

    End Sub

 

    Private Sub txtIdCat_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtIdCat.ValueChanged

 

    End Sub

 

    Private Sub txtCat_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtCat.KeyPress

        '--Salta al siguiente control seg�n TabIndex.

        AppSendKey.SendKeyIntro(e)

    End Sub

 

    Private Sub txtCat_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtCat.ValueChanged

 

    End Sub

 

    Private Sub txtDescripCat_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtDescripCat.KeyPress

        '--Salta al siguiente control seg�n TabIndex.

        AppSendKey.SendKeyIntro(e)

    End Sub

 

    Private Sub txtDescripCat_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtDescripCat.ValueChanged

 

    End Sub

End Class

 

Al final que todo este listo para ejecutar el proyecto aparecer� un formulario de esta forma:

 

Como observas puedes navegar entre registros del Dataset mediante los botones de navegaci�n, ir adelante, ir atr�s, ir al primero o al �ltimo registr�. Puedes observar el contador de registros, as� como tambi�n el bot�n cerrar y un bot�n imprimir que m�s adelante modificare este ejemplo para que aprendas a utilizar Cristal Report .Net para VB .NET 2005 utilizando un Dataset en tiempo de ejecuci�n.

Si quieres utilizar el Namespace de Nicasoft.dll Beta, perfectamente puedes hacerlo, solo tienes que seguir los pasos del proyecto de ejemplo. Este Namespace no se limita �nicamente a acceso a bases de datos con ADO .NET, tiene mucho mas, m�todos como por ejemplo abrir aplicaciones, archivos de cualquier tipo de extensi�n sin necesidad de decirle con que aplicaci�n abrirlo. Tambi�n posee m�todos para acceder a los archivos de ayuda con formato chm, una clase de seguridad, clases para calcular impuestos, trae tambi�n una clase integrada con funciones de SQL, como por ejemplo el totalizar registros con la funci�n SUM entre otras, pero que estas �ltimas que estoy mencionando est�n en Beta aun, ya que las que he logrado probar son las que expongo en el ejemplo. M�s adelante cuando este lista la versi�n final del componente completo, creare un archivo de ayuda detallando su uso y significado, por el momento espero que sean de utilidad las aqu� expuestas.

No he podido probar si este Namespace creado en la VB .NET 2005 pueda utilizarse sin problemas en versiones anteriores como la VB .NET 2003, as� cualquiera que haga esa prueba me informa sin funciona o no, para tomar en cuenta algunas restricciones al crear la versi�n final.

Espero que este ejemplo sea de utilidad no solo a los programadores que utilizan otros tipos de grid de datos, si no tambi�n a todos aquellos que desean saber algunas ideas de c�mo construir formularios maestros-detalles, ya que la codificaci�n de este proyecto es estandar, ya que puede ser usado el grid que trae el mismo VB .NET integrado, solo se requiere utilizar la propiedad SetDataBinding del objeto y listo. El resto de los pasos de codificaci�n son los mismos.

M�s adelante transformare este ejemplo y les mostrare como editar una base de datos (Agregar registros, Actualizar registros, Eliminar, Buscar e imprimir etc). Por el momento les expongo una idea clave en el uso de formularios de tipo maestros-detalles.

 

 


Espacios de nombres usados en el c�digo de este art�culo:

Nicasoft.dll (Versi�n 1.0 Beta)


Fichero con el c�digo de ejemplo: gcuadra_UltraWindGrid_2004_Fuentes.zip - 41 KB

 

Para bajarte las DLLs del espacio de nombres Nicasoft Beta 1 puedes hacerlo desde este grupo de MSN:
http://groups.msn.com/Nicasoft-Net2005/

Cualquier duda que tengas se la puedes hacer al autor del art�culo.


ir al índice