Maestro-Detalle con UltraWinGrid 2004

Parte Num #2
 

Fecha: 02/Feb/2005 (01/02/05)
Autor: Por: Lic. Giovanni Cuadra Reyes
Email: giovanni_cuadra@hotmail.com

Managua, Nicaragua.

La nueva comunidad de desarrollo!!!

 


La segunda parte del articulo UltraWinGrid 2004 (ver la primera parte) tiene como objetivo exponer dos métodos los cuales serán utilizados con el espacio de nombre Nicasoft.Net.v1.0.2005.dll versión final. Estos dos métodos que expondré a continuación son:

A continuación explicare el uso de estos dos métodos que expondré:

PRINTPREVIEW

Este método tiene como objetivo mostrar en forma preliminar un reporte en formato Crystal Report .Net para Microsoft Visual Basic Express 2005. Dicho método requiere tres parámetros, de los cuales dos son requeridos y uno es opcional. A continuación muestro los nombres de estos tres elementos:

FINDPOSITION

Este método tiene como objetivo principal, buscar un registro dentro de un dataset utilizando el índice de la posición en el cual se encuentra en memoria. Dicho método requiere cuatro parámetros que son requeridos. A continuación muestro los nombres de estos cuatro elementos:

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.

Algo importante, es el mencionar que este ejemplo es una versión modificada del primer articulo sobre como crear un formulario maestro-detalle con el control UltraWinGrid 2004, no obstante quiero explicar que las única modificaciones en esta segunda parte son los métodos mencionados anteriormente, por lo tanto el código es el mismo y solo expondré el código nuevo.

En esta versión final del espacio de nombre Nicasoft.Net.v1.0.2005.dll, no expongo método alguno para conexión a bases de datos Microsoft Access u otros origines de datos que no sea Microsoft SQL Server 7.0 o 2000. Es importante recalcar que este ejemplo fue probado en la versión 2000 de SQL Server.

En versiones futuras incluiré algunas características nuevas que quizás serán atractivas, entre las cuales conexiones a diferentes orígenes de datos. También preparare un archivo de ayuda indicando el uso del resto de los métodos, así como ejemplos que podrán llevar de la mano en el aprendizaje y quizás sea un control para simplificar algunas tareas cotidianas.

Iniciare por mostrar el formulario con las nuevas modificaciones:

El cuadro combinado buscar contiene un control de tipo ComboBox el cual es cargado en tiempo de ejecución con todas las categorías de productos de la tabla categorías de la base de datos NorthWind, a la par se muestra un botón el cual tiene como objetivo que una vez que el dato fue seleccionado del control o lista se hace clic en el botón y manda a disparar el método FindPosition para buscar la posición de ese registro dentro del dataset en memoria. A continuación muestro el código:

El método FillDataSet, tiene como objetivo primordial el cargar en el Dataset no tipado DataCatProducts_NorthWind los datos en memoria, en este caso exclusivamente los del catálogo. Esto se hace con el objetivo de obtener los nombres del catalogo para crear la búsqueda con este tipo de criterio y aplicarla al resto del formulario y el reporte.

El control cboB_Categoria, es llenado en tiempo de ejecución utilizando como datasource el dataset temporal detallado anteriormente. La propiedad DisplayMember, permite mostrar las filas originarias de la columna CategoryName y la propiedad ValueMember la columna del ID de cada uno de los nombres de las categorías, en este caso CategoryID.

A continuación muestro un fragmento de código:

datSource.FillDataSet(Me.SqlCn, Me.DataCatProducts_NorthWind, Me.SqlDatCategorias)

With Me.cboB_Categoria

      .DataSource = Me.DataCatProducts_NorthWind

      .DisplayMember = "Categories.CategoryName"

     .ValueMember = "Categories.CategoryID"

End With

Una vez que todo esto se encuentra debidamente configurado pasamos a escribir el código que permitirá encontrar la categoría seleccionado dentro del cuadro de lista anteriormente descrito:

Private Sub btnB_Categoria_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnB_Categoria.Click

                    '--Capturar el No. Pos del elemento del combo.

                    Dim Pos As Integer = Me.cboB_Categoria.SelectedIndex

                    '--Mandar a buscar el elemento al DataSet central y tabla principal

                    '--pasar el Index Pos del elemento seleccionado.

                    datSource.FindPosition(Me.DataNorthWind1, "Categories", Me, Pos)

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

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

End Sub

A continuación mostrare el formulario en tiempo de ejecución al realizar una búsqueda, utilizando el código mostrado anteriormente. Quiero recalcar en los requerimientos mencionados al inicio de este artículo ya que sin ellos no obtendremos conocimiento de la operación del código fuente así como el efecto que este producirá.

Como se puede observar en esta primera figura. En la lista, selecciono la categoría a buscar, en este caso selecciono Seafood, en la figura dos se observará el efecto posterior.

 

En la siguiente presentación muestro el registro después de ser seleccionado y encontrado según el índice que posee en el dataset en memoria.

Si observas tanto en el código de ejemplo como en el formulario son ejemplos totalmente sencillos. Pues en el caso del fragmento de código expuesto en relación de la búsqueda son unas pocas líneas de código para realizar algo muy fácil y rápido que de alguna forma pueden sacar de apuro a cualquiera o en un idioma más sencillo simplificarte el tiempo y resolverte un problema.

A continuación expondré el fragmento de código para enviarle instrucciones al motor de Crytal Report .Net la orden de mostrar un reporte en forma preliminar. Aquí se podrá observar también unas cuantas líneas de código que pueden quizás simplificarte un poco de trabajo y tiempo.

Private Sub btnP_Products_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnP_Products.Click

                    Dim Filename As String = App.Path & "\..\Report\crNorthWind_CatProducts.rpt"         '--Path y nombre del archivo.

                    Dim Filter As String = "{Categories.CategoryName}='" & Me.txtCat.Text & "'"                '--Filtro del archivo.

                    '--El método manda abrir el formulario prediseñado en CR .Net

                    '--El Filter es opcional. Si lo pasas aplica el filtro de tipo SelectionFormula

                    '--de lo contrario carga todos los registros en el reporte.

                    '--El FileName es el nombre del archivo de reporte.

                    '--El Me.DataNorhtWind1 es el DataSource que se le pasa dinámicamente a CR .net

                    '--El reporte esta diseñado en la versión 10 de CR .Net

                    Printer.PrintPreview(Filename, Me.DataNorthWind1, Filter)

 

End Sub

Estas tres líneas de código incluyendo las variables declaradas e inicializadas, más el método que permite lanzar al reporte en vista preliminar son las que se requieren para echar andar el ejemplo. La variable Filename se inicializa al ser declarada, en esta forma se concatena una instancia de clase denominada App con la propiedad Path, esta mezcla App.Path es muy parecida a la de VB6.0, diría que tienen prácticamente el mismo significado e utilización, ya que permite ubicar el directorio de la aplicación ejecutable y con el atajo \..\Report\crNorthWind_CatProducts.rpt puedo ubicar la dirección de localización del archivo del reporte.

La variable Filter es declarada e inicializada inmediatamente con la instrucción {Categories.CategoryName}=Me.txtCat.Text, la cual tiene como objetivo enviarle al reporte o al motor de este un nombre de categoría el cual será filtrado y mostrado en la vista preliminar de datos.

La última instrucción Printer.PrintPreview(Filename,Me.DataNorthWind,Filter) es la que invoca al formulario prediseñado que hace referencia a Crystal Report .Net.

A continuación muestro el formulario de ejemplo en la vista preliminar de datos. El registro que mostrare es el mismo donde efectué la búsqueda ya anteriormente expuesta.

 

EN RESUMEN

Esta segunda entrega tiene como objetivo mostrar algunas de las bondades que nos presta Visual Basic Express 2005 Beta 1, ya que este espacio de nombres que expongo fue diseñado en dicha versión con el propósito de recalcar que en cada nueva versión de Visual Basic, viene tan mejorado que se escribe menos código cada día y esto trae como consecuencia que las personas que trabajamos en este tipo de profesión hagamos las cosas más rápido y de forma más eficiente.

Espero que este ejemplo sea de ayuda y que produzca mejores ideas de las que expongo aquí, ya que en este tipo de trabajo siempre las cosas se hacen diferentes y con un mayor grado de eficiencia.

Quiero mencionar que uno de mis objetivo con este espacio de nombres Nicasoft.Net.v1.0.2005.dll es el de tratar de simplificar de alguna forma algunos pequeños pero sencillos procesos de programación que a veces nos beneficia mucho al entregar en tiempo y forma nuestro trabajo. Quizás con estos métodos que expongo se pueda solucionar algunas cosas de forma temporal o definitiva, porque la mayoría de nosotros encontramos una solución y después la mejoramos.

Pero quizás que mi mayor aporte sea, el de brindarle a toda la comunidad pequeñas y sencillas ideas para el beneficio del día a día.

 


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

Nicasoft.Net.v1.0.2005 (Versión final)

System.Data.SqlClient

System.Data

 


Fichero con el código de ejemplo: gcuadra_UltraWindGrid_2004_Fuentes2.zip - Tamaño 114 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/

Además ahí encontrarás las actualizaciones que se hagan a dicha DLL.

 


ir al índice