Maestro-Detalle con UltraWinGrid 2004
 

Fecha: 25/Ene/2005 (24/01/05)
Autor: Lic. Giovanni Cuadra Reyes
Email: giovanni_cuadra@hotmail.com

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