Sie sind auf Seite 1von 103

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Desarrollo de Aplicaciones para la Plataforma Microsotf NET. usando VISUAL Basic.NET Objetivo Al finalizar el curso, el participante estar capacitado para: Conocer la estrategia Microsoft, NET y los componentes del Marco. NET. Describir la nuevas caractersticas de Visual Studio. NET Usar las nuevas caractersticas de Visual Basic. NET Crear aplicaciones para Windows mediante los Windows Forms. Acceder a bases de datos usando ADO.NET Crear y usar componentes. NET Crear Aplicaciones Web mediante ASP. NET Crear y usar Servicios Web XML.

Prerequisitos Curso programacin con Visual Basic 6.

Metodologa El curso se desarrolla integramente en el laboratorio de computacin a travs de resolucin de casos prcticos. El instructor utiliza audivisuales para presentar los temas y desarrolla ejemplos prcticos. CAPTULO 1: PLATAFORMA MICROSOFT.NET Microsoft .NET se compone de un conjunto de recursos que hacen posible su implementacin, estos componentes se muestran en la siguiente ilustracin:

2. Servidores Empresariales.NET
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Microsoft Exchange Server: Ofrece servicios de mensajera (correo electrnico) y colaboracin entre aplicaciones (workflow). Microsoft Host Integration Server: Realiza la comunicacin entre sistemas Cliente/Servidor, aplicaciones Intranet o Internet con los sistemas legados por el negocio, tales como Mainframe o AS/400. Microsoft Internet Security and Aceleration Server: Antes llamado Proxy Server, ISA Server se usa para brindar seguridad en las comunicaciones por Internet. Microsoft SQL Server: Es el servidor de datos de Microsoft que permite crear soluciones de Data Warehouse y se integra con Microsoft Office. 3. Bloque de Servicios .NET El Bloque de Servicios .NET se est construyendo como un conjunto de Servicios Web XML que permitan la integracin entre los usuarios y las aplicaciones clientes que corran en diferentes dispositivos (PCs, dispositivos mviles, etc). Actualmente Microsoft tiene construido dos servicios que ofrecen ventajas para los usuarios: Microsoft Passport: Tiene un conjunto de servicios como el Single Sign In (SSI) que permite autenticar si un usuario es vlido y puede participar en un sitio Web, aparte tiene otras ventajas como reducir el tiempo de autenticacin, guardar contenido personalizado. etc. Hotmail utiliza el servicio de Passport para la autenticacin de usuarios y guardar informacin de ste en el Web. Microsoft Hailstorm: Usa los servicios de Passport para guardar informacin personalizada del usuario, pero su uso principal es almacenar Servicios Web que puedan ser usados por aplicaciones de Visual Studio .NET o cualquier lenguaje compatible con .NET El Marco. NET Definiendo el Marco .NET Fl Marco .NET (en ingles .NET Framework) es la piedra angular de la plataforma .NET y constituye u.i enlomo para la creacin, distribucin y ejecucin de servicios Web, as como de otros tipos de aplicaciones. Se compone de cuatro partes principales que son: 1. Tiempo de F-jccucin en Lenguaje Comn (CLR) Es el RunTime comn para todos los lenguajes que soportan el Marco .NET y realiza la mayor pane de funciones para que corran las aplicaciones .NET, es el que se encarga de compilar \ ejecutar una aplicacin, as como administrar su trabajo con el sistema. 2. Librera de Clases .NET Son un conjunto de componentes que sirven para acceder a travs de objetos a la mayor parte de servicios del sistema, labor que era realizada antes por las APIs de Windows, la
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

MEC o ATL de Visual C++, etc. 3. ADO.NET.vXML ADO .NET se usa para acceder a cualquier origen de datos sea relacional (bases de datos), formatos planos (textos), etc. Por su parte, XML sirve como el formato para intercambiar los datos en diferentes plataformas. 4. ASP.NET Este componente incluye el soporte para la creacin, distribucin y mantenimiento de aplicaciones Web as como de Servicios Web XML que son la razn de ser de la plataforma .NET TIEMPO DE EJECUCIN EN LENGUAJE COMN (CLR) Introduccin al RunTime y al CLR Un RunTime es la aplicacin responsable de manejar la asignacin de memoria, inicio y eliminacin de procesos mientras un programa se est ejecutando, asi como de brindar seguridad al cdigo, y tambin gestionar su relacin con otros programas o componentes. l.os RunTime lian sido usados por los lenguajes de programacin como Visual Basic cuyo nombre es el VBRLN, Visual C++ cuyo nombre es MSVCRT. pero tambin Visual FoxPro, JScnpt, SmaIlTalk. Per!, Python. Java, etc. tienen su propio RunTime. Cada aplicacin Visual Basic 6 que se quera distribuir tenia que distribuirse con el RunTime, lo mismo en Visual C-H-, la diferencia que el primero ocupaba demasiado espacio y no era tan poderoso como el segundo. EL RunTime de .NET se llama el CLR (Common Language RunTime o Tiempo de Ejecucin en Lenguaje Comn) y es la solucin a los diferentes tipos de RunTime que manejan los diferentes lenguajes de programacin antes mencionados, que ahora sern gestionados en ejecucin por un nico RunTime comn. La ventaja de tener un solo RunTime son mltiples ya que se podr compartir las mismas estructuras, tipos de datos, clases, etc. en todos los lenguajes que cumplan las especificaciones del Marco .NET. Servidos del CLR El CLR es el motc(r de ejecucin de las aplicaciones del Marco .NET. Proporciona una serie de servicios, entre los que se incluyen los siguientes: Administracin del cdigo (carga y ejecucin). Aislamiento de la memoria de la aplicacin. Comprobacin de la seguridad de los tipos.
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Conversin del (Lenguaje Intermedio) a cdigo nativo Acceso a los metadatos (informacin de tipo mejorada) Administracin de memoria para los objetos administrados Aplicacin de seguridad de acceso al cdigo Control de excepciones, incluyendo excepciones en varios lenguajes Interoperabilidad entre el cdigo administrado, los objetos COM y las DLL anteriores (datos y cdigo no administrados) Automatizacin del diseo de objetos Suporte para servicios de desarrolladores (creacin de perfiles, depuracin, etc.) Sistema de auto registro o auto descripcin de componentes (no es necesario registrar el componente en el sistema) No es necesario los elementos de COM como GUIDs, interfases iLnknow, etc. Nota: Con esto decimos adis al problema de la compatibilidad de versiones de las dll. Esta informacin se utiliza en tiempo de ejecucin para resolver referencias, aplicar las directivas del enlace de versiones y validar la integridad de los ensambladores cargados. El tiempo de ejecucin puede determinar y ubicar el ensamblador para cualquier objeto de ejecucin, ya que todos los tipos se cargan en el contexto de un ensamblador. Asimismo, los ensambladores constituyen la unidad en la que se aplican los permisos de seguridad de acceso al cdigo. La prueba de identidad de cada ensamblador se considera individualmente cuando .se determinan los permisos que contiene para otorgar al cdigo. Espacio de Nombre Un espacio de nombre (NameSpace) es un esquema de denominacin lgica para los tipos en los que un nombre de tipo sencillo, como OLEDB. va precedido de un nombre jerrquico separado por puntos. Dicho esquema se encuentra totalmente bajo el control del desarrollador. Las herramientas de diseo pueden utilizar los espacios de nombre para facilitar a los desarrolladores el proceso de exploracin y referencia a los tipos en su cdigo. El concepto de espacio de nombre no est relacionado con el del ensamblador. Un nico ensamblador puede contener tipos cuyos nombres jerrquicos dispongan de distintas races de espacio de nombre y una raz lgica de este tipo puede abarcar varios ensambladores. En el Marco .NET. un espacio de nombre es una conveniencia lgica de denominacin en tiempo de diseo, mientras que un ensamblador establece el mbito de nombre para los tipos en tiempo de ejecucin.

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

En Visual Basic, por ejemplo para hacer uso de un Assemblie hay que usar los espacios de nombre con la declaracin [mports, por ejemplo si quisiramos acceder a datos con SQL Server y manejar archivos de texto en una aplicacin Windows realizaramos la siguiente declaracin: Imports System.Windows.Forms Imports System.Data.SQL Imports System.10 CAPITULO 2: VISUAL STUDIO .NET Lenguajes en .NET En Visual Studio .NET vienen los siguientes Lenguajes de Programacin: Visual Basic .NET Visual C# .NET Visual C++ .NET Visual FoxPro .NET (No administrado por el Marco .NET) Visual JScript .NET Adems de estos lenguajes, el Marco .NET soporta otros lenguajes, entre los cuales Destacan:

COBOL: http://wvvw.adtools.com/info/whitepaper/net.html/ Pascal: htlp://w\v\v2.tit.qut.cclu.;ni/('oinpSci/Pi..\S/7ComponfiitPascal/ Sinall Talk: http://wwvv.qks.com/ Eitfel: h(tp://dotnct.ritTeI.com/ MI-: http://research.inicrosoft.coin/Proccts/S.ML..\ET7iiidcx.htni APL: http://vvww.dvadic.com/ Oberon: http://www.obcron.ethz.ch/lightning/ Scheme: http://rovcr.cs.iiwu.edii/-scheme/ Mercur\: htt|):/7w vvw.cs.inu.o7.au/research/mercurv/ Python: http://aspn.activestate.com/ASPN/NET/indcv Haskell: http://haskell.cs.vale.edu/ghc/ Mondrian: http://www.moiidrian-script.org

Se ha dado el nombre de algunos lenguajes junto con sus respectivas pginas Web donde se puede encontrar informacin sobre estos e inclusive bajarse el compilador del lenguaje compatible con .NET. Figura 2.3: Listado de Lenguajes .NET
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

COBOL Jscript.NET Alice

Eiffel HastKell C

Mondrian ML VISUAL

Pascal APL C++

Visual Basic Visual C# Smalltalk

Entorno Integrado de Desarrollo (IDE) Descripcin del IDE Corporativo Visual Studio.NET tien un Entorno Integrado de Desarrollo nico o compartido para crear aplicaciones usando cualquiera de los Lenguajes de Programacin, que pueden ser Visual Basic. Visual C++ o C #. En esta nueva versin de Visual Studio, Visual FoxPro mantiene su propio IDE (similar al de la Versin 6), adems Visual InterDev ya no es parte de Visual Studio, ya que las herramientas de desarrollo para Web estn disponibles a travs de los Web Forms disponibles desde el IDE comn. Al iniciar Visual Studio. NET aparece (por defecto) la Pgina de Inicio, tal como se muestra en la Figura 1.2 Figura 2.4: Ventana de Inicio del Visual Studio. NET

Desde esa pgina de inicio podemos elegir la opcin Get Started para crear un nuevo proyecto o abril uno existente o reportar un error del IDE de Visual Studio, si elegimos New projet se presentar la Ventana que se muestra en la Figura 2.5. Figura 2.5 Ventana de Crear un Nuevo Proyecto

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Esta ventana est dividida 2 secciones: en el lado izquierdo se encuentran los tipos de proyectos que se pueden realizar (Visual Basic, Visual C, Visual C++,etc) y en el lado derecho se encuentra las plantillas o tipos de aplicaciones, que varan de acuerdo al tipo de proyecto. Si se elige Visual Basic o Visual C#, las plantillas se pueden dividir en tres: para Windows, para Web (Aplicaciones, Servicios, Librera de Clases, Librera de Controles, Proyecto Vaco) y de Consola. En el caso de elegir como tipo de proyecto Visual Basic y como plantilla Windows Application hay que seleccionar la ubicacin del nuevo proyecto y escribir el nombre de este, el cual crear una carpeta con el mismo nombre en el lugar seleccionado. A continuacin la figura 2.6 muestra el IDE compartido de Visual Studio. NET en el caso de elegir una Aplicacin para Windows. Figura 2.6: IDE Compartido de Visual Studio. NET

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Entre las partes del nuevo IDE de visual Studio. NET tenemos: 1. Menu Bar 2. ToolBars 3. Serve Explorer Windows (Ctrl+Alt+S) 4. ToolBox(Ctrl+Alt+X) 5. Output Windows (Ctrl+Alt+O) 6. Status Bar 7. Windows Form Designer 8. Solution Explorer Windows (Ctrl+R) 9. Properties Windows (F4) 10. Search Windows (Ctrl+Alt+F3) 11. Dynamic Hep Windows (Ctrl+F1) Existen nuevas ventanas en Visual Studio. NET entre las cuales tenemos: Class View (Ctrl+Shift+C) Resource View (Ctrl+Shift+E) Macro Explores (Alt+F8) Document Outline (Ctrl Alt+T) Task List (Ctrl+Alt+K) Command Windows (Ctrl+Alt+A)

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Find Symbol Results (Ctrl+Alt+Y) Find Symbols Results (Ctrl+Alt+Y) Diseadores Para realizar la construccin de aplicaciones o creacin de componentes o servicios disponemos de Diseadores que facilitan la labor de construccin de interfaces, creacin de sentencias, etc. La mayora de diseadores se habilitan al elegir una plantilla de Visual Studio. NET y casi todos generan cdigo al disear controles sobre el contenedor respectivo; caracterstica totalmente distinta a la forma de trabajo en Visual Basic 6, que ocultaba el cdigo generado por el diseador. Entre los diseadores que trae Visual Studio. NET tenemos: Windows Form Designer: Se muestra al elegir cualquiera de dos plantillas Windows Application o Windows Control Library, habilitando en el Toolbox los controles para Windows que sern usados para construir la interfase de la aplicacin arrastrando dichos controles hacia el formulario o control de usuario. Web Form Designer: Se muestra al elegir la plantilla Web Application habilitando en el Toolbox los controles para Web y los controles HTML que sern usados para construir la pgina Web que correr en el servidor IIS (archivo aspx) arrastrando dichos controles hacia el formulario Web. Component Designer: Este diseador se muestra al elegir una de dos plantillas: Class Library o Windows Service y tambin trabaja con los controles para windows creando una interfase reusable desde otra aplicacin. Web Service Designer: Sirve para disear servicios Web y es mostrado al elegir una plantilla Web Service, tambin trabaja con los controles para Windows, componentes, etc. Existen ms diseadores, pero que lo trataremos en la categora de herramientas de datos, debido al tipo de trabajo que realizan con datos, el cual se trata como tema siguiente. Herramientas de Datos Si se quiere realizar un trabajo rpido con datos, tal como modificar la estructura de la base de Datos, crear tablas, consultas, procedimientos almacenados, etc. existen herramientas que permiten realizar esta labor reduciendo enormentemte el proceso de desarrollo en el caso de hacerse por otros medios. Entre las principales herramientas que trabajan con datos tenemos:
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Server Explorer: Sin duda es una de las principales herramientras de Visual Studio. NET y no solo para acceder a datos sino para mostrar y administrar los diferentes servidores o recursos del sistema, tales como Base de Datos. Servicios Web, Aplicaciones COM+, etc. con solo arrastrar el objeto ste puede ser usado en una aplicacin. Tambin se tratar con mayor detalle en el mdulo de acceso a datos. Data Adapter Wizard: Es un Asistente que permite crear un DataAdapter que es un Comando (Select, Insert, Update, Delete) con el cual se podr general un conjunto de registros o Dataset. La misma funcin puede ser cubierta por el Server Explorer con solo arrartrar los campos hacia el formulario. Query Designer: Es un Diseador que permite crear Consultas SQL de manera sencilla arrastrando tablas o consultas sobre ste y eligiendo los campos que se vern en la consulta de datos, tambin se puede realizar filtros o especificar criterios de seleccin. Adems no solo se pueden construir consultas. Select sino tambin se pueden crear consultas Insert, Update o Delete, etc. DataBase Project: Es un tipo de plantilla que sirve para trabajar con una Base de Datos, para lo cual debe existir una conexin a un origen de datos, este tipo de proyecto da la posibilidad de crear y modificar scripts de creacin de tablas, consultas, vistas, desencadenantes, procedimientos almacenados, etc. Editor de Script: Uno de las principales herramientas para trabajar con base de datos remotas como SQL Server, Oracle, etc., es utilizar el editor de Script que permite crear tablas, consultas, vistas, etc. Mostrando con colores las sentencias o palabras reservadas del lenguaje Transact-SQL. Depurador de Procedimientos Almacenados: Visual Studio.NET incorpora un Depurador de Store Procedure que puede realizar seguimientos paso a paso por lnea de cdigo, por sentencia o por instruccin, adems crea puntos de interrupcin, permitiendo un mayor control y seguimiento del cdigo en caso de errores. Todas estas herramientas mencionadas, son nuevas en Visual Stuido. NET, ha excepcin del Query Builder que es el mismo de la versin anterior de Visual Studio. Como se habr dado cuenta muchas herramientas de acceso a datos de Visual Basic 6 han sido eliminadas, tales como: Data Environment, Data View, Data Report, y otras ms, pero en su reemplazo existen las que ya hemos mencionado. CAPITULO 3: VISUAL BASIC. NET

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Introduccin En los mdulos anteriores hemos tratado el Marco. NET y Visual Studio. NET, ahora trataremos Visual Basic. NET, pero hay que remarcar que las caractersticas del lenguaje depende del Marco. NET y las herramientas son compartidas por el IDE de Visual Studio. NET. Visual Basic. NET es la versin 7 de sta popular herramienta, sta ltima versin tiene cambios radicales, tanto en su concepcin (.NET), en el lenguaje, las herramientas usadas, etc. entre las nuevas caractersticas de Visual Basic. NET tenemos: Dos tipos de desarrollos bien diferenciados:

Aplicaciones para Windows Aplicaciones para Internet

Acceso a Datos usando ADO.NET, el cual permite trabajar con DataSets desconectados. Nuevo Depurador que permite realizar seguimiento de cdigo escrito en diferentes lenguajes. NET Creacin y us o de XML para intercambio de datos entre aplicaciones. Lenguaje Orientado a Objetos, con soporte de Herencia mltiple, y Polimorfismo a travs de la sobrecarga de propiedades, mtodos y funciones con el mismo nombre. Control de errores o excepciones en forma estructurada (Try.Catch.Finally). Soporte de multitheread para que la aplicacin puede ejecutar mltiples tareas en forma independiente. Uso de NameSpaces para referirse a una clase que se va a usar en la aplicacin. Los Assemblies reemplazan a la Librera de Tipos, en un Assemblie puede existir uno o ms NameSpaces. Reestructuracin en los Tipos de Datos; existen nuevos tipos de datos y se han modificado y eliminado cierto tipos de datos. Cambio en el Lenguaje: nuevas forma de declarar variables, conversin explcita de tipos de datos (no existe conversin forzosa); no existen procedimientos sino funciones, etc.

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Declaracin de Variables A diferencia de Visual Basic 6, en VB. NET se pueden declarar varias variables en una sola instruccin y adems se puede asignar directamente sus valores. Otra observacin es que es necesario definir el tipo de declaracin y el tipo de dato (antes se hacia se asuma un tipo de declaracin y un tipo de datos variant, que ahora no existe). Sintaxis <Tipo de Declaracin> <Variables(s)> As <Tipo de Dato> [=<Valor>] Existen varios tipos de declaracin que detallamos a continuacin en la siguiente tabla Declaracin Public Protected Friend Private Dim Static Alcance de Variables Para las variables declaradas a nivel de procedimientos (Dim y Static) existen un nuevo alcance que es a nivel de estructura o bloque, que puede ser For Nest, If End If, Do Loop, etc. Las variables definidad dentro de un bloque solo valdrn en este bloque. Opciones de Trabajo con Variables Por defecto en VB NET es necesario declarar las variables usadas (Option Explict) y tambin es necesario que se asigne el misto tipo de dato a la variable (Option Strict), si deseamos Declaracin implcita (por defecto Objet) y Conversin Forzosa de tipos (ForeCast), aunque no es lo recomendable por performance, podemos conseguirlo de dos formas: mediante Propiedades del proyecto, opcin Build y elegir Off en las listas de Option Explicit y Option Strict o mediante declaracin al inicio de todo el cdigo: Option Explicit Off Option Strict Off Arrays Un array o arreglo es un conjunto de variables que tienen el mismo nombre pero diferente ndice que permite simplificar el uso de stas y aumentar la velocidad de acceso a los datos que almacena el array. El array puede tener uno o mas dimensiones (hasta 60) y cada dimensin tiene un lmite inferior que siempre es 0 y un lmite superior que es equivalente al tamao de la dimensin del array menos 1. Esta caracterstica es distinta que en la versin anterior, en donde el lmite inferior del array podan empezar en cualquier nmero. La clase base. NET de donde se heredan los array es Array y pertenece al siguiente NameSpace:System.Array.
Web Developer Microsoft.NET

Lugar de declaracin Mdulo o Clase Clase Clase Mdulo Procedimiento Procedimiento

Alcance o Ambito Global, en todo el proyecto En la clase declarada o en una derivada En el Assemblie Solo en el mdulo Solo en el Procedimiento Solo en el Procedimiento

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Declaracin de Arrays A diferencia de Visual Basic 6, en VB. NET se puede declarar arrays definiendo el nmero de dimensiones pero sin indicar el tamao. Cabe resaltar que solo se puede declarar e inicializar una array que no tiene tamao definido. Otra diferencia es que no existe la sentencia Option Base que haga que el lmite inferior del array empiece en 0 o en 1, ste siempre empezar en 0 e ir hasta n-1. Sintaxis <Tipo de Declaracin><Array([Tamao])As <Tipo de Dato>[=<Valores>] Ejemplos: Dim Alumnos(30),Cursos(10)As String Dim Edades( ) As Byte={18,20,25,27} Dim Sueldos ( , ) As Decimal Redimensionando Arrays Una vez definido la dimensin de un array, ste puede modificarse usando la sentencia ReDim, siempre y cuando el array haya sido declarado como dinmico (con Dim). Sintaxis ReDim [Preserve] <Array> ([Tamao]) As <Tipo de Dato>[=<Valores>] Ejemplo Dim 1, Arreglo As Integer Redim Arreglo(5) For 1 = 0 To Ubound (Arreglo) Arreglo (I) = I Next 1 Procedimientos Un Procedimiento es un bloque de cdigo o conjunto de instrucciones que es definido en la aplicacin y que puede ser usado varias veces mediante una llamada. Dos caractersticas nuevas de los procedimientos, incorporadas en esta versin son: Subrutinas: Ejecutan una seccin sin retornar un valor Funciones: Ejecutan una accin retornando un valor De Eventos: Se desencadenan con la interaccin del usuario o ante algn evento De Propiedades: De vuelven y asignan valores a propiedades de un objeto.
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Declaracin de procedimientos Subrutina [Public Private Friend] Sub<Nombre> ([Optional) [ByVal ByRef]<Par>As <Tipo> <Sentencia> [Exit Sub] End Sub Funcin: [Public Private Friend] Funcion<Nombre> <Parmetros>As <Tipo> <Sentencia> [Exit Function] [Exit Sub] [<Nombre>=Valor>}| Return (Valor)] End Function Notas: El tipo de argumento por defecto es By Val (en la versin anterior era ByFef) Si se usa Optional debe iniciarse con un valor (antes no era obligatorio) Se puede usar Return para regresar a la llamada del procedimiento. Manejo de Threads Threads Un Threads es la unidad bsica para que el Sistema Operativo pueda ejecutar un proceso. Una aplicacin (AppDonain) siempre inicia un solo Threads, pero este a su vez puede iniciar otro Threads. Al proceso de ejecutar varios Threads le llamaremos Threading. En ventaja principal de los Threads es tener varias actividades ocurriendo en forma simultnea, lo cual es una posibilidad para que los desarrolladores puedan trabajar con varios procesos sin perjudicar otras tareas. Por ejemplo, el usuario puede interactuar con la aplicacin mientras se va ejecutando una consulta de miles de registros. Se recomienda el uso de Threads en las siguientes situaciones Para comunicaciones sobre una red, servidor Web o Servidor de Base de Datos. Al ejecutar operaciones que demoren bastante tiempo Para mantener siempre disponible la comunicacin entre el usuario y la interfase, mientras se van ejecutando tareas en segundo plano, etc. El uso de Threads intersivamente disminuye los recursos del sistema operativo, por tanto solo se recomienda usar en los casos ya descritos, sino la performance de la aplicacin disminuir.
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Implementacin de Threads Para implementar Threads se usa el NameSpace: System.Threading.Thread y luego se hace uso de los mtodos que se definen a continuacin: Star: inicia un Thread, el cual es un proceso de llamada asncrona. Para saber el estado del Threads hay que usar las propiedades ThreadState y IsAlive Abort: Cancela un Thread iniciado, si deseamos saber el estado nuevamente podemos usar las propiedades ThreadState y IsAlive Sleep: Ocasiona una pausa en milisegundos del bloque de instrucciones Suspen: Tambin ocasiona una pausa en el bloque de instrucciones Resume: Reinicia una pausa originada con el mtodo Suspend Join: Espera porun Threads Estado de un Threads Un Threads tener diferentes estados en un mismo tiempo, para saber su estado se encuentra la propiedad ThreadState que devuelve un valor que indica el estado actual del Thread. Accin Otro Thread a Thread Start El Thread inicia su ejecucin El thread llama a Thread.Sleep El Thread llama a Monitor. Espera en otro objeto El Thread llama Thread. Join en otro Thread Otro Thread lalma a Thread.Suspend El Thread responde a un requerimiento de Thread. Suspend Otro Thread llama a Thread.Resume Otro Thread llama a Thread.Interrumpt Otro Thread llama a Thread.Abort El Thread responde a Thread.Abord Control de Excepciones Durante el desarrollo y ejecucin de toda aplicacin pueden presentarse diferentes tipos de errores, los cuales impiden el normal funcionamiento de las aplicaciones. A estos errores se les llama Excepciones. Tipos de Errores Los errores o excepciones se pueden clasificar en 3 tipos: Errores de Sintaxis: Suceden al escribir cdigo en la aplicacin; como por ejemplo una instruccin mal escrita, omisin de un parmetro obligatorio en una funcin, etc. Visual Basic notifica de cualquier error de sintaxis mostrando una marcha de subrayado azul (por defecto) con un comentario indicando la causa del error. Estado de Transicin Unchanged Running WaitSleepJoin WaitSleepJoin WaitSleepJoin SuspendRequested Suspended Running Running AbortRequested Aborted

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Una ayuda para corregir errores de sintaxis, es usar la sentencia Option Explicit que fuerce a declarar variables y evitar expresiones invlidas. Errores Lgicos: Ocurren una vez usada la aplicacin y consiste en resultados inesperados o no deseados: por ejemplo una funcin que debe devolver el sueldo neto est devolviendo un valor de cero o negativo, o una subrutina que debe eliminar un archivo temporal no lo est borrando. Para corregir este tipo de errores se hace uso de herramientas de depuracion, como por ejemplo un seguimiento paso a paso, o inspeccionar el valor de una variable o expresin. Tambin podemos disminuir errores o excepciones de tipos de datos no deseados usando la sentencia Option Strict que evita la conversin forzosa y verifica que el tipo de dato asignado sea del mismo tipo que la variable o funcin, o que un parmetro pasado sea del mismo tipo, etc. Errores en Tiempo de Ejecucin: Este tipo de errores suceden en plena ejecucin de la aplicacin, despus de haber sido compilado el cdigo. No son errores de mala escritura no de lgica, sino mas bien de algunas excepcin del sistema, como por ejemplo tratar de leer un archivo que no existe o que est abierto, realizar una divisin entre cero, etc. Para controlar los errores en tiempo de ejecucin disponemos de los Manipuladores o Controladores de Error, que evitan la cada del programa y permiten que siga funcionando. A continuacin veremos las formas de implementar el control de este tipo de errores. Opciones de Control de Excepciones Para controlar excepciones no solo basta usar una forma de control, sea no estructurada o estructurada, sino tambin es necesario configurar las opciones de control de excepciones para lo cual del men Debug se elige Windows y luego Exceptions o tambin se puede elegir directamente el botn Exceptions de la Barra de Depuracin. Aparecer la ventana de control de excepciones que se muestra a continuacin Existen 2 monitores en que se pueden controlar las excepciones que son: When the exception os threown: Es cuando la excepcin ocurre y se aconseja configurarlos en Continue If the exception is not handled: Ocurre cuando la excepcin no es controlada, es decir cuando no existe controlador de error, es aconsejable que est en Break into the debugger.
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Ambos momentos tienen 3 opciones o formas de control, que son: Break into the debugger: Para y muestra el depurador con la lnea donde ocurri el error en tiempo de ejecucin. Continue: Continua la ejecucin del programa. Si no existe controlador Finaliza la ejecucin del programa. Use parent setting: Indica que se va a usar la configuracin de la opcin de nivel superior o padre. Laboratorio 1 El presente laboratorio tiene como objetivo conocer el Entorno de Visual Studio.NET y usar algunas caractersticas nuevas del Lenguaje Visual Basic.NET, as como implementar MultiThreads y Controlar Excepciones. Este primer laboratorio est dividido en 2 ejercicios que tienen una duracin aproximada de 35 minutos. Ejercicio 1: Reconocimiento VB.NET y Trabajando con el Lenguaje Duracin 20 minutos Empleo de Textbox Establecer las siguientes propiedades: Control Textbox1 Textbox2 Textbox3 Textbox4 Textbox5 Label7 Propiedad Name Maxlength Text Name Maxlength Text Name Text Name Text Name Text Name Autosize Font Text TextAlign Name Autosize Font Text TextAlign Name Text txtCodigo 4 txtNombre Upper txtCurso txtParcial txtFinal lblPromedio True Arial, 10pt,style=Bold MiddleCenter lblObs True Arial, 12 pt,style=Bold MiddleCenter btnNuevo &Nuevo
Web Developer Microsoft.NET

Valor

Label8

Button1

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Button2 Form1

Name Text Name CancelButton Text FormBorderStyle Icon StarPosition

btnSalir &Salir frmDemo01 btnSalir Empleo TextBox Sizable Sun.ico CneterScreen

Figura 3.15: Diseo del Formulario

Public Sub Calcular() Try If Trim(txtParcial.Text) <> "" And Trim(txtFinal.Text) <> "" Then Dim iParcial As Integer = CType(txtParcial.Text, Integer) Dim iFinal As Integer = CType(txtFinal.Text, Integer) Dim iPromedio As Integer = Math.Round((iParcial + iFinal) / 2, 0) If iPromedio > 10 Then lblPromedio.ForeColor = Color.Blue lblObservacion.ForeColor = Color.Blue lblObservacion.Text = "APROBADO" Else lblPromedio.ForeColor = Color.Red lblObservacion.ForeColor = Color.Red lblObservacion.Text = "DESAPROBADO" End If End If Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Private Sub txtCodigo_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtCodigo.TextChanged If Len(Trim(txtCodigo.Text)) = 4 Then txtNombre.Focus() End If End Sub Private Sub btnNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNuevo.Click Dim miControl As Control For Each miControl In Me.Controls If TypeOf miControl Is TextBox Then miControl.Text = "" Next lblPromedio.Text = "" : lblObservacion.Text = "" txtCodigo.Focus() End Sub Private Sub btnSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalir.Click End End Sub Private Sub txtNombre_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtNombre.KeyPress If e.KeyChar = Microsoft.VisualBasic.ChrW(13) Then txtCurso.Focus() End If End Sub Private Sub txtCurso_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtCurso.KeyPress If e.KeyChar = Microsoft.VisualBasic.ChrW(13) Then txtParcial.Focus() End If End Sub Private Sub txtParcial_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtParcial.TextChanged Calcular() End Sub Private Sub txtFinal_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtFinal.TextChanged Calcular() End Sub Finalmente, ingrese a la carpeta bin de Lab01 y observe dos archivos: uno ejecutable (extensin exe) y otro archivo intermedio (extensin pdb), (Cul de estos es conocido como Asseblie). Ejercicio 2: Implemento Multi Thread y Control de Excepciones Duracin: 15 minutos

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Ingrese a Visual Studio.NET y del men File elegir y luego Project o simplemente pulsar [Ctrl] + [N], luego elegir un tipo de proyecto Visual Basic y una plantilla de Aplicacin Windows, seleccionar como ubicacin de carpeta C:\\vbnet\Labs y como nombre ingresar Lab01_2.

Se va a crear una aplicacin en la que se implemente mltiples threads para iniciar la lectura de un archivo de texto extenso y poder cancelar este proceso si es necesario, adems para evitar los errores en tiempo de ejecucin haremos uso del control estructurado de excepciones visto en este mdulo.

Primero en la ventana del Solution Explorer seleccionar el nombre del formulario y en la ventana de propiedades escribir en la propiedad FileName el nombre frmArchivo.vb. Realizar el diseo del formulario similar al presentado aqu abajo: Figura 3.17: Diseo del formulario frmArchivo

Declarar una variable llamada Hilo de tipo trread y definir una subrutina que lea el archivo de texto cuya ruta y nombre est especificado en el cuadro de texto, esta rutina usa Try.Catch.Finally para controlar errores en tiempo de ejecucin. Dim Hilo As System.Threading.Thread Sub LeerArchivo ( ) Dim Flujo As System.IO.StreamReader Dim Lines As Strings Try Flujo = System.IO.File.OpenText(txtNombre.Text) no Untitl IsNothing (Linea)
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Linea = Flujo.ReadLine TxtArchivo.Text = txtArchivo.Text + Lnea + Chr(13) + Chr (10) Loop Carch x An IO.IOException MagBox(X.Message,MsfBoxStyle.Information, No se pudo) txt.Nombre.Clear( ) Exit.Sub End.Try Flujo.Close ( ) btnSuspender.Enabled = False btnContinuar.Enabled = btnCancelar.Enabled = End Sub Escribir cdigo en el evento TextChanged de txtNombre y en los eventos Click de los Botones Private Sub txtNombre_TextChanged(ByVal sender As...)Handles BtnLeer.Enabled = txtNombre.Text <> Private Sub btnLeer_Click(ByVal sender As...) Handins Hilo = New System.Threading.Thread (AddressOf LeerArchivo) Hilo.Start ( ) btnSupender.Enabled = True btnCancelar.Enabled = True End Sub Private Sub btnCancelar_Click(ByVal sender As...) Handles Hilo.Abort ( ) btnLeer.Enabled = False btnSuspender = Enabled = False btnCancelar.Enabled = False End Sub Private Sub btnNuevo_Click(ByVal sender As...) Handles txtNombre.Clear ( ) txtArchivo.Clear ( ) txtNombre.Clear ( )
Web Developer Microsoft.NET

False False

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

End Sub Private Sub btnSuspender:Click(ByVal sender As...) Handles hilo.Suspend ( ) btnLeer.Enabled = False btnSuspender = Enabled = True btnCancelar.Enabled = False End Sub Private Sub btnContinuar:Click(ByVal sender As...) Handles Hilo, Resume ( ) End sub Private Sub btnSalir:Click(ByVal sender As...) Handles Me.Close ( ) End Sub Finalmente, grabar y ejecutar la aplicacin

CAPITULO 4: CREANDO APLICACIONES PARA WINDOWS Usando Windows Forms Introduccin Windows es una clase base del Marco.NET usada para crear aplicaciones que corrern sobre Windows, esta se encuentra disponible al elegir en Visual Basic la plantilla Windows Application. Al elegir una aplicacin para Windows automticamente se realizan los siguientes cambios: En el ToolBox aparecer una ficha llamada Windows Forms conteniendo los controles para trabajar con Formularios Windows y Controles de Usuario. En el Cdigo del formulario aparecer la referencia a la clase base heredada: Inherets System.Windows, Form.Form Para ilustrar mejor la funcionalidad que podemos obtener de Windows tenemos la figura 4.1, que resumen los principales objetos usados en Windows, para lo cual se parte de la clase base llamada System, luego se muestran algunos de los objetos de la clase Drawing y de la clase Winforms anteriormente comentadas Cabe comentar que dentro de la clase Windows, encontramos definido el formulario y los controles para Windows (Label, Button, TexBox, Menu, etc.), as como tambin algunos objetos no visuales de utilidad como Application(reemplaza al objeto App de VB6), Clipboard, Help, Screen, etc.)
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Objeto Formulario El objeto formulario Form es el contenedor principal de toda aplicacin para Windows y se encuentra en el siguiente NameSpace: System.Windows.Forms.Form En Visual Studio.Net el formulario ha sufrido muchos cambios, tanto en propiedades mtodos y eventos, tal como se muestra en los siguientes cuadros. Propiedades Propiedades Autocroll Backcolor BackgrondImage BorderStyle ControBox Cursor Descripcin Es una nueva propiedad que permite desplazarse por el formulario a travs de una barra si es que los controles sobrepasan el rea cliente. Especificar el color de fondo del formulario Antes llamada Picture: Permite mostrar una imagen de fondo sobre el formulario, tiene 2 tamaos: cascada y centrado en pantalla Controla la apariencia del borde del formulario y los controles que se presentan en la barra de titulo. Tiene 6 opciones Si esta en True muestra el men de controles de la barra de ttulo, si esta en False no los muestra. Especificar el curso que aparecer al situar el mouse sobre el formulario. Antes era la propiedad MousePointes y si se quera un cursor personalizado se configuraba MouseIcon, ahora solo existe Cursor y sus grficas son vistas en la lista Configura la fuente de los textos de los controles ubicados en el formulario y de los textos mostrados con mtodos de dibujo. Especifica el colore del texto de los controles (excepto el TexBox) y de los textos mostrados con mtodos de dibujo. Determina el tamao de las rejitas que se muestran en tiempo de diseo para disear controles. Indica el icono del formulario, este se muestra en la barra de ttulo de la ventana y en la barra de tareas de Windows Determinar si es que el formulario es un MDL, antes se creaba un formulario MDI aadiendo del men Projet y un formulario hijo configurando la propiedad MDIChild en True. Ahora solo se configura para ambos la propiedad IsMDIContainer. Indica la posicin del formulario con respecto a la esquina superior izquierda de la pantalla. Antes haba que configurar la propiedad Top y Left, ahora los valores de X e Y. Es una nueva propiedad , que indica la forma devisualizacion del formulario, que puede ser desde opaco (100%) hasta transparente (0%). Antes para hacer transparente se usaba la API SetWindowRgm Determina la alineacin de los textos con respecto a sus controles, por defecto es No, es decir se alinea de izquierda a derecha, si es True se alinearn de derecha a izquierda Configura el tamao del formulario no pixeles Indica la posicin e que aparecer por primera vez el formulario con respecto a la pantalla. Tiene 5 opciones Antes se llamaba Caption y permite mostrar el texto de la barra de ttulo en el formulario Posiciona en primer plano la ventana, siempre y cuando no este desactivada. Antes se poda hacer esto con la API WindowsOnTop. Determina la forma en que se presentar la ventana, puede ser Normal,
Web Developer Microsoft.NET

Font Forecolor GridSize Icon IsMDIContainer

Location Opaciti RigfRToLeft Size StartPosition Text TopMost WindowsState

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Minimizada o Maximizada. Mtodos Descripcin Activa el formulario y le da el foco Activa un control del formulario Cierra un formulario descargndolo de la memori Pone el foco sobre el formulario Oculta el formulario, sin descargarlo de la memoria Repinta el formulario y sus controles Ubica el formulario en una cierta posicin de la pantalla Configura el tamao de la ventana en pxeles Muestra un formulario como ventana no modal (modeles) Muestra un formulario como ventana modal (modal)

Propiedades Active ActivateControl Close Focus Hide Refresh SetLocation SetSize Show ShowDialog Eventos

Propiedades Activated Click Closed Closing Deactivated DoubleClick GotFocus Load LostFocus MouseEnter MouseLeave Move Paint Resize Uso del ToolBox

Descripcin Ocurre al activarse el formulario Se desencadena al dar clic con el mouse sobre el formulario Se habilita al cerrar el formulario. Es similar al evento. Unload de Visual Basic 6. Ocurre mientras se est cerrando el formulario. Es similar al evento QueryClose de Visual Basic6. Tambin se puede cancelar la salida Ocurre al desactivarse el formulario Se desencadena al dar doble clic con el mouse sobre el formulario Ocurre al ingresar el foco sobre el formulario Se produce al cargar los controles sobre el formulario Ocurre al salir el foco del formulario Se habilita al ingresar el mouse sobre el rea cliente del formulario Se habilita al salir del mouse del rea cliente del formulario Este evento se habilita al mover la ventana o formulario Ocurre al pintarse la ventana en pantalla. Ocurre cada vez que se modifica de tamao el formulario

El TooBox es la caja de herramientas donde se encuentran los controles que se van ha usar para disear la interface de los diferentes tipos de aplicaciones, este vara de acuerdo al tipo de plantilla elegida. A continuacin se presenta el ToolBox cuando elegimos una plantillaWindows Application; este presenta varias fichas Windows Forms, Data, Components y General. Figura 4.2: ToolBox para Aplicaciones Windows

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Para usar un control del TooBox solo hay que elegir la ficha adecuada y luego seleccionar el control y arrastrarlo sobre el formulario o contenedor donde se desea ubicarlo, tambin se puede dar doble clic sobre el control y aparecer por defecto en la posicin 0.0 del formulario (antes se ubicaba al centro de ste). Usando Controles para Windows Forms Utilizacin de Listas.

Establece las siguientes propiedades: Control Propiedad Valor


Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Textbox1 Button1 Button2 Button3 Button4 ListBox1

Label3

Form1

Name Text Name Text Name Text Name Text Name Text Name Autosize Font Text Name Autosize BorderStyle Font Text TextAlign Name Text FormBorderStyle StartPosition

txtNombre btnAgregar &Agregar btnEliminar &Eliminar btnLimpiar &Limpiar Todo &btnSalir Salir lstAmistades True Arial, 10pt,style=bold lblTotal True Fixed3D Arial, 12pt,.style=Bold MiddleCenter frmDemo01 Empleo Listas Sizable CenterScreen

En las versiones anteriores de visula basic era muy practico emplear los array de controles de tal forma que podriamos compartir funcionalidades entre una serie de controles, y cuando se requiera saber que control estaba lanzando el evento empleabamos el index En visual basic.NET para poder tener el efecto de un array de controles. Necesitamos conectar un metodo a multiples eventos, a partir de alli puede hacer uso del parametro sender para identificar que control provoco el evento. Para comprobar eso agregar el siguiente codigo, debajo del windows form designer: Public Sub Procesa(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAgregar.Click, btnEliminar.Click, btnLimpiar.Click, btnSalir.Click Dim BotonSeleccionado As Button BotonSeleccionado = CType(sender, Button) With lstAmistades Select Case BotonSeleccionado.Name Case "btnAgregar" .Items.Add(txtNombre.Text) txtNombre.Text = "" : txtNombre.Focus() Case "btnEliminar" .Items.Remove(.SelectedItem) Case "btnLimpiar" .Items.Clear() Case "btnSalir" End End Select lblTotal.Text = .Items.Count End With End Sub INTERFACES Introduccin
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Una interfase es el medio de comunicacin entre dos entidades, en nuestro caso, la interface sirve de enlace entre el usuario y la aplicacin. En la evolucin de la computacin se inicia con interfaces de texto o de consola, las cuales predominan desde ls inicios de la computacin hasta casi la mitad de la dcada del ochenta, luego aparecen las interfaces grficas. Desde que trabajamos en ambiente Windows, las interfaces han ido evolucionando de acuerdo a la facilidad del usuario para acceder a los elementos de la aplicacin, y entre las principales intefaces tenemos: SDI (single Document Interfce) : Interface de simple documento muetra una sola ventana con un cierto documento en la aplicacin; El acceso a las ventanas es secuencial por lo que no es tan recomendable. Algunas aplicaciones con SDI son los accesorios de Windows. Block de notass, Point, Worpad, etc. MDI. (MultipleDocument Interface) : Interface de multiples document, muestra varios documentos en sus respectivas ventanas, las cuales aparecen sobre una ventana principal; el acceso a las ventanas es directo porque generalmente en la ventana padre existe un men. Algunas aplicaciones con MDI son los programas de Office:Word y Excel. TreeView-ListView (Vistas Arbol Lista) : Muestra los elementos de la aplicacin en un rbol (TreeView) y en elado derecho muestra una lista con los detalles (List View) ; puede mostrarse junto a un SDI, como en el caso del Explorador de Archivos de Windows o puede mostrarse junto a un SDI como en el caso del Entrerprise Manager de SQL Server 6 o Superior. Con la evolucin de Internet tambin se distinguen diferentes tipos de interfaces en el Browser, pero que no se tocan en este captulo, sino que nos centraremos en la creacin de interfaces para aplicaciones Windows. CREANDO APLICACIONES MDI Una aplicacin MDI consta de dos partes: Un formulario MDI padre y uno o ms formularios MDI hijos, la creacin de ambos es muy sencilla en VB . NET y se aplica a continuacin: CREANDO UN FORMULARIO MDI PADRE Para crear un formulario MDI padre solo hay que configurar la propiedad IsMDI Container del formulario a True. A diferencia de la version anterios de Visual Basic, esta versin permite colocar cualquier control Winform dentro del formulario MDI, pero esto har que los formularios hijos se muestren en segundo plano, ya que en primer plano se ver los controles del formulario MDI padre. CREANDO UN FORMULARIO MDI HIJO Para crear un formulario MDI hijo, solo hay que configurar la propiedad PARENT (Disponible solo en tiempo de Ejecucin) del formulario hijo apuntar al formulario padre y luego usar el mtodo Show para mostrarlo. El siguiente cdigo muestra como mostrar un formulario hijo desde un men: Protected sub mnu archivo- Nuevo-clic (ByVal sender Objet,...) Dim X As New frmHijo() X. MDIParent=frmPadre X. Show() End sub ORGANIZANDO FORMULARIOS MDI HIJOS

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Si es que desea organizar los formularios MDI hijos se debe usar el mtodo LAYOUTMDI, del formulario MDI padre junto con una constante de tipo MDILAYAOUT, que tiene 4 valores: Arrangelcons, Cascade, TileHorizontal y TileVertical. Acontinuacin se muestra como ordenar en cascada los formularios MDI hijos de un formulario MDI Padre llamado frmPadre: Frmpadre.layoutMDI(MDILayout.Cascade) CONTROLES TREEVIEW Y LISTVIEW Estos dos controles casi siempre trabajan juntos, uno muestra los elementos de la aplicacin y el otro su contenido o detalle, antes estaban disponibles como controles activeX, ahora en VB.NET estan disponibles como controles del WinForm. Ambos controles generalmente usan imgenes para mostrar los elementos, por lo cual plrimero veremos el uso del control ImageList para almacenar imgenes de las vistas. TRABAJANDO CON EL IMAGELIST. Para llenar una lista de imagenes realice los siguientes pasos: Doble clic al control ImageList del ToolBox y se mostrar en la parte inferior de diseados de formularios. Conigurar la propiedad Name usando el prefijo ils, seguido del nombre y la propiedad imagesize que define el tamao de las imgenes: 16,32,48, etc. Seleccionar la propiedad image que es una coleccin y pulsar sobre el botn, entonces aparecer el dilogo Image collection Editor en el cual se aadir as imgenes con el botn Add y se eliminar con remove Ejemplo: En el siguiente ejemplo se demuestra de cmo utilizar un control MainMenu en un formulario, inicie una nueva aplicacin de tipo Winforms asgnele el nombre Ejercicio01 y realice los siguientes pasos: 1. Debe de Agregar un cuadro de texto al cual en la propiedad multiline debe asignarle el valor true, la representacin final sera como lo muestra la siguiente imagen: 2. Luego debe agregar un control de MainMenu y configurar de acuerdo a las siguientes representaciones.

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

3. A cada opcion del menu asignale un nombre que llev relacion, por ejemplo al menu archico asignale en la propiedad Name: archivoMenuItem, a la opcion Cerrar el name: cerrarMenuItem y asi sucesivamente con cada una de las opciones del menu. para poder representar la linea de divisin de Menu Edicin debe de colocarse en la propiedad text un smbolo de guion (-) 4. Agregar el siguiente codigo: Private Sub CerarMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click Me.Close() End Sub Private Sub CopiarMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem4.Click TextBox1.Copy() End Sub Private Sub PegarMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem5.Click TextBox1.Paste() End Sub Private Sub LimpiarMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem6.Click TextBox1.Clear() End Sub 5. Ejecute el programa en el cuadro de texto digite Business Developer, seleccione lo digitado y del menu Edicin seleccione la opcion copiar, borra el contenido del cuadro de texto con la opcion Limpiar Todo y luego del menu Edicin seleccione Pegar, finalmente del menu Archivo seleccione Cerrar. Creando Windows Control Existen Tres Formas o tcnicas para la creacin de nterfaces de usuario personalizadas las cuales son: Heredar desde un control Construir un Control compuesto Definir desde una clase Control Construir un control heredado de otro control Implementar un cuadro de texto numerico Como ejemplo crearemos un control que solo permita entradas numricas esto nos hace pensar en el control Textbox que permita el ingreso de cualquier carcter. El nuevo control heredado debe de cumplir con las siguientes consideraciones: Permitir solo digitos Permite la entrada del punto decimal Permite el ingreso del signo menos , pero solo en la primera opcion Todos los demas caracteres deben ser ignorados por el control Para desarrollar debemos de seguir las siguientes instrucciones: 1.Iniciar un nuevo proyecto de tipo windows Control Library, Complete la informacin de acuerdo a la siguiente representacin y pulse OK.

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

2. Seleccione del menu Project la opcion de code o pulsar la tecla de funcin F7 3. Renombre la clase empleando la descripcin CuadroTextoNumerico en vez de Usercontrol1. 4. Reemplzar la sentencia Inherits System.Windows.Forms.UserControl por la siguiente: Inherits System.windows.Forms.Textbox 5 .Siguiente paso es agregar la funcionalidad requerida. En nuestro caso debemos controlar los ingresos que se realicen en el cuador de texto, para ello programaremos en el evento KeyPress, para seleccionar dicho evento seleccione las listas como se muestra en la siguiente representacin

6. En el evento seleccionado agregar el siguiente codigo: Private Sub CuadroTextoNumerico_KeyPress(byval sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress Dim keyascii As Integer keyascii = Asc(e.KeyChar) Select Case keyascii Case 48 To 57, 8, 13 Case 45 If InStr(Me.Text, "-") <> 0 Then
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

keyascii = 0 End If If Me.SelectionStart <> 0 Then keyascii = 0 End If Case 46 If InStr(Me.Text, ".") <> 0 Then keyascii = 0 End If Case Else keyascii = 0 End Select If keyascii = 0 Then e.Handled = True Else e.Handled = False End If End Sub

7. Pulsar la combinacin Ctrl+shift+B y grabe su aplicacin


8. Del menu File, seleccione la opcion Add Project y haga clic en New Project 9. Complete de acuerdo a la siguiente representacion

10. Sobre el toolbox de la aplicacin cliente haga clic derecho y seleccione customize Toolbox, luego selecione .Net Framework componets como muestra la siguinte representacin:

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

11. Pulse el boton Browse y seleccione el archivo CuadroTextoNumerico.dll y pulse Open luego pulse el boton OK. 12. Desde el ToolBox aada el control CuadroTextoNumerico al formulario, la representacin sera la siguiente:

13. En la ventana del solution Explorer haga clic derecho sobre el proyecto ClienteCuadroTextoNumerico y seleccione la opcion Set Up As Startup Project, tal como lo muestra la siguiente representacin:

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

14. Grabe y ejecute su aplicacin Modificar la funcionalidad al control Como habra notado el ejcutar la aplicacin encontramos que la descripcin CuadroTextoNumerico1 aparece como contenido del control que acabamos de crear esto podria ocasionar confusin al usuario si tomamos en cuenta las funcionalidades del control, por lo tanto tenemos que realizar un ligero cambio en la propiedad Text de nuestro control de tal manera que si la descripcin que se le asigen a dicha propiedad contiene letras esta no se muestra al momento de ejecutar el programa. Para ello al final del codigo que evalua los caracteres digitados , modifiquen el comportamiento de la propiedad Text con el siguiente Codigo: Public Overrides Property Text() As String Get Return MyBase.Text End Get Set(ByVal Value As String) If IsNumeric(Value) Then MyBase.Text = Value End If If Value = Nothing Then MyBase.Text = Value Exit Property End If End Set End Property Al ejecutar su aplicacin ya no observara la descripcin que aparece por defecto en la propiedad Text del control personalizado.

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

INTRODUCCIN AL ACCESO A DATOS Entendiendo ADO.NET ADO.NET es un modelo de programacin basado en estndares que permite crear aplicaciones distribuidas que accedan a datos compartidos. Por ser una Interfase de Programacin de Aplicaciones (API), est disponible desde muchas aplicaciones, herramientas de desarrollo, lenguajes de programacin y navegadores de Internet. Entre los Software donde podemos usar ADO.NET tenemos: Visual Basic.NET Visual C++.NET Visual C# ASP.NET Jscrip.NET

Esta nueva versin de ADO ofrece ventajas significativas con respecto a las versiones anteriores que podemos resumirlas en dos, las cuales se detallan ms adelante:

Interoperabilidad: Formado de transporte universal XML Escalabilidad: DataSet, desconectado aumenta la concurrencia
Al igual que ADO,ADO.NET permite acceder a todo tipo de orgenes de datos, ya sean planos como archivos de texto, bases de datos relacionales como MS Acceso o MS SQL Server, y documentos de diferente tipo como Word, Excel, etc. En el caso de aplicaciones que requieran acceder a datos comparativos, por ejemplo en una pgina Web de Internet, se utilizan datos desconectados, intercambindose a travs de XML los datos. Las ventajas de usar DataSet y enviarlos a travs de XML en ADO.NET es que no requiere de ninguna infraestructura adicional, lo que se enva es texto; en cambio, en ADO se requera del Marshalling que es administrado por COM, por lo que haba que tener la arquitectura adecuada para realizar esto (Servidor Windows con MTS). Las ventajas de usar DataSet y enviarlos a travs de XML en ADO.NET es que no requiere de ninguna infraestructura adicional, lo que se enva es texto; en cambio, en ADO se requiera del Mashalling que es administrado por COM, por lo que haba que tener la arquitectura adecuada para realizar esto (Servidor Windows NT con MTS). Otra ventaja de ADO.NET es que para operaciones de mltiples actualizaciones concurrentes, en el caso de que trabajen cientos o miles de usuarios con los datos, el bloqueo es inmediato y no mantiene conexiones abiertas debido a que los DataSet trabajan con el concepto de datos desconectados. Diferencias entre ADO y ADO,NET
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Para entender las nuevas caractersticas y ventajas de ADO.NET vamos a realizar un cuadro comparativo con la versin anterior de ADO. Caractersticas ADO Representacin de Datos Usa el objeto Recordsel el cual se en memoria comporta como si fuese una simple tabla Relacin tablas varias Se realiza mediante una consulta con JOIN unindose el resultado en una simple tabla. Navegacin de datos Se recupera un conjunto de registros secuencialmente entre ADO.NET Usa el objeto DataSet, el cual puede contener una o ms tablas representadas por DataTables Tiene el objeto DataRelation que permite asociar registros entre dos DataTables. Acceder a los registros de forma no secuencial, para lo cual sigue las relaciones entre los registros de una t abla con otra relacionada. Se comunica con la BD a travs de llamadas estandarizadas al objeto DataAdapter, el cual se comunica con un proveedor. Una XML para transmitir datos desde el origen da datos a una aplicacin.

Acceso desconectado

El acceso desconectado se implementa a travs del Recordset y el acceso conectado se da a travs del objeto Connection

Programabilidad

Usa el objeto Connection para transmitir comandos direccionandolos a un origen de datos. Compartir datos Usa el Marshalling de COM para desconectados entre transmitir un Recordset niveles o componentes desconectado. Solo est disponible para tipos de datos definidos por el estndar COM. Transmisin de datos a Es complicada la transmisin, por travs de Firewalls cuanto los Firewalls impiden el pedido de datos a nivel de sistema, que es el caso de COM. Escalabilidad

Se transmite mediante DataSet grabado en un archivo XML, este soporta cualquier tipo de datos y no requiere conversin de tipos. Es soportada, porque los objetos DataSet de ADO.NET viajan a travs de XML que es basado en HTML que puede pasar libremente a travs de Firewalls El bloqueo a la base de datos y el El acceso desconectado mantenimiento de conexiones permite retener lo menos activas limitan los recursos de las posible las conexiones abiertas bases de datos y el bloqueo dando una gran escalabilidad

Arquitectura de ADO.NET Para entender ADO.NET es necesario conocer la arquitectura y forma de trabajo de ste, que se basa en el objeto DataSet que es una copia de los datos en la memoria del cliente y por tanto trabaja desconectado, para comunicarse con el origen de datos se utilizan los proveedores administrados, tal como se muestra en la figura de abajo.

Figura 5.1 Forma de trabajo de ADO.NET

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

El transporte de datos tanto desde y hacia el origen de datos se hace a travs de XML favoreciendo el intercambio de datos entre diferentes tipos de plataformas, favoreciendo el desarrollo de aplicaciones Cliente/Servidor que integren aplicaciones entre negocios (BtoB)

Herramientas de Datos Las Herramientas de Datos son el medio ms rpido y sencillo para crear aplicaciones que acceden a datos. En Visual Studio.NET tenemos varias herramientas que hacen el trabajo con datos ms fcil, entre las cuales podemos menciona:

Server Explores DataAdapter Wizard Men Data

Server explorer Esta ventana muestra bsicamente dos cosas. Las Conexiones activas a Bases de Datos, como por ejemplo MS Access, SQL, etc, y los Servidores instalados en la red, cada Servidor a su vez visualiza los diferentes servicios tales como eventos de errores, colas de mensajes, servicios Windows y Web, servicios de datos, tal como se muestra en la siguiente figura.

Figura 5.3 Ventana del Server Explores

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Creando una Conexin con el Server Explorer En este mdulo como lo que nos interesa es acceder a datos, lo primero que debemos hacer es aadir una conexin a alguna Base de Datos, en nuestro caso la BD se llama Nort Wind y se encuentra en el Servidor SQL Server llamado Lduenas, para lo cual usaremos la ventana del Server Explores, realizando los siguientes pasos: Dar clic derecho sobre la opcin Data Conecctions del Server Explorer y elegir del men contextual la opcin Add Connetion. Se mostrar la ventana de enlace a datos, similar a la de Visual Basic 6 usada al crear una conexin con el Data Environment. Por defecto aparece la ficha Connetion con una conexin a SQL Server, pero si queremos acceder a otro origen de datos elegir la primera ficha Provider y modificar el proveedor OLEDB, de lo contrario llenar la propiedad de conexin.

Figura 5.4 Ventana de Enlace de Datos

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

En el paso 1 seleccionar de la lista el Servidor de Datos al cual se quiere conectar; si es remoto y no aparece, ha que escribir su nombre, por ejemplo: Lduenas.

En el paso 2 especificar el tipo de seguridad que puede ser Integrada Windows NT o Estndar (SQL Server), si se elige Estndar ingresar el usuario y password de la Base de Datos, por ejemplo como usuario ingresar sa sin password.

En el paso 3 elegir la Base de Datos a la cual se quiere conectar, en nuestro caso North Wind. Probar la conexin dando clic en el botn Test COnnection y si la respuesta es satisfactoria dar clic en el botn OK.

Finalmente, se habr creado la conexin que se mostrar en la ventana del Server Explorer.

Accediendo a Datos con el Server Explorer Una vez creada la conexin al origen de datos podemos explorar el contenido de la base de datos y ver sus tablas, vistas o consultas, y procedimientos almacenados (en el caso de SQL Server), tal como lo muestra la siguiente figura. El Server Explorer realiza el mantenimiento de una aplicacin sin tener que ir hasta la mquina donde se encuentra el servidor del datos, es decir, podemos crear, modificar y eliminar objetos como tablas, vistas o consultas, procedimientos almacenados, etc.

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Por ejemplo, si se quiere ingresar un empleado a la tabla Employees solo basta dar doble clic sobre el nombre de la tabla y se mostrarn todos los registros, ubicarse al final e ingresar los datos del empleado (excepto su cdigo que es a utogenerado). Para cualquier otra operacin solo basta dar clic derecho sobre la tabla y aparecer: Creando Aplicaciones de Datos con el Servidor Explorer Para los desarrolladores, el Server Explorer tambin da la posibilidad de crear aplicaciones de manera simple y rpida. Por ejemplo, si queremos realizar una aplicacin que muestre la lista de empleados, realice los siguientes pasos: Crear una aplicacin para Windows y colocar un control DataGrid sobre el formulario al cual le puede llamar dgdEmpleado. Expandir la tabla Employees del Server Explorer y elegir los campos que se desean mostrar, por ejemplo: EmployeeId, LastName, FirstName y Title, Arrastrar los campos hacia el formulario y se crearn dos objetos: Sq[Conecction] y Sq[DataAdapter] los cuales se vern en la zona de diseo. Dar clic derecho sobre el objeto Sq[DataAdapter] y elegir del men contextual Generate Dataset... y aparecer la siguiente ventana. Figura 5.7 Ventana de Generar Dataset

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Seleccionar la opcin New y escribir el nombre del Dataset, en nuestro ejemplo: dstEmpleado y dar clic en OK e inmediatamente se crear un objeto Dataset sobre el diseador llamado dstEmpleado1 Finalmente, para que se muestre los datos en tiempo de ejecucin hay que agregar el siguiente cdigo en el evento Load del formulario: SqlDataAdapter1.Fill(DstEmpleado1)

DataAdapter Wizard

El DataAdapter Wizard es un asistente que permite crear un objeto Conection y un objeto DataAdapter. Este ltimo permitir crear el Dataset que es el que contiene los datos y permite realizar actualizaciones sobre la base de datos. Como existen dos proveedores de datos.NET, existen dos formas de usar el asistente: 1. SqlDataAdapter 2. OledbDataAdapter En nuestro caso, vamos a indicar como crear un DataAdapter para la tabla Product de la BD NorthWind usando el Sq1DataAdapter, para lo cual se realiza lo siguiente: Dar doble clic al botn Sq1DataAdapter de la ficha Data del Too1Box. Se mostrar el Paso 1 del Asistente de Configuracin del DataAdapter Damos clic en el botn Next del Paso 1 que nos muestra la utilidad del DataAdapter Wizard.

En el Paso 2 se debe especificar la Conexin que usar el DataAdapter, si es que ya ha sido creada solo debemos elegirla de la lista, pero sino daremos clic en el botn New Conecction y seguiremos los pasos vistos en el tema anterior para crear la Conexin. Despus de especificar la conexin clic en el botn Next y pasaremos a la ventana del paso 3 donde se elige la forma como se quiere crear la Consulta, la cual puede ser de tres formas: a travpes de una Sentenc ia SQL (Select, Insert y Delete), un nuevo Store Procedure o uno existente. En nuestro caso elegimos la opcin por defecto: Usar una Sentencia SQL y clic en el botn Next, apareciendo la ventana del Paso 4 que pide escribir el Comando, tal como lo muestra la Creamos la consulta escribiendo la sentencia SQL, sino elegimos el botn del Q uery Builder que crea consultas de manera simple, cuya apariencia se muestra en la figura.

Figura 5.12 Ventana del Query Builder

Mtodos Descripcin Inicia una transaccin que se ejecuta de acuerdo a un cierto nivel de aislamiento, que puede ser de lectura confiable y no
Web Developer Microsoft.NET

Mtodo Begin Transaction

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

ChangeDataBase Close CreateCommand Open

confiable, serializable, etc. Cambia la base de datos a la cual nos conectamos Cierra la conexin a la base de datos Crea un objeto Command asociado con la conexin abierta Abre la conexin hacia el origen de datos de acuerdo a la cadena de conexin

Eventos Ocurre cuando el origen de datos enva un mensaje a la aplicacin, por ejemplo cuando ocurre un error de integridad referencial Ocurre cada vez que se modifica el estado de la conexin, es decir, cuando cambia el valor de la propiedad State.

InfoMessage

StateChange

Crear una Conexin Usando SQLClient: Imports System.Data.SqlClient Dim en As SglConnection=New SqlConnetion (User Id=sa;Password=_Data Source=Iduenas:Initial Catalog=Nortwind)

Usando Oledb Imports System.Data.Oledb Dim en As OledbConnection=New Oledb Connetion (Provider SQLOLEDB;;_User Id=saPassaword; Data Source=Iduenas:Initial Catalog=Nortwind)

Cerrar una Conexin En Close

Men Data El Men Data aparece cuando se crea un DataApadter que accede a da tos, este men contiene varias opciones, entre las principales: 1. Generar Dataset 2. Preview de Datos

Generar Dataset

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Esta opcin del men Data permite generar un conjunto de registros desconectado o DataSet, para lo cual, se tiene que ingresar el nombre del DataSet y especificar que se desea aadir una instancia de la clase DataSet dentro del programa, tal como se mostr en la figura 5.7 al usar el Server Explorer.

En nuestro caso, continuando con el ejemplo anterior de mostrar los productos elegir la opcin new y escribir dstProducto, luego OK e inmediatamente se aadir un objeto DsProducto1 al diseador.

Para que se vean los productos en tiempo de ejecucin aadir en el evento Load del formulario el siguiente cdigo: DgdProducto.DataSource = DsProducto1.Tables(0).DefaultView SqlDataAdapter1.Fill(DstProducto1) Nota: Si se desea ver las caractersticas del Dataset generado se selecciona el objeto y del Men Data se elige Dataset properties...

Preview de Datos Esta opcin del men Data es usada para mostrar una vista preliminar con los datos creados por el DataSAdapter, es decir los registros de cualquier tabla de un DataSet.

Al elegir esta opcin se presenta una ventana, en donde primero se debe elegir el DataAdapter, en el caso de que sea un Store Procedure con parmetros, podr configurarse el valor de los parmetros.

Luego, en la lista Data tables se presentarn todas las tablas que hayan sido creadas por el DataSet. Elegir una y dar clic en el botn Execute e inmediatamente se presentarn los datos, tal como se muestra en la figura de abajo.

Figura 5.13 Ventana del Preview de Datos

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Algo interesante, que cabe mencionar, es que esta herramienta muestra el tamao aproximado que ocupa los datos mostrados por el Data Table. Si se desea ejecutar una nueva vista de datos, se da clic sobre el botn Clear Results, se elige un nuevo Data Table y clic en Fill Dataset. Para salir de esta herramienta dar clic en el botn Close o sobre el botn de cerrar de la ventana.

Objetos de ADO.NET Despus de ver la forma de acceder a datos mediante herramientas, ahora veremos como usar el modelo de objetos de ADO.NET el cual es a diferencia de su antecesor ADO 2.X totalmente distinto, ya que antes exista un solo modelo de objetos empezando por el componente OLEDB y las clases Connection, Command y Recordset. Ahora los objetos de ADO.NET se encuentra distribuidos en varios modelos de datos, dividindose en dos grupos: Proveedores de datos.NET y Dataset, los cuales se examinan a continuacin:

Objetos Connection y Comand Objeto Connection Se usa para establecer una conexin con el origen de datos y poder asegurar las transacciones que realizan las instrucciones o comandos sobre dicho origen de datos. Este objeto ha tenido muchos cambios con respecto a la versin anterior de ADO, para lo cual analizamos sus elementos.

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Propiedades Propiedad ConnectionString Connection TimeOut Descripcin Configura o devuelve la cadena de conexin que consta del proveedore, usuario, passaword, servidir y base de datos. Devuelve los segundos que puede esperar como mximo mientras trata de conectarse a la base de datos. Si se pasa DataBase PacketSise Provider ServerrVersin State WorkStationId del tiempo de espera se genera un error de conexin Obtiene el nombre del servidor al cual se ha conectado Muestra el tamao de los paquetes en bytes usados para comunicarse con el servidor de datos a travs de la red. Devuelve el nombre del Proveedor OLEDB Regresa la versin del servidor de d a tos que se est usando Devuelve el esta actual de la conexin, que puede ser abierta, en ejecucin, pausada o cerrada Obtiene el nombre del cliente que est conectado al servidor. Mtodos Mtodo Begin Transaction Descripcin Inicia una transaccin que se ejecuta de acuerdo a un cierto nivel de aislamiento, que puede ser de lectura confiable y no ChangeDataBase Close CreateCommand Open confiable Cambia la base de datos a la cual nos conectamos Cierra la conexin a la base de datos Crea un objeto Command asociado con la conexin abierta Abre la conexin hacia el origen del datos de acuerdo a la cadena de conexin. Eventos Evento InfoMessage Descripcin Ocurre cuando el origen de datos enva un mensaje a la aplicacin, por ejemplo cuando ocurre un error de StateChange integridad referencial Ocurre cada vez que se modifica el estado de la conexin, es decir, cuando cambia el valor de la propiedad State. Crear una Conexin Usando SQLClient Imports System.DataSq1Client

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Dim en As Sq1Connection=New Sq1Connection (User Id=sa;Password=;_DataSource=Ldueas; Initial Catalog=Northwind) Cn.open

Usando Oledb: Imports System.DataSq1Oledb Dim en As OledbConnection=New OledbConnection (Provider=SQLOLEDB:User Id=sa;Password=;_DataSource=Ldueas; Initial Catalog=Northwind) Cn.open

Cerrar una Conexin Cn.Close

Objeto Command Se usa para ejecutar instrucciones sobre el origen de datos, tales como ejecutar una consulta (Select), insercin (Insert), actualizacin (Update) o eliminacin (Delete) as como ejecutar un procedimiento almacenado del servidor de datos. Este objeto tambin ha tenido muchos cambios con respecto a la versin anterior de ADO, para lo cual analizamos sus elementos. Propiedades

Propiedad Command Text Command TimeOut CommandType

Descripcin Configura o devuelve la sentencia SQL, el nombre de la tabla o del procedimiento almacenado a ejecutar Devuelve los segundos que se puede esperar como mximo mientras trata de ejecutarse el comando Asigna o recupera el tipo de comando a ejecutar, que puede ser una instruccin SQL, una tabla o procedimiento

Connection Parameters

almacenado. Configura o devuelve la conexin que est usando el comando. Es una coleccin que guarda informacin de los parmetros de un procedimiento almacenado o una consulta con

Transaction

parmetros. Es un objeto que permite manipular transacciones, para esto cuenta con mtodos como: Begin, Commit y RollBack

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Eventos Evento InfoMessage Descripcin Ocurre cuando el origen de datos enva un mensaje a la aplicacin, por ejemplo cuando ocurre un error de StateChange integridad referencial Ocurre cada vez que se modifica el estado de la conexin, es decir, cuando cambia el valor de la propiedad State. Mtodos

Mtodo Cancel CreateParameter ExecuteNonQuery ExecuteReader ExecuteScalar Prepare

Descripcin Cancela la ejecucin de un comando Crea un objeto Parameter para trabajar con un parmetro de un procedimiento almacenado o consulta con parmetros Ejecuta una instruccin SQL y devuelve el nmero de registros afectados. Se usa para ejecutar Insert, Update o Delete Ejecuta una consulta SQL o un procedimiento almacenado de seleccin y devuelve los registros en un objeto DataReader. Ejecuta una instruccin SQL y devuelve un simple valor Crea una versin compilada o preparada del comando en el servidor. Es muy til para dar velocidad a la aplicacin.

Eventos

Evento FillError

Descripcin Ocurre cuando se produce un error al ejecutar el mtodo Fill del DataAdapter para llenar un conjunto de registros en el

RowUptated RowUpdating

Dataset. Ocurre despus de actualizar los registros de un Dataset cuando se invoca al mtodo Update del DataAdapter Ocurre mientras se est actualizando los registros de un Dataset cuando se invoca al mtodo Update del DataAdapter.

Llenar Datos con el DataAdapter

Como ejemplo vamos a llenar un DataGrid con todos los productos de la tabla Products usando el mtodo Fill del DataAdapter.

Usando SQLClient:
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Imports System.Data Imports System.DataSq1Client

Dim en As Sq1Connection=New Sq1Connection (User Id=sa;Password=;DataSource=Server; Initial Catalog=Northwind) Dim da As SqlDataAdapter=New Sq1DataAdapter(Select * From Products,cn) da.Fill (ds, Products) dgdproducto.DataSource = ds.Tables(0).DefaultView

Usando Oledb: Imports System.Data Imports System.Data.Oledb

Dim cn As OledbConnection=New OledbConnection (Provider=SQLOLEDB:User Id=sa;Password=;_DataSource=Ldueas; Initial Catalog=Northwind) Dim da As OledbDataAdapter=New OledbDataAdapter(Select * From Products,cn) Din ds As DataSet=New DataSet (Products) da.Fill (ds, Products) dgdProducto.DataSource = ds.Tables(0).DefaultView

Objeto DataReader El DataReader es una vista de datos de solo lectura (Read Only) y avance solo hacia delante (Forward Only) similar al cursor por defecto generado por el Recordset de ADO.. Este es especial para consultas y es el que consume menos recursos por ser una copia de registros desconectados del origen de datos.

Propiedades Propiedad Depth FieldCount IsClosed Item RecordsAffected Descripcin Devuelve el nivel de anidamiento del registro actual Devuelve el nmero de columnas o campos del registro actual Determina si el DataReader se encuentra cerrado Obtiene el valor del campo especificado en el ndice Devuelve el nmero de registros modificados, insertados o eliminado por una instruccin SQL.

Mtodos Propiedad Close Descripcin Cierra el objeto DataReader


Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

GetDataTypeName GetFieldType GetName GetValue IsDBNull NextResult

Read

Devuelve el nombre del origen del tipo de dato Devuelve el tipo de dato del objeto Obtiene el nombre del campo especificado como ndice Obtiene el valor del campo especificado como ndice Devuelve un valor lgico indicando si el campo no tiene datos Avanza al siguiente conjunto de registros cuando la sentencia SQL que gener el DataReader es compuesta por varios Select. Lee un registro y avanza al siguiente registro, devolviendo True si es que no es el EOF y False si lo es:

Para ver un ejemplo de cmo crear un DataReader revisar el ejemplo del Objeto para crear una consulta de datos, el cual ejecutaba una consulta con el mtodo ExcecuteReader y la almacenaba en un objeto DataReader. Objeto DataSet Definicin El DataSet es el objeto principal de ADO.NET y representa un conjunto de datos en memoria, que pueden incluir tablas, relaciones, etc. Este objeto trabaja desconectado, enviando y recibiendo datos en formato XML. Es a travs del objeto DataSet que se implementa el trabajo con datos desconectados, debido a que este almacena los datos en una o ms tablas relacionadas, y sobre este se realizan las operaciones con los datos, tales como navegacin, filtro, bsqueda, etc. La ventana principal del DataSet es que es intercambiable en cualquier plataforma ya que el conjunto de registros no es binario sino texto en forma de XML, lo que permite integrar aplicaciones de diferentes plataformas con diferentes herramientas. Ahora vamos a analizar las caractersticas del DataSet, detallando sus propiedades, mtodos y eventos, tal como se muestra a continuacin.

Propiedades Propiedad DataSetName Default ViewManager EnforceConstraints ExtendedProperties HasErrors Tables Descripcin Asigna o devuelve el nombre del DataSet actual Obtiene una vista personalizada de registros para realizar operaciones de filtro, bsqueda y navegacin Determina si hubo una infraccin de una regla o restriccin de integridad de datos Obtiene la coleccin de informacin personalizada de usuario. Indica si existe un error en cualquiera de los registros de cualquier tabla del DataSet Es una coleccin de tablas o conjunto de registros

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Mtodos Mtodos AccepChanges Clear Clone Copy GetChanges HasChanges Merge RejectChanges Reset Eventos Evento MergeFailed Descripcin Ocurre al fallar la operacin de combinar el DataSet con otro. Descripcin Enva todos los cambios hechos hasta antes de su llamada Limpia el DataSet eliminando todas las tablas y sus registros Copia la estructura del DataSet en otro, incluyendo esquemas, relaciones y restricciones de las tablas Copia la estructura y los datos del DataSet en otro Obtiene una copia del DataSet con todos los cambios hechos Devuelve un valor lgico indicando si se ha insertado, eliminado o modificado registros en el DataSet Combina un DataSet con otro Deshace todos los cambios hechos hasta antes de su llamada Restaura el DataSet a su estado original

Objeto DataView Es una vista personalizada de los datos de una tabla, es el equivalente al objeto Recordset de ADO y permite ordenar, buscar y filtrar datos. Se pueden tener varias vistas de una misma tabla, flexibilizando el trabajo con datos.

Propiedades Propiedad AllowDelete AlowEdit AllowNew ApplyDefaultSort Count RowStateFilter Descripcin Indica si est permitido eliminar registros Indica si se pueden modificar registros Indica si se puede insertar nuevos registros Devuelve un valor lgico indicado si se est usando el orden por defecto de la vista Devuelve el nmero de registros de la vista Establece o devuelve el estado de los registros filtrados, que pueden ser iguales, adicionados, eliminados, modificados, etc. Ordena por uno o ms campos la vista.

Sort Mtodos Mtodo AddNew CopyTo Delete Find

Descripcin Aade una nueva fila o registro al DataView Copia los registros de la vista en un arreglo, solo usado en Web Elimina un registro especificado por el ndice Busca un registro por la clave primaria que coincida con el
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

valor. Eventos Evento ListChanged Descripcin Ocurre al cambiar el conjunto de registros de la vista. ADO.NET y XML El eXtensible Markip Language (XML) es el lenguaje comn de intercambio de datos en Internet y es un estndar de la industria que se encuentra normado pro el 3WC (World Wide Web Consortium).

XML, es el ncleo sobre el cual est construido Microsoft.NET ya que en gran parte de las clases del FrameWork.NET se encuentra XML como medio para transmitir datos, por ejemplo en ADO.NET en ASPE,NET , sobre todo en los Servicios Wrb XML.

En cuanto a ADO.NET.XML se encuentra presente en el objeto DataSet que recibe y enva datos desde y hacia el origen de datos en forma de documento XML, pero que tambin tiene mtodos para leer y escribir el DataSet en un archivo XML, lo cual tratamos a continuacin.

Mtodo WriteXML Es un mtodo del DataSet que permite crear un archivo XML a partir de los datos de una Tabla del DataSet. Es muy til realizar esto cuando se quiere enviar la informacin a otra plataforma que solo puede procesar archivos de texto, tal como un AS/400 o una Mainframe. Para crear un archivo.XML con el mtodo WriteXML del DataSet escriba el siguiente cdigo en algn comando: Import System.IO Dim archivo As StreamWriter = New StreamWriter (NombreArchivo.xm1) ObjDataset.WriteXm1 (archivo) Archivo.Close ()

Mtodo ReadXML Es otro mtodo del DataSet que permite leer un archivo XML y aadirlo como una Tabla del DataSet. Es muy til realizar cuando se requiere recibir la informacin obtenida desde otra plataforma que solo puede crear archivos de texto, tal como un AS/400 o una Mainframe. Para leer un archivo XML con el mtodo ReadXML del DataSet escriba el siguiente cdigo en algn comando:

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Imports System.IO Dim archivo As StreamReader = New StreamReader (NombreArchivo.xm1) ObjDataset.ReadXm1(archivo) Archivo.close()

Ejercicios Este laboratorio tiene como objetivo mostrar el acceso a datos mediante ADO.NET, usando herramientas de datos, haciendo uso de los objetos de ADO.NET y trabajando con XML, para lo cual se ha dividido en 3 ejercicios que tienen una duracin total aproximada de 60 minutos.

Ejercicio 1: Trabajando con Objetos de ADO.NET Duracin 20 minutos CREATE PROCEDURE sp_Productos_Listar_Porproveedor@IdProveedor int AS Select*From Products Wherw SupplierId=@IdProveedor Order By ProductName Realizar el diseo del formulario llamado frmProducto, aadiendoc dos etiquetas, un ComboBox y un ListBox tal como se muestran en la figura de abajo: Figura 5.18 Diseo del formulario frmProducto

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Para usar OLEDB.NET hay que hacer una referencia al NameSpace adecuado, tal como sigue: Import System.Data.OleDd

Declaramos las siguientes variables: cn para la conexin, cm para el comando, rdS para el cursor de Proveedores, rdP para el cursor de Productos y pm para el parmetro del procedimiento almacenamiento anteriormente creado.

Dim cn As OleDbConnection=New OleDbConnection(Provider=SQLOLEDB,User Id=Data Source=Lduenas; Initial Catalog=Northwind) Dim cm As OleDbComand = New OleDbCommand ( ) Dim rds As OleDbDataReader = Nothing Dim rdP As OleDbDataReader = Nothing Dim pm Aas OleDbParameter = Nothing Creamos un procedimiento que permita mostrar los productos para refrescar la lista de productos. Sub ListarProductos( ) Rdp=cm.ExecuteReader 1stProducto ( ). Items.Clear( ) While rdP.Read 1stProducto( ).Items.Add(rdP (ProductName). ToString) End While rdP While rdP.Close ( ) End Sub Escribimos cdigo en el evento del formulario para abrir la conexin, ejecutar comandos y mostrar datos de productos y proveedores, adems configuramos el comando para ejecutar el procedimiento almacenado. Private Sub frmProducto_Load (...) Handles MyBase.Load cn.open ( ) cm.Connection = cn cm.CommandType = CommandType.Text cm.CommandText = Select SupplierId From Suppliers Order By SupplierId RdS = cm.ExecuteReader
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

While rdS.Read CboProveedor ( ). Items.Add (rdS (SupplierId).TosTring) End While rdS.Close ( ) cm.CommandText = Select ProductName From Products Order By ProductName ListaProductos ( ) cm.CommandType = CommandType.StoredProcedure cm.CommandText = sp_Productos_Listar_PorProveedor pm = cm.Parameters.Add(@IdProveedir",OleDType.Integer) pm.Direction = ParameterDirection.Imput End Sub Finalmente, progresamos el llenado de la lista de product os al elegir un proveedor del ComboBox, pasando el parmetro y ejecutando el procedimiento. Private Sub cboProveedor_SelectedIndexChanged(...) Handles... pm.Value = Cint(cboProveedor.Text) ListaProductos ( ) End Sub Ejercicio 2: Usando XML en ADO.NET Duracin: 20 minutos Elegir un nuevo proyecto Visual Basic y una plantilla de Aplicacin Widows, Vamos a crear una aplicacin que recupere datos de los empleados de un cierto local de

seleccionar en ubicacin la carpeta C:\VBNET\Labs y como nombre escribir Lab05_3. la empresa que se encuentra en la BD, luego vamos a simular recuperar la informacin de los empleados de otro local en un archivo XML y ambas se actualizarn en la Base de Datos. Cambie el nombre del formulario a frmEmpleado.vb, agregue un DataGrid y 4 botones, tal como se muestran en la figura de abajo: Figura 5.19: Diseo del formulario frmEmpleado

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Despus de realizado el diseo hay que crear los objetos Connetion, DataAdapter y DataSet, para lo cual usaremos la ventana del Server Explorer.

Expandir

la

tabla

Employees

del

Server

Explorer

seleccionar

los

campos:

EmployeId, LastName, FirstName y Title, arrastralos hacia el formulario y automtica se habrn creado los objetos: Sq1Connectio1 y Sq1DataAdapter. Ahora creamos el Dataset dando clic derecho al objeto Sq1DataApter y eligiendo del men contextual Generate Dataset...., luego de la ventana elegimos New e ingresamos como nombre: dstEmpleado y OK, Imnediatamente se crear el objeto DstEmpleado1. Enlazamos el Dataset al control DataGrid configurando la propiedad DataSource de este ltimo en DstEmpleado.Employees. Iniciamos la programacin indicando que vamos a trabajar con archivos, para lo cual es necesario hacer una referencia al NameSpace de flujos de entrada y salida de datos, tal como se muestra: Imports System.IO Escribimos cdigo para llenar los datos de los empleados Private Sub btnLeerBD_Click(...) Handles btnLeerBD.Click Sq1DataAdapter1.Fill (DstEmpleado1, Employees)

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Los datos mostrados lo grabamos en un archivo llamado Empleados.xml. Private Sub btnEscribirXML_Click(...)Handles btnEscribirXML.Click Dim arch As StreamWhiter= New StreamWhiter (c:\Empleados.xml) DstEmpleado1.WhiteXm1(arch) Arch.Close End Sub

Recuperamos el archivo Empleados.xml dando doble clic y se mostrar en el Browser, ver el cdigo fuente y modificar los datos de los empleados, volver a grabar el archivo.

Escribimos cdigo para recuperar los datos del archivo XML y tenerlo junto con la tabla recuperada de la Base de Datos. Provate Sub btnLeerXML_Click(...) Handles btnLeerXML.Click Dim arch As StreamReader = New StreamReader (c:\Empleados.xml) DstEmpleado1.ReadXml(arch) arch.Close ( ) End Sub

Finalmente, actualizamos toda la data y la enviamos a la base de datos Private Sub btnActualizarBD_Clic(...) Handles Sq1DataAdapter1.Update (DsEmpleado1, Employees) End Sub CAPITULO 6

CREANDO COMPONENTES.NET Introduccin a la Programacin Orientada a Objetos (POO) Visual Basic.NET tiene todas las caractersticas de la Programacin Orientada a Objetos (POO), ya que el Marco.NET soporta los requerimientos para que todos los lenguajes que trabajen con el usen POO. Estas caractersticas son: 1. Encapsulacin Cuando creamos un componente.NET este se encuentra encapsulado, ya que ocupa la lgica de programacin a los usuarios que lo utilizan, permitiendo manejar dicho objeto a travs de sus miembros, tales como propiedades y mtodos, realizando el desarrollo de aplicaciones mas simple, al ocultar la complejidad del cdigo (encapsular).

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

2. Herencia La herencia es la caracterstica en la cual una clase llamada Clase base pasa o hereda todas sus caractersticas a otra llamada Clase Derivada, permitiendo la total reusabilidad del cdigo escrito en las aplicaciones. La herencia de clases es una nueva caracterstica de Visual Basic.NET y no solo es a nivel de clases creadas en este lenguaje sino a travs de cualquier lenguaje del Marco.NET 3. Polimosfismo Otra caracterstica interesante de la POO es el polimorfismo, en el caso de Visual Basic.NET este se puede crear cuando en una clase derivada se implementa de manera distinta un mtodo herecado de la clase base. Es decir. Podemos tener un mismo mtodo con dos comportamientos distintos (cdigos distintos) de acuerdo al tipo de objeto, que puede ser creado de la clase base o de la derivada. Como vemos las nuevas caractersticas de la Programacin Orientacin a Objetos (POO) mezcladas con la facilidad de uso de la Programacin Orientada a Componentes (POC) dan como resultado la creacin de aplicaciones poderosas y con un bajo costo de mantenimiento. Sin duda, la reusabilidad y encapsulacin ofrecida por la tecnologa COM basada en componentes se ve incrementada por la herencia de clases y el polimorfismo ofrecida por la tecnologa.NET aplicaciones. Para finalizar esta introduccin a los componentes.NET la otra gran ventaja con respecto a COM es la distribucin de componentes, que en este ltimo era una pesadilla debido haba que registrar componentes y lidiar con los problemas de compatibilidad de versiones; en cambio con NET los componentes no se registran y su distribucin es automtica con solo copiar y pegar la aplicacin. Elementos de una Clase (Miembros) Todos los componentes estn formados por clases y estas a su vez se componen de elementos o miembros. Los cuales trataremos en este captulo. Para ilustrar mejor tenemos el siguiente grfico. A diferencia de Visual Basic en donde las clases podian tener solo propiedades, mtodos, y constantes enumeradas, en Visual Basic NET.las clases pueden tener campos delegados, constructores y destructores. Adems pueda ser que una clase herede de otre que este dentro del componente o en otro componente. NET. orientada a objetos; logrndose una verdadera integracin entre

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Clase Una clase es la plantilla para crear el objeto, es aqu donde se definen las partes del objeto. Datos propiedades, constantes enumeraciones, campos. Y procedimientos que operan sobre los datos MTODOS. La clase define un nuevo tipo de datos que resulta se la abstraccin de algn elemento de aplicacin por lo tanto, es necesario disear bien la aplicacin antes de crear la clase, ya que esta solo implementa el diseo de objetos previamente diseado. Declaracin de una Clase A diferencia de Visual Basic o, donde el tipo de clase estaba dado por la propiedad INSTANCING. De la clase, que podra ser privada, dependiente Public Not Create Table o, publica SingleUse. GlabalSingleUse, MultiUse, o GlabalSingleUse o, MultiUse, en VB. NET. No existe propiedades para el modulo de clases, ya que las caractersticas de las clases dependen de la forma de su declaracin. Sintaxis {tipo de declaracin} class -nombr clase{definicin de miembros de clase} End Class Existen varias formas de declarar una clase, que detallamos a continuacin en la siguiente tabla. Declaracin Public Alcance o Ambito Puede usarse en cualquier otra clase del componente o En las aplicaciones Private clientes. No puede usarse en otras clases del componente ni en Protected Las aplicaciones clientes Solo puede ser usadas por las clases derivadas de este, Pero no por las Friend aplicaciones clientes. solo puede ser usadas por las otras clases del componente, pero no por las Protected Friend aplicaciones clientes. Es una combinacin de ambas, es decir la clase puede ser usada por otras clases del componente y por Las clases derivadas.
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Shadows

indica que los miembros de la clase pueden ocultarse en La clase derivada, es decir que al heredar se ocultan Ciertos miembros. determinan que los miembros de la clase pueden heredarse a una clase derivada, pero no puede ser creada Por explicaciones clientes. la clase no puede heredarse pero si instanciarse desde Aplicaciones clientes.

Mustlnherit

Notlnheritable

Ejemplo Si queremos crear una aplicacin se planilla necesitamos disear un componente que manipule informacin del empleado, sus horas trabajadas, tardanzas, faltas, etc. Para crear la clase empleado, de tal manera que pueda heredarse y utilizarse tanto dentro del componente como en las aplicaciones clientes, definiramos la clase en Visual Basic, tal como sigue. Constantes Campos y Enumeraciones. Constantes Una constante es un dato que permanece fijo en toda ejecucin de la aplicacin, a diferencia se la variable cuyo valor va cambindose en tiempo de ejecucin. Se utiliza para facilitar el mantenimiento del cdigo, ya que si sefinimos un valor en constante, si esto cambia, con solo cambiar el valor de la constante, la aplicacin trabajaria con el nuavo valor. Sintasis {public}{private}{const- nombre- {As-tipo datp-}- valor-. Ejemplo Podemos crear un par de constantes que almacenen el valor de las tazas de los impuestos a la rente e impuesto extraordinario de solidaridad, para propsitos de calculo de descuentos. Private Const TasaIRenta As Sirgle-0 1 Private Const TasaIEs As Single- 0 .02

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Nota En Visual Basic. NET si no define el tipo de dato de la constante se asume que el objeto, ya no variant como el Visual Basic. O, debido a que este tipo de dato ya no existe. Campos Un campo es una variable local para la clase, es decir solo aplicaciones clientes. En campo solo puede ser una variable privada o protegida que se use dentro de la clase para almacenar un valor usado por alguna propiedad o mtodo, sin que este pueda ser visto o instanciado por otras aplicaciones. Sintaxis. {Private} {Friensd} Nombre Campo {As-Tipo Dato-} Ejemplo. Podemos crear un par de campos que almacenen el clculo de los impuestos. Private IES As Single. Private Enumeraciones Una enumeracion es una esrtructura de datos persinalizasa que define un conjunto de valores enteros. Por defecto, el primer dato enumerado empieza con 0, el segundo en 1, y as sucesivamente , aunque esto pueda cambiarse al momento de definir la numeracin. Las numeraciones son tiles para dar claridad al programa y evitar errores de asignacin de variable, ya que si definimos una variable de tipo enumerada, el valor que se pueda asignar est limitado por el rango de valores definidos en la enumeracin. Sintaxis {Public}{Private}{Protected}{Friend}{Enum- Nombre Enumeracin-Elemento1-{Valor-} -Elemento2-{Valor-} -Elemento3-{Valor-} End Enum Ejemplo. Vamos a crear dos enumeraciones, la primera que describa los cargos de los
Web Developer Microsoft.NET

puede ser usada

internamente por los miembros de la clase pero no por otras clases o por

Irenta As Single.

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

empleados que se usara desde otras clases y aplicaciones, y la segunda que defina las reas de la empresa para propsitos internos para trabajar informacin del empleado. Public Enum Cargos Auxiliar Tcnico Ingeniero Secretaria Vendedor End Enum Areas Private Enum Areas Gerencia-100 Contabilidad-200 Produccin-300 Sistemas-400 Ventas-500 End Enum Para usar estas enumeraciones creadas, ten solo basta declarar una variable de estos tipos y asignarle un valor definido, por ejemplo para el caso anterior sera como sigue. Din Cargo As Cargos Cargo- cargos. Vendedor Dim Area As Areas Area Areas. Ventas. Propiedades Una propiedad es una caracterstica del objeto que tiene informacin sobre un cierto atributo de este como por ejemplo su nombre, descripcin, etc. Las propiedades son mtodos que se trabajan como si fuesen campos. Con la diferencia que el campo es interno solo para el uso de la clase, en cambio las propiedades se usan fuera de la clase. A diferencia de la versin anterior de Visual Basic que existan 3 estructuras para declarar una propiedad {Property Get Let y Set}ahora en Visual Basic. NET solo existe una estructura llamada Property donde internamente se define si la propiedad es lectura {Get} y o estructura {Set} tal como se muestra abajo.
Web Developer Microsoft.NET

con

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Sintaxis {Tipo de Declaracin} Property-Nombre{As Tipo Dato-} {Read Only} Get -InstruccionesEnsd Get} {{Write Only} Set {By Val Value{ As- Tipo Dato} -InstruccionesEnd Set}. Existen muchas formas de declarar una propiedad, que explicamos en la sgte tabla.

Declaracin Default

Uso Indica que la propiedad es por defecto (no es necesario escribirla) puede ser usada desde cualquier clase o aplicacin Solo puede ser accesada desde dentro de la clase Se usa desde dentro de la clase o desde una clase derivada Puede ser usada desde otras clases o desde una clase derivada Puede ser usada desde otras clases componentes pero no fuera. Tiene las caractersticas de la protegida y amiga, es decir, se usa dentro de la clase, desde una clase derivada o desde otra clase del mismo componente, pero no en aplicaicones clientes. Indica que el valor de la propiedad solo puede ser recuperado pero no escrito. Solo puede tener la clusula Set o no Get. Permite que la propiedad de la clase base sea sobrecargada, es decir definida varias veces en las clases derivadas pero con diferentes parmetros que la propiedad definida en la clase Base Permite sobrescribir la propiedad por

Private Protected Friend Protected Protected Friend

ReadOnly

Overloads

Overrides

otra

propiedad con el mismo nombre en una clase Overridable derivada Permite sobrescribir la propiedad por mtodo con
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

NotOverridable MustOverride

el mismo nombre en una clase derivada Indica que la propiedad no puede ser sobrescrita por nadie en ninguna clase derivada Indica que la propiedad no puede ser implementada en esta clase y puede ser implementada en una clase derivada Se usa para ocultar una propiedad de tal manera que no pueda implementarse en una clase derivada. Permite que la propiedad sea compartida y pueda llamarse sin necesidad de instanciar a la clase sino a travs de su nombre.

Shadows Shared

Ejemplo Para muestra clase Empleado, podemos implementar las propiedades cdigo, nombre y bsico del empleado, de tal manera que se puedan leer y escribir en cualquier parte. Private mvarCodigo As Integer Private mvarNombr As String Private mvarSueldo As Single Public Property Codigo ( ) As Integer Gat Codigo = mvarCodigo End Get Set (ByVal Value As Integer) mavCodigo = Value end Set End property Public Property Nombre ( ) As String Get Nombre = mvarNombre End Get Set (ByVal Value As String) Get Nombre = mvarNombre End Get Set (ByVal Value As String) mavNombre = Value End Set
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

End Property Public Property Sueldo ( ) As Single Get Nombre = mvarSueldo End Get Set (ByVal Value As Stringle) Get mvarSueldo = Value End Get End Property Mtodos Un mtodo es un conjunto de instrucciones que modifica el estado de las propiedades en trminos de objetos, un mtodo es un servicio o funcin trminos de cdigo especfica. En Visual Basic. NET todos los miembros de una clase (propiedades, eventos, constructores, destructores, etc.) son en realidad mtodos, claro, estos ltimos son mtodos especiales. Un procedimiento o funcin en una clase es un mtodo, y sus caractersticas son las mismas que cuando se encuentran en un mdulo estndar, es decir, si es procedimiento de declaracin es con Sub, y si es funcin de declaracin es con Function, tal como se muestra en las sintaxis de abajo. Sintaxis [Tipo Declaracin] [Sub| Funtion] <Nombre> ([Praram])| As<Tipo Dato> <Instrucciones> [Exit [Sub Function]] End Property En cuanto al tipo de declaracin, es muy similar al de las propiedades, que describimos anteriormente en una tabla, es decir, puede declararse el mtodo como Public. Private, Protected, Friend, Protected Friend y Shadows. Tambin hay que recordar que si el mtodo es una funcin siempre se deber devolver un valor que se puede hacer de dos formar: de manera clsica asignado un valor al nombre de la funcin o de una nueva forma escribiendo sentencia return y el valor.
Web Developer Microsoft.NET

del objeto, mientras que en

un mtodo es un

procedimiento o funcin que realiza una tarea

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Ejemplo En nuestro ejemplo de Empleado, podemos implementar dos mtodos pblicos, uno que permita asignar valores a las propiedades creadas: cdigo, nombre y sueldo del empleado y otro mtodo que permita actualizar el sueldo.

Eventos Un evento es un suceso que le ocurre al objeto y que le indica o notifica sobre un cambio en sus atributos o propiedades. Un evento es necesario para controlar el estado de las propiedades e informar a las aplicaciones del nuevo estado, para que estas realicen la accin correspondiente. Es fcil entender eventos asociados a objetos como los controles, por ejemplo en el objeto Button se tiene el evento Click que se desencadena al seleccionar el botn, el evento MouseMove que ocurre al pasar el mouse por el botn. Y as hay muchos eventos asociados al objeto botn; pero, cuando trabajamos con clases, los eventos son ms abstractos y un poco ms difciles de entender, ya que poda confundirse con los mtodos. Para aclarar el concepto de eventos definamos mentalmente una clase llamada Cuenta para un componente llamado Banco. Esta clase cuenta tiene propiedades como NumeroCta, FechaApertura, TipoCta, NumeroTarjeta y Saldo. Ademas tiene mtodos como Depsito, Retiro y Transparencia que modifican el estado del saldo. Cuando hacemos un Retiro de nuestra cuenta donde el monto a retirar supera al Saldo se desencadena un evento llamado SaldoInsuficiente y tambin cuando durante el dia hemos retirado mas del monto permitido se desencadena el evento LimiteretiroDiario para crear un evento en la clase primero declare el evento con la sentencia Event y luego llamase con RaiseEvent,tal como se muestra en la sintaxis. Declaracin Sintaxis. [Tipo Declaracion]Event <Nombre>([Parmetro(s)] Declaracin Llamada: RaiseEvent <Nombre>([Parmetro(s)] El tipo de declaracin, es igual que la de los metodos , es decir, puede ser Public, Private, Protected, Friend y Shadows

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Ejemplo: Crear dos ventos que nos informe cuando el sueldo es bajo o alto; para nuestra realidad un sueldo bajo cuando es menos a 500 y alto cuando se mayor a 300. Public Event SueldoBajo() Public Event SueldoAlto() Private sub ChequearSueldo() If mvarSueldo<500 then RaiseEvent SueldoBajo() Else RaiseEvent SueldoAlto() End if End sub Para finalizar, deberiamos llamar a la rutina ChequearSueldo al final de CrearEmpleado y ActualizarSueldo que se modifica el Sueldo

ARQUITECTURA LOGICA

CAPA PRESENTACIN

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

CAPA NEGOCIO

CAPA SERVICIO

CAPA DE DATOS
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

EJERCICIOS RESUELTOS 1) Calculadora

Public Class Calculadora.vb Inherits System.Windows.Forms.Form Dim clearDisplay As Boolean Dim Operand1 As Double, Operand2 As Double Dim Operator As String Private Sub bttn1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bttn0.Click, bttn1.Click, bttn2.Click, _ bttn3.Click, bttn4.Click, bttn5.Click, bttn6.Click, bttn7.Click, bttn8.Click, bttn9.Click If clearDisplay Then lblDisplay.Text = "" clearDisplay = False End If lblDisplay.Text = Val(lblDisplay.Text + sender.text) End Sub
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Private Sub bttnPeriod_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bttnPeriod.Click If lblDisplay.Text.IndexOf(".") > 0 Then MsgBox(lblDisplay.Text.IndexOf(".")) Exit Sub Else MsgBox(lblDisplay.Text.IndexOf(".")) lblDisplay.Text = lblDisplay.Text & "." End If End Sub Private Sub bttnPlus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bttnPlus.Click Operand1 = Val(lblDisplay.Text) Operator = "+" clearDisplay = True End Sub Private Sub bttnEquals_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bttnEquals.Click Dim result As Double Operand2 = Val(lblDisplay.Text) Try Select Case Operator Case "+" result = Operand1 + Operand2 Case "-" result = Operand1 - Operand2 Case "*" result = Operand1 * Operand2 Case "/" If Operand2 <> "0" Then result = Operand1 / Operand2 ' lblDisplay.Text = result End Select Catch exc As Exception MsgBox(exc.Message) result = "ERROR" Finally lblDisplay.Text = result clearDisplay = True End Try End Sub Private Sub bttnMinus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bttnMinus.Click Operand1 = Val(lblDisplay.Text) Operator = "-" clearDisplay = True ' lblDisplay.Text = "" End Sub Private Sub bttnMultiply_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bttnMultiply.Click Operand1 = Val(lblDisplay.Text) Operator = "*" clearDisplay = True End Sub
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Private Sub bttnDivide_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bttnDivide.Click Operand1 = Val(lblDisplay.Text) Operator = "/" clearDisplay = True End Sub Private Sub CalculatorForm_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress If System.Char.IsDigit(e.KeyChar) Or e.KeyChar = "." Then If clearDisplay Then lblDisplay.Text = "" clearDisplay = False End If lblDisplay.Text = lblDisplay.Text + e.KeyChar End If End Sub Private Sub bttnClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bttnClear.Click lblDisplay.Text = "" End Sub End Class 2) Ejercicio de Mens

Imports System.Drawing.Drawing2D Public Class Menu Inherits System.Windows.Forms.Form Dim ctlMDI As MdiClient
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Private Sub Menu_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load StatusBarPanel3.Text = "0 Docs" StatusBarPanel3.ToolTipText = "Numero de Documentos Abiertos" StatusBarPanel4.Text = Date.Now.ToLongTimeString StatusBarPanel4.ToolTipText = Date.Today.ToLongDateString 'Me.BackgroundImage = BackgroundImage.FromFile("C:\Program Files\Common Files\Crystal Decisions\1.0\SSChart\Textures\Mezclado brillante\richaquagranite2.bmp") Iniciar_Boton(False) cambiar_fodo() End Sub Private Sub Menu_Resize(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Resize If Not (Me.ctlMDI Is Nothing) Then Me.PintarFondo(Me.ctlMDI, New PaintEventArgs(Me.ctlMDI.CreateGraphics, New Rectangle(Me.ctlMDI.Location, Me.ctlMDI.Size))) End If End Sub Sub cambiar_fodo() Dim ctl As Control 'Estamos buscando en control que representa el area cliente MDI For Each ctl In Me.Controls Try ctlMDI = CType(ctl, MdiClient) ' Asignamos el color de fondo ctlMDI.BackColor = Color.AntiqueWhite 'Aqu asignamos el manejador para pintar el fondo con degradados o lo que 'queramos. Si solo queremos cambiar el color de fondo no hace falta, ni las funciones siguientes tampoco AddHandler ctlMDI.Paint, AddressOf PintarFondo Catch ex As InvalidCastException End Try Next End Sub Private Sub PintarFondo(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Dim GradientePanel As New LinearGradientBrush(New RectangleF(0, 0, ctlMDI.Width, ctlMDI.Height), Color.Blue, Color.Black, LinearGradientMode.Vertical) e.Graphics.FillRectangle(GradientePanel, New RectangleF(0, 0, ctlMDI.Width, ctlMDI.Height)) End Sub Public Sub Menu_mdichildactivate(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.MdiChildActivate If n = 0 Then StatusBarPanel1.Text = "" Else StatusBarPanel1.Text = Me.ActiveMdiChild.Text End If End Sub Public Sub validar_Boton_Menu(ByVal Habilitado As Boolean) mnuArchivo_Grabar.Enabled = Habilitado ToolBarButton3.Enabled = Habilitado mnuEdicion.Enabled = Habilitado
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

mnuFormato.Enabled = Habilitado End Sub Public Sub Validar_Copiar_cortar(ByVal Habilitado As Boolean) mnuEdicion_Copiar.Enabled = Habilitado mnuEdicion_Cortar.Enabled = Habilitado ToolBarButton4.Enabled = Habilitado ToolBarButton5.Enabled = Habilitado End Sub Public Sub validar_pegar(ByVal Habilitado As Boolean) mnuEdicion_Pegar.Enabled = Habilitado ToolBarButton6.Enabled = Habilitado End Sub Public Sub Iniciar_Boton(ByVal Habilitado As Boolean) validar_Boton_Menu(Habilitado) Validar_Copiar_cortar(Habilitado) validar_pegar(Habilitado) End Sub Private Sub mnuArchivo_Nuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuArchivo_Nuevo.Click Dim x As New Form2() n += 1 x.MdiParent = Me x.Text = "documento" & n.ToString x.Show() StatusBarPanel3.Text = n.ToString & "Docs" Iniciar_Boton(True) End Sub Sub mnuArchivo_Abrir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuArchivo_Abrir.Click With odgEditor .Title = "Abrir archivo de texto enriquecido" .Filter = "Archivo de Texto enriquecido (*.rtf)|*.rtf" If .ShowDialog = DialogResult.OK And .FileName <> "" Then mnuArchivo_Nuevo.PerformClick() Dim x As RichTextBox = Me.ActiveMdiChild.ActiveControl x.LoadFile(.FileName) Cambiar_Nombre(.FileName) End If End With End Sub Public Sub Cambiar_Nombre(ByVal Nombre As String) Me.ActiveMdiChild.Text = Nombre StatusBarPanel1.Text = Nombre End Sub Private Sub mnuArchivo_Grabar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuArchivo_Grabar.Click With sdgEditor .Title = "Guardar archivo enriquecido" .Filter = "Archivo de Texto enriquecido)*.rtf)|*.rtf" If .ShowDialog = DialogResult.OK And .FileName <> "" Then Dim x As RichTextBox = Me.ActiveMdiChild.ActiveControl
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

x.SaveFile(.FileName) Cambiar_Nombre(.FileName) End If End With End Sub Private Sub mnuEdicion_Copiar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuEdicion_Copiar.Click Dim x As RichTextBox = Me.ActiveMdiChild.ActiveControl Clipboard.SetDataObject(x.SelectedText) End Sub Private Sub mnuEdicion_Cortar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuEdicion_Cortar.Click Dim x As RichTextBox = Me.ActiveMdiChild.ActiveControl Clipboard.SetDataObject(x.SelectedText) x.SelectedText = "" End Sub Private Sub mnuEdicion_Pegar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuEdicion_Pegar.Click Dim x As RichTextBox = Me.ActiveMdiChild.ActiveControl Dim iData As IDataObject = Clipboard.GetDataObject If iData.GetDataPresent(DataFormats.Text) Then x.SelectedText = iData.GetData(DataFormats.Text) End If End Sub Private Sub mnuFormato_Fondo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuFormato_Fondo.Click Dim x As RichTextBox = Me.ActiveMdiChild.ActiveControl With cdgEditor If .ShowDialog = DialogResult.OK Then x.BackColor = .Color End If End With End Sub Private Sub mnuFormato_Fuente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuFormato_Fuente.Click Dim x As RichTextBox = Me.ActiveMdiChild.ActiveControl With fdgEditor If .ShowDialog = DialogResult.OK Then x.ForeColor = .Color ' x.Font = .Font x.SelectionFont = .Font 'x.SelectionColor = .Color End If End With End Sub Private Sub mnuVentana_Horizontal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuVentana_Horizontal.Click Me.LayoutMdi(MdiLayout.TileHorizontal) End Sub

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Private Sub mnuVentana_Vertical_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuVentana_Vertical.Click Me.LayoutMdi(MdiLayout.TileVertical) End Sub Private Sub mnuVentana_Cascada_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuVentana_Cascada.Click Me.LayoutMdi(MdiLayout.Cascade) End Sub Private Sub ToolBar1_ButtonClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolBarButtonClickEventArgs) Handles ToolBar1.ButtonClick Select Case e.Button.ImageIndex Case 0 mnuArchivo_Nuevo.PerformClick() Case 1 mnuArchivo_Abrir.PerformClick() Case 2 mnuArchivo_Grabar.PerformClick() Case 3 mnuEdicion_Copiar.PerformClick() Case 4 mnuEdicion_Pegar.PerformClick() Case 5 mnuEdicion_Cortar.PerformClick() End Select End Sub Private Sub MenuItem9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem9.Click End End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick StatusBarPanel2.Text = Date.Now.ToLongTimeString End Sub End Class FrmDocumento.vb

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Public Class frmDocumento Inherits System.Windows.Forms.Form Private Sub mnuCortar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuCortar.Click Clipboard.SetDataObject(RichTextBox1.SelectedText) RichTextBox1.SelectedText = "" End Sub Private Sub mnuCopiar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuCopiar.Click Clipboard.SetDataObject(RichTextBox1.SelectedText) End Sub Private Sub mnuPegar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuPegar.Click Dim iData As IDataObject = Clipboard.GetDataObject If iData.GetDataPresent(DataFormats.Text) Then RichTextBox1.SelectedText = iData.GetData(DataFormats.Text) End If End Sub Private Sub frmDocumento_closed(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Closed n -= 1 End Sub End Class

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

3) El objetivo de este ejercicio es como trabajar con Dataset y Generar XML

Public Class FrmXML Inherits System.Windows.Forms.Form Private Sub FrmData_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ds = New DataSet() ds.Tables.Add("producto") ds.Tables(0).Columns.Add("Codigo") ds.Tables(0).Columns.Add("Nombre") ds.Tables(0).Columns.Add("Descripcion") 'campo idproducto ds.Tables(0).Columns(0).AllowDBNull = False 'no permite nulos ds.Tables(0).Columns(0).DataType = Type.GetType("System.String") ds.Tables(0).Columns(0).MaxLength = 6 'campo nomproducto ds.Tables(0).Columns(1).DataType = Type.GetType("System.String") ds.Tables(0).Columns(1).MaxLength = 20 'campo descproducto ds.Tables(0).Columns(2).DataType = Type.GetType("System.String") ds.Tables(0).Columns(2).MaxLength = 40 'definimos llaves primarias Dim keys(0) As DataColumn keys(0) = ds.Tables(0).Columns(0) ds.Tables(0).PrimaryKey = keys End Sub Private Sub cmdagregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdagregar.Click On Error GoTo ErrorCtx Dim rw As DataRow rw = ds.Tables(0).NewRow
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

rw("Codigo") = txtcodigo.Text rw("Nombre") = txtnombre.Text rw("Descripcion") = txtdesc.Text ds.Tables(0).Rows.Add(rw) rw = Nothing DataGrid1.DataSource = ds.Tables(0) Exit Sub ErrorCtx: MsgBox(Err.Description, MsgBoxStyle.Information + MsgBoxStyle.OKOnly) End Sub Private Sub cmdverxml_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdverxml.Click Dim frm As ver frm = New ver() frm.Show() End Sub Private Sub cmdsalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Me.Close() End Sub Private Sub cmdNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdNuevo.Click Dim obj As Control For Each obj In Me.GroupBox1.Controls If TypeOf obj Is TextBox Then obj.Text = "" Next txtcodigo.Focus() End Sub End Class

Public Class verXML


Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Inherits System.Windows.Forms.Form Private Sub cmdsalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdsalir.Click Me.Close() End Sub Private Sub verXML_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load txtver.Text = ds.GetXml txtver.ForeColor = Color.Blue End Sub End Class

4)

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Public Class Frmmant Inherits System.Windows.Forms.Form


Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Public strconexion As String = "data source=(local);initial catalog=northwind;integrated security=SSPI;persist security info =false;workstation id=GESTION;packet size=4096" Private Sub Frmmant_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load cargar() End Sub Public Sub insertarRegion() Dim strsql As String Dim strconn As String ' Dim da As SqlClient.SqlDataAdapter Dim db As SqlClient.SqlCommandBuilder Dim ds As DataSet Dim rw As DataRow ' strsql = "select * from region" da = New SqlClient.SqlDataAdapter(strsql, strconexion) db = New SqlClient.SqlCommandBuilder(da) ds = New DataSet ' da.Fill(ds, "Region") rw = ds.Tables("Region").NewRow rw("RegionID") = txtid.Text rw("RegionDescription") = txtterritorio.Text ds.Tables("region").Rows.Add(rw) da.Update(ds, "Region") End Sub ' Public Sub cargar() Dim strsql As String Dim strconn As String ' Dim da As SqlClient.SqlDataAdapter ' Dim ds As DataSet ' strsql = "select * from region" da = New SqlClient.SqlDataAdapter(strsql, strconexion) ds = New DataSet da.Fill(ds, "Regiones") dtgrid.DataSource = ds.Tables(0) End Sub ' Public Sub modificar() Dim strsql As String ' Dim da As SqlClient.SqlDataAdapter Dim db As SqlClient.SqlCommandBuilder Dim ds As DataSet Dim rw As DataRow Dim cadena(0) As Object ' strsql = "select * from region" ' da = New SqlClient.SqlDataAdapter(strsql, strconexion)
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

db = New SqlClient.SqlCommandBuilder(da) ds = New DataSet ds.Tables.Add("region") da.Fill(ds, "region") ' cadena(0) = txtid.Text Dim keys(0) As DataColumn keys(0) = ds.Tables(0).Columns(0) ' ds.Tables(0).PrimaryKey = keys rw = ds.Tables("region").Rows.Find(cadena) rw("RegionDescription") = txtterritorio.Text da.Update(ds, "region") dtgrid.DataSource = ds.Tables(0) End Sub Private Sub cmdSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSalir.Click End End Sub Private Sub cmdagregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdagregar.Click cmdfunciones.Text = "&Insertar" tbcontrol.SelectedIndex = 1 End Sub Private Sub cmdcancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdcancelar.Click tbcontrol.SelectedIndex = 0 End Sub Private Sub cmdfunciones_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdfunciones.Click Select Case cmdfunciones.Text Case "&Actualizar" modificar() Case "&Insertar" insertarRegion() cargar() End Select End Sub Private Sub cmdModificar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdModificar.Click cmdfunciones.Text = "&Actualizar" tbcontrol.SelectedIndex = 1 txtid.Text = dtgrid.Item(dtgrid.CurrentRowIndex, 0) txtterritorio.Text = dtgrid.Item(dtgrid.CurrentRowIndex, 1) End Sub

5)

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Public Class frmEmpleadoDatos Inherits System.Windows.Forms.Form Const Nuevo = 1 Const Modificar = 2 Const Eliminar = 3 Dim operacion As Integer Dim tblempleado As New DataTable("Empleados") Dim WithEvents cmrEmpleado As CurrencyManager Private Sub ConfigurarEnlazarTabla() With tblempleado .Columns.Add(New DataColumn("LastName", GetType(System.String))) .Columns.Add(New DataColumn("FirstName", GetType(System.String))) .Columns.Add(New DataColumn("Birthdate", GetType(System.DateTime))) End With cmrEmpleado = CType(Me.BindingContext(tblempleado), CurrencyManager) End Sub Sub limpiarTextos() txtLastName.Clear() txtFirstName.Clear() txtBirthDate.Clear() End Sub Sub Mostrar_Data() If cmrEmpleado.Position > -1 Then Dim fila As DataRow = tblempleado.Rows(cmrEmpleado.Position) txtLastName.Text = fila("LastName") txtFirstName.Text = fila("FirstName") txtBirthDate.Text = fila("BirthDate") gbxPosicion.Text = cmrEmpleado.Position + 1 & "/" & cmrEmpleado.Count End If End Sub Private Sub Editar(ByVal vEstado As Boolean) txtLastName.Enabled = vEstado txtFirstName.Enabled = vEstado txtBirthDate.Enabled = vEstado

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

btnNuevo.Enabled = Not vEstado btnModificar.Enabled = Not vEstado btnGrabar.Enabled = vEstado btnEliminar.Enabled = Not vEstado btnInicio.Enabled = Not vEstado btnAnterior.Enabled = Not vEstado btnSiguiente.Enabled = Not vEstado btnUltimo.Enabled = Not vEstado End Sub Private Sub frmEmpleadoDatos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ConfigurarEnlazarTabla() Mostrar_Data() Editar(False) End Sub Private Sub btnNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNuevo.Click operacion = Nuevo limpiarTextos() Editar(True) End Sub Private Sub btnModificar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnModificar.Click operacion = Modificar Editar(True) End Sub Private Sub btnGrabar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGrabar.Click Select Case operacion Case Nuevo Dim fila As DataRow fila = tblempleado.NewRow() fila("LastName") = txtLastName.Text fila("FirstName") = txtFirstName.Text fila("BirthDate") = txtBirthDate.Text tblempleado.Rows.Add(fila) MessageBox.Show("Registro Grabado", "Aviso") Editar(False) Mostrar_Data() Case Modificar Dim fila As DataRow = tblempleado.Rows(cmrEmpleado.Position) fila.BeginEdit() fila("LastName") = txtLastName.Text fila("FirstName") = txtFirstName.Text fila("BirthDate") = txtBirthDate.Text fila.EndEdit() Editar(False) End Select End Sub Private Sub btnEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEliminar.Click
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

operacion = Eliminar If MessageBox.Show("?Seguro de eliminar?", "Borrar", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) = DialogResult.Yes Then Dim fila As DataRow = tblempleado.Rows(cmrEmpleado.Position) tblempleado.Rows.Remove(fila) MessageBox.Show("Registro eliminado", "Aviso") Mostrar_Data() End If End Sub Private Sub btnInicio_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInicio.Click cmrEmpleado.Position = 0 End Sub Private Sub btnAnterior_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAnterior.Click If cmrEmpleado.Position > 0 Then cmrEmpleado.Position -= 1 End Sub Private Sub btnSiguiente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSiguiente.Click If cmrEmpleado.Position < cmrEmpleado.Count - 1 Then cmrEmpleado.Position += 1 End Sub Private Sub btnUltimo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUltimo.Click cmrEmpleado.Position = cmrEmpleado.Count - 1 End Sub Private Sub cmrEmpleado_PositionChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmrEmpleado.PositionChanged Mostrar_Data() End Sub End Class

6) Acceso a datos - Construir un Windows Form con maestro / detalle

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Este ejemplo le muestra cmo construir una aplicacin con tablas maestro / detalle. Este tipo comn de formulario vinculado a datos es til para navegar a travs de los registros y ver diferentes niveles de detalles para los datos relacionados con cada registro. Para este ejemplo utilizaremos con tabla Maestra Orders y otra tabla ser Order Details como el detalle. Navegue hacia adelante y hacia atrs a travs de los registros. Utilizando tambin las teclas direccionales o las teclas Inicio/Fin.

Option Strict On Imports System.Data.SqlClient Public Class frmMain Inherits System.Windows.Forms.Form ' Inicializar la Conneccin con la Base de Datos ' y displayar el error de la conexin Protected Const CONNECTION_ERROR_MSG As String = _ "To run this sample, you must have SQL " & _ "or MSDE with the Northwind database installed. For " & _ "instructions on installing MSDE, view the ReadMe file." Protected Const MSDE_CONNECTION_STRING As String = _ "Server=(local)\NetSDK;" & _ "DataBase=northwind;" & _ "Integrated Security=SSPI" Protected Const SQL_CONNECTION_STRING As String = _ "Server=localhost;" & _ "DataBase=northwind;" & _ "Integrated Security=SSPI" Protected DidPreviouslyConnect As Boolean = False Private dsEmployeeOrders As DataSet Private dtEmployee As DataTable
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Private dtOrders As DataTable Private dtOrderDetails As DataTable Private dtSales As DataTable Private dvOrders As DataView Private dvOrderDetails As DataView Private dvSales As DataView Private sda As SqlDataAdapter Protected strConn As String = MSDE_CONNECTION_STRING ' Maneja el evento click de los botones Private Sub btnFirst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFirst.Click ' Mueve al primer registro FirstRecord() End Sub Private Sub btnLast_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLast.Click ' Mueve al ultimo Registro LastRecord() End Sub Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNext.Click ' Mueve al siguiente Registro NextRecord() End Sub Private Sub btnPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrevious.Click ' Mueve al registro anterior PreviousRecord() End Sub Protected Sub dtEmployee_PositionChanged(ByVal sender As Object, ByVal e As System.EventArgs) BindOrdersGrid() BindOrderDetailsGrid() ShowTotalSales() ShowCurrentRecordNumber() End Sub Private Sub frmMain_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown If e.KeyCode = Keys.Right Then NextRecord() If e.KeyCode = Keys.Left Then PreviousRecord() If e.KeyCode = Keys.Home Then FirstRecord() If e.KeyCode = Keys.End Then LastRecord() End Sub ' En el evento Load Private Sub frmMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load CreateDataSet() InitializeBindings()
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

BindOrdersGrid() BindOrderDetailsGrid() ShowCurrentRecordNumber() End Sub Private Sub grdOrders_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles grdOrders.Click ' Enlaza la tabla order detalle del grid en base a la seleccion en el grid grdOrders. BindOrderDetailsGrid() End Sub Private Sub grdOrders_CurrentCellChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles grdOrders.CurrentCellChanged ' Highlight the entire row for user feedback. grdOrders.Select(grdOrders.CurrentCell.RowNumber) ' Bind the Order Details grid based on the selection in grdOrders. BindOrderDetailsGrid() End Sub ' Bind and format the Order Details grid based on the user's current selection ' in the Orders grid. Sub BindOrderDetailsGrid() Dim strCurrentOrderID As String = _ dvOrders(grdOrders.CurrentRowIndex)("OrderID").ToString ' Filter the OrderDetails data based on the currently selected OrderID. dvOrderDetails.RowFilter = "OrderID = " & strCurrentOrderID With grdOrderDetails .CaptionText = "Order# " & strCurrentOrderID .DataSource = dvOrderDetails End With ' You must clear out the TableStyles collection before grdOrderDetails.TableStyles.Clear() Dim grdTableStyle1 As New DataGridTableStyle() With grdTableStyle1 .MappingName = dvOrderDetails.Table.TableName End With Dim grdColStyle1 As New DataGridTextBoxColumn() With grdColStyle1 .MappingName = "ProductName" .HeaderText = "Product" .Width = 175 End With Dim grdColStyle2 As New DataGridTextBoxColumn() With grdColStyle2 .MappingName = "UnitPrice" .HeaderText = "Price" ' Format the data as currency. .Format = "c" .Width = 75 End With

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Dim grdColStyle3 As New DataGridTextBoxColumn() With grdColStyle3 .MappingName = "Quantity" .HeaderText = "Quantity" .Width = 75 End With Dim grdColStyle4 As New DataGridTextBoxColumn() With grdColStyle4 .MappingName = "SubTotal" .HeaderText = "Sub Total" ' Format the data as currency. .Format = "c" .Width = 75 End With Dim grdColStyle5 As New DataGridTextBoxColumn() With grdColStyle5 .MappingName = "Discount" .HeaderText = "Discount" ' Format the data to display as an integer percentage. If the 0 was ' left off the default precision of two decimal places would be used. .Format = "P0" .Width = 50 End With Dim grdColStyle6 As New DataGridTextBoxColumn() With grdColStyle6 .MappingName = "CategoryName" .HeaderText = "Category" .Width = 125 End With ' Add the column style objects to the table style's collection of ' column styles. Without this the styles do not take effect. grdTableStyle1.GridColumnStyles.AddRange _ (New DataGridColumnStyle() {grdColStyle1, grdColStyle2, _ grdColStyle3, grdColStyle4, grdColStyle5, grdColStyle6}) grdOrderDetails.TableStyles.Add(grdTableStyle1) End Sub ' Bind and format the Orders grid based on the user's current Employee selection. Sub BindOrdersGrid() ' Filter the Orders data based on the value of the Tag property bound ' earlier. The tag contains the EmployeeID. dvOrders.RowFilter = "EmployeeID = " & txtLastName.Tag.ToString With grdOrders .CaptionText = "Orders" .DataSource = dvOrders End With ' You must clear out the TableStyles collection before grdOrders.TableStyles.Clear() Dim grdTableStyle1 As New DataGridTableStyle()
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

With grdTableStyle1 .MappingName = dvOrders.Table.TableName End With Dim grdColStyle1 As New DataGridTextBoxColumn() With grdColStyle1 .MappingName = "OrderID" .HeaderText = "Order ID" .Width = 50 End With Dim grdColStyle2 As New DataGridTextBoxColumn() With grdColStyle2 .MappingName = "CompanyName" .HeaderText = "Customer" .Width = 140 End With Dim grdColStyle3 As New DataGridTextBoxColumn() With grdColStyle3 .MappingName = "OrderDate" ' Format the data as a date. This removes the time from the DateTime Sql ' data type. .Format = "d" .HeaderText = "Order Date" .Width = 75 End With Dim grdColStyle4 As New DataGridTextBoxColumn() With grdColStyle4 .MappingName = "Total" .HeaderText = "Total" ' Format the data as currency. .Format = "c" .Width = 75 End With grdTableStyle1.GridColumnStyles.AddRange _ (New DataGridColumnStyle() {grdColStyle1, grdColStyle2, _ grdColStyle3, grdColStyle4}) grdOrders.TableStyles.Add(grdTableStyle1) End Sub Sub CreateDataSet() Dim frmStatusMessage As New frmStatus() If Not DidPreviouslyConnect Then frmStatusMessage.Show("Connecting to MSDE") End If Dim IsConnecting As Boolean = True While IsConnecting Try Dim scnnNW As New SqlConnection(strConn) Dim strSQL As String = _ "SELECT EmployeeID, LastName, FirstName, HireDate " & _ "FROM Employees" ' A SqlCommand object is used to execute the SQL commands. Dim scmd As New SqlCommand(strSQL, scnnNW)

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

' A SqlDataAdapter uses the SqlCommand object to fill a DataSet. sda = New SqlDataAdapter(scmd) ' A SqlCommandBuilder automatically generates the SQL commands needed ' to update the database later (in the btnSave_Click event handler). Dim scb As New SqlCommandBuilder(sda) scb.GetUpdateCommand() ' Create a new DataSet and fill its first DataTable. dsEmployeeOrders = New DataSet() sda.Fill(dsEmployeeOrders, "Employee") ' Reset the CommandText to get the Employee orders. scmd.CommandText = _ "SELECT od.OrderID, SUM(CONVERT(money, (od.UnitPrice * " & _ " od.Quantity) * (1 - od.Discount) / 100) * 100) " & _ " AS Total, o.EmployeeID, o.OrderDate, " & _ " c.CompanyName" & vbCrLf & _ "FROM [Order Details] od " & _ " INNER JOIN Orders o " & _ " ON od.OrderID = o.OrderID" & vbCrLf & _ " INNER JOIN Customers c " & _ " ON o.CustomerID = c.CustomerID" & vbCrLf & _ "GROUP BY od.OrderID, o.EmployeeID, o.OrderDate, c.CompanyName" ' Fill the second table in the DataSet. sda.Fill(dsEmployeeOrders, "Orders") ' Reset the CommandText to get the Employee Sales-To-Date. scmd.CommandText = _ "SELECT e.employeeid, sum(UnitPrice * Quantity) as " & _ " 'SalesToDate' " & _ "FROM [order details] od " & _ " INNER JOIN orders o " & _ " ON o.orderid = od.orderid " & _ " INNER JOIN employees e " & _ " ON e.employeeid = o.employeeid" & vbCrLf & _ "GROUP BY e.employeeid" ' Fill the third table in the DataSet. sda.Fill(dsEmployeeOrders, "Sales") ' Reset the CommandText to get the Order details. scmd.CommandText = _ "SELECT od.OrderID, od.UnitPrice, od.Quantity, od.Discount, " & _ " p.ProductName, c.CategoryName, " & _ " (od.UnitPrice * od.Quantity) As SubTotal " & _ "FROM [order details] od " & _ " INNER JOIN Products p ON od.ProductID = p.ProductID " & _ " INNER JOIN Categories c ON c.CategoryID = p.CategoryID " & _ "ORDER BY od.OrderID" ' Fill the fourth table in the DataSet. sda.Fill(dsEmployeeOrders, "OrderDetails") ' Set variables for the DataTables for use later. dtEmployee = dsEmployeeOrders.Tables(0)
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

dtOrders = dsEmployeeOrders.Tables(1) dtSales = dsEmployeeOrders.Tables(2) dtOrderDetails = dsEmployeeOrders.Tables(3) ' Set up DataViews for the DataGrids and SalesToDate ' TextBox. dvOrders = dtOrders.DefaultView dvOrderDetails = dtOrderDetails.DefaultView dvSales = dtSales.DefaultView IsConnecting = False DidPreviouslyConnect = True frmStatusMessage.Close() Catch expSql As SqlException If strConn = MSDE_CONNECTION_STRING Then ' Couldn't connect to SQL Server. Now try MSDE. strConn = SQL_CONNECTION_STRING frmStatusMessage.Show("Connecting to SQL Server") Else ' Unable to connect to SQL Server or MSDE frmStatusMessage.Close() MsgBox(CONNECTION_ERROR_MSG, MsgBoxStyle.Critical, Me.Text) End End If Catch exp As Exception MsgBox(exp.Message, MsgBoxStyle.Critical, Me.Text) Exit Sub End Try frmStatusMessage.Close() End While End Sub ' Handle the Format event for the Hire Date TextBox Protected Sub DateToString(ByVal sender As Object, ByVal e As ConvertEventArgs) e.Value = CType(e.Value, DateTime).ToShortDateString End Sub ' Move the BindingContext Position to the first record. Public Sub FirstRecord() Me.BindingContext(dtEmployee).Position = 0 End Sub ' Set up all the bindings for various controls. Private Sub InitializeBindings() txtLastName.DataBindings.Add("Text", dtEmployee, "LastName") txtLastName.DataBindings.Add("Tag", dtEmployee, "EmployeeID") txtFirstName.DataBindings.Add("Text", dtEmployee, "FirstName") Dim dbnHireDate As New Binding("Text", dtEmployee, "HireDate") txtHireDate.DataBindings.Add(dbnHireDate) ' If you are using custom format/parse handlers, add them next. AddHandler dbnHireDate.Format, AddressOf DateToString AddHandler dbnHireDate.Parse, AddressOf StringToDate Dim dbnSalesToDate As New Binding("Text", dtSales, "SalesToDate") txtSalesToDate.DataBindings.Add(dbnSalesToDate)
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

AddHandler dbnSalesToDate.Format, AddressOf MoneyToString AddHandler dbnSalesToDate.Parse, AddressOf StringToMoney AddHandler Me.BindingContext(dtEmployee).PositionChanged, _ AddressOf dtEmployee_PositionChanged End Sub ' Move the BindingContext Position to the last record. Public Sub LastRecord() ' The position of the binding context controls the "current record". ' Use dsEmployeeOrders("EmployeeInfo").Rows.Count to figure out the total ' number of records. -1 because position is zero based. Me.BindingContext(dtEmployee).Position = dtEmployee.Rows.Count - 1 End Sub ' Handle the Format event for the SalesToDate TextBox. Protected Sub MoneyToString(ByVal sender As Object, ByVal e As ConvertEventArgs) e.Value = CType(e.Value, Decimal).ToString("c") End Sub ' Move the BindingContext Position to the next record. Public Sub NextRecord() ' The position of the binding context controls the "current record" Me.BindingContext(dtEmployee).Position += 1 End Sub ' Move the BindingContext Position to the previous record. Public Sub PreviousRecord() ' The position of the binding context controls the "current record" Me.BindingContext(dtEmployee).Position -= 1 End Sub ' Display the current record number and total records. Protected Sub ShowCurrentRecordNumber() lblRecordNumber.Text = "Record " & _ Me.BindingContext(dtEmployee).Position + 1 & " of " & _ dtEmployee.Rows.Count End Sub ' Update the value of the Sales To Date for each employee as the user ' steps through the records. Protected Sub ShowTotalSales() ' Filter the sales total based on the value of the Tag property bound ' earlier. dvSales.RowFilter = "EmployeeID = " & txtLastName.Tag.ToString End Sub ' Handle the Parse event for the Hire Date TextBox. Protected Sub StringToDate(ByVal sender As Object, ByVal e As ConvertEventArgs) Try e.Value = CDate(e.Value) Catch exp As Exception MsgBox(exp.Message, MsgBoxStyle.Critical, Me.Text) End Try End Sub ' Handle the Parse event for the Sales To Date TextBox. Protected Sub StringToMoney(ByVal sender As Object, ByVal e As ConvertEventArgs)
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Try ' Double is equivalent to a Money SQL data type. e.Value = CType(e.Value, Double) Catch exp As Exception MsgBox(exp.Message, MsgBoxStyle.Critical, Me.Text) End Try End Sub End Class 7). Manejo de coleccines de objetos y herencia Objetivo: En este ejercicio permite crear colecciones de objetos y tener nociones de un trabajo con herencia de objetos. Crear un proyecto windows .net denominado collecion y agregar un formulario denominado frmcolecciones luego disee el formulario: a)

b.

c)

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Agregar 3 clases al proyecto. Cliente Vendedor Proveedor

Implementar el cdigo en la clase cliente: Public Class Cliente Private pcodigo As String Private pnombre As String Private pcorreo As String Private ptelefono As String Public Property codigo() As String Get Return pcodigo End Get Set(ByVal Value As String) pcodigo = Value End Set End Property Public Property nombre() As String Get Return pnombre End Get Set(ByVal Value As String) pnombre = Value End Set End Property Public Property correo() As String Get Return pcorreo End Get Set(ByVal Value As String) pcorreo = Value
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

End Set End Property Public Property telefono() Get Return ptelefono End Get Set(ByVal Value) ptelefono = Value End Set End Property End Class Implementar el cdigo en la clase proveedor Public Class Proveedor Private pcodigo As String Private pnombre As String Private pRuc As String Public Property codigo() As String Get Return pcodigo End Get Set(ByVal Value As String) pcodigo = Value End Set End Property Public Property nombre() As String Get Return pnombre End Get Set(ByVal Value As String) pnombre = Value End Set End Property Public Property Ruc() As String Get Return pRuc End Get Set(ByVal Value As String) pRuc = Value End Set End Property End Class Implementar el cdigo en la clase vendedor Public Class Vendedor Inherits Cliente Private pservice As String Public Property service() As String Get Return pservice End Get Set(ByVal Value As String) pservice = Value
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

End Set End Property End Class Implementar en los metodo: Imports coleccionesH Public Class frmColecciones Inherits System.Windows.Forms.Form Public lstcoleccion As New Collection() Private Sub cmdAgregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAgregar.Click tblControl.SelectedIndex = 0 End Sub Private Sub cmdAgregarCliente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAgregarCliente.Click Dim obj As New Cliente() obj.codigo = txtCodigo.Text obj.nombre = txtNombre.Text obj.telefono = txtTelefono.Text obj.correo = txtCorreo.Text lstcoleccion.Add(obj) End Sub Public Sub mostrar() Dim n As Integer Dim i As Integer Dim obj As New Object() Dim cli As New Cliente() Dim pro As New Proveedor() Dim vend As New Vendedor() lstListado.Items.Clear() n = lstcoleccion.Count For i = 1 To n obj = lstcoleccion.Item(i) If obj.GetType Is cli.GetType Then lstListado.Items.Add(CType(obj, Cliente).codigo + "- Cliente") End If If obj.GetType Is pro.GetType Then lstListado.Items.Add(CType(obj, Proveedor).codigo + "- Proveedor") End If If obj.GetType Is vend.GetType Then lstListado.Items.Add(CType(obj, Vendedor).codigo + "- Vendedor") End If Next End Sub Private Sub cmdagregarvend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdagregarvend.Click Dim obj As New Vendedor() obj.codigo = txtcodigovend.Text obj.nombre = txtnombrevend.Text obj.correo = txtcorreovend.Text
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

obj.service = txtservicevend.Text lstcoleccion.Add(obj) mostrar() End Sub Private Sub cmdAgregarProveedor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAgregarProveedor.Click Dim obj As New Proveedor() obj.codigo = txtcodigoprov.Text obj.nombre = txtnombreprov.Text obj.Ruc = txtRucProc.Text lstcoleccion.Add(obj) mostrar() End Sub Private Sub cmdAddProveedor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAddProveedor.Click tblControl.SelectedIndex = 2 End Sub Private Sub cmdagregarProv_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdagregarProv.Click tblControl.SelectedIndex = 1 End Sub Private Sub cmdSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSalir.Click Me.Close() End Sub End Class 8) ARQUITECTURA EN CAPAS . NET

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

LIBNETBusinessEntity (Proyecto Biblioteca de Clases) Public Class CPedidoBE Private iIdLibro As Integer Private iCantidad As Integer Public Property IdLibro() As Integer Get Return iIdLibro End Get Set(ByVal Value As Integer) iIdLibro = Value End Set End Property Public Property IDCantidad() As Integer Get Return iCantidad End Get Set(ByVal Value As Integer) iCantidad = Value End Set End Property End Class LIBNETBusinessLogic (Proyecto Biblioteca de Clases) Imports LIBNETBusinessEntity Imports LIBNETData Public Class CPedidoBT Public Function RegistrarPedido(ByVal oCPedido As CPedidoBE) Dim oCPedidoD As New CPedidoD() If (oCPedidoD.RegistrarPedido(oCPedido)) Then Dim oCLibroD As New CLibroD() oCLibroD.ActualizarStock(oCPedido) Return True Else Return False End If End Function Public Function listarB(ByVal oCPedido As CPedidoBE) As DataSet Dim oCPedidoD As New CPedidoD() Dim ds As New DataSet() ds = oCPedidoD.listarD(oCPedido) Return ds End Function Public Function listarLibrosB(ByVal oCPedido As CPedidoBE) As DataSet Dim oCLibroD As New CLibroD() Dim ds As New DataSet() ds = oCLibroD.listarLibrosD(oCPedido) Return ds End Function End Class
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

LIBNETData(Proyecto Biblioteca de Clases)

Clase Libro Imports LIBNETBusinessEntity Imports System.Data.SqlClient Public Class CLibroD Private sCadenaConexion As New SqlConnection("server=Aguero;database=bdventas;uid=sa;pwd=password") Dim SQLHelp As New SQLHelper() Public Function ActualizarStock(ByVal oCPedido As CPedidoBE) As Boolean Dim iIdLibro As Integer = oCPedido.IdLibro Dim iCantidad As Integer = oCPedido.IDCantidad Try SQLHelp.Ejecutar(sCadenaConexion, "usp_ActualizarStockLibro", iIdLibro, iCantidad) Return True Catch Return False End Try End Function Public Function listarLibrosD(ByVal oCPedido As CPedidoBE) As DataSet Dim ds As New DataSet() ds = SQLHelp.TraerDataset(sCadenaConexion, "sp_listarLibros") Return ds End Function End Class Clase Pedido Imports LIBNETBusinessEntity Imports System.Data.SqlClient Public Class CPedidoD Private sCadenaConexion As New SqlConnection("server=Aguero;database=bdventas;uid=sa;pwd=password") Dim SQLHelp As New SQLHelper() Public Function RegistrarPedido(ByVal oCPedido As CPedidoBE) As Boolean Dim iIdLibro As Integer = oCPedido.IdLibro Dim iCantidad As Integer = oCPedido.IDCantidad Try SQLHelp.Ejecutar(sCadenaConexion, "usp_AgregarPedido", iIdLibro, iCantidad) Return True Catch
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Return False End Try End Function Public Function listarD(ByVal oCPedido As CPedidoBE) As DataSet Dim ds As New DataSet() ds = SQLHelp.TraerDataset(sCadenaConexion, "sp_listarPedido") Return ds End Function End Class Clase SQLHelper Imports System.Data Imports System.Xml Imports System.Data.SqlClient Imports System.Collections Public Class SQLHelper Shared mColComandos As New System.Collections.Hashtable() Protected Function Comando(ByVal Cn As SqlConnection, ByVal procedimientoAlmacenado As String) As System.Data.IDbCommand Dim mComando As System.Data.SqlClient.SqlCommand If mColComandos.Contains(procedimientoAlmacenado) Then mComando = CType(mColComandos.Item(procedimientoAlmacenado), System.Data.SqlClient.SqlCommand) Else Cn.Open() mComando = New System.Data.SqlClient.SqlCommand(procedimientoAlmacenado, Cn) Dim mContructor As New System.Data.SqlClient.SqlCommandBuilder() mComando.Connection = Cn mComando.CommandType = CommandType.StoredProcedure mContructor.DeriveParameters(mComando) Cn.Close() mColComandos.Add(procedimientoAlmacenado, mComando) End If Return mComando End Function Protected Sub CargarParametros(ByVal Comando As System.Data.IDbCommand, ByVal Args() As Object) Dim i As Integer With Comando For i = 0 To Args.GetUpperBound(0) Try CType(.Parameters(i + 1), System.Data.SqlClient.SqlParameter).Value = Args(i) Catch Qex As Exception 'Throw (Qex) MsgBox(Qex.Message) End Try Next End With End Sub
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Protected Function CrearDataAdapter(ByVal Cn As SqlConnection, ByVal ProcedimientoAlmacenado As String, ByVal ParamArray Args() As Object) _ As System.Data.IDataAdapter Dim mCom As System.Data.SqlClient.SqlCommand = Comando(Cn, ProcedimientoAlmacenado) If Not Args Is Nothing Then CargarParametros(mCom, Args) End If Return New System.Data.SqlClient.SqlDataAdapter(mCom) End Function Public Overloads Function TraerDataset(ByVal Cn As SqlConnection, ByVal ProcedimientoAlmacenado As String, ByVal ParamArray Argumentos() As System.Object) _ As System.Data.DataSet Dim mDataset As New System.Data.DataSet() CrearDataAdapter(Cn, ProcedimientoAlmacenado, Argumentos).Fill(mDataset) Return mDataset End Function Public Function TraerDataReader(ByVal Cn As SqlConnection, ByVal ProcedimientoAlmacenado As String, ByVal ParamArray Argumentos() As System.Object) _ As System.Data.IDataReader Dim mCom As System.Data.SqlClient.SqlCommand = Comando(Cn, ProcedimientoAlmacenado) Dim dr As SqlDataReader = Nothing Cn.Open() mCom.Connection = Cn mCom.CommandType = CommandType.StoredProcedure CargarParametros(mCom, Argumentos) dr = mCom.ExecuteReader() Return dr End Function Public Function Ejecutar(ByVal Cn As SqlConnection, ByVal ProcedimientoAlmacenado As String, ByVal ParamArray Argumentos() As System.Object) As Integer Dim mCom As System.Data.SqlClient.SqlCommand = Comando(Cn, ProcedimientoAlmacenado) Dim Resp As Integer Cn.Open() mCom.Connection = Cn mCom.CommandType = CommandType.StoredProcedure CargarParametros(mCom, Argumentos) Resp = mCom.ExecuteNonQuery Cn.Close() Return Resp End Function Public Function ExecuteXmlReader(ByVal myXmlQuery As String, ByVal Cn As SqlConnection) As XmlReader Dim mCom As SqlCommand = New SqlCommand(myXmlQuery, Cn) Cn.Open() Dim myXmlReader As System.Xml.XmlReader = mCom.ExecuteXmlReader() Return myXmlReader mCom.Parameters.Clear() End Function End Class

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

LIBNETWinSolucion

Imports LIBNETBusinessEntity Imports LIBNETBusinessLogic Imports System.Data.SqlClient Public Class frmPedido Inherits System.Windows.Forms.Form Private Sub btnRegistrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRegistrar.Click Dim iIdLibro As Integer = CboLibro.SelectedValue Dim iCantidad As Integer = CInt(txtCantidad.Text) Dim oCPedido As New CPedidoBE() oCPedido.IDCantidad = iCantidad oCPedido.IdLibro = iIdLibro Dim oCPedidoBT As New CPedidoBT() If (oCPedidoBT.RegistrarPedido(oCPedido)) Then lblMensaje.Text = "Se registr el Pedido" Else lblMensaje.Text = "No se registr el Pedido" End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPedidos.Click Dim oCPedido As New CPedidoBE() Dim oCPedidoBT As New CPedidoBT() Dim ds As New DataSet() ds = oCPedidoBT.listarB(oCPedido) DataGrid1.DataSource = ds.Tables(0).DefaultView End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim oCPedido As New CPedidoBE() Dim oCPedidoBT As New CPedidoBT() Dim ds As New DataSet() ds = oCPedidoBT.listarLibrosB(oCPedido) CboLibro.DataSource = ds.Tables(0).DefaultView CboLibro.DisplayMember = "Titulo" CboLibro.ValueMember = "IdLibro" End Sub End Class

Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Procedimientos Almacenados CREATE PROCEDURE usp_AgregarPedido @IdLibro int, @Cantidad int as Declare @Precio decimal (18,2) Select @Precio = Precio From Libro where IdLibro=@IdLibro Insert Into Pedido(Fecha,IdLibro,Cantidad,Total) values(GetDate(),@IdLibro,@Cantidad,@Precio *@Cantidad) CREATE PROCEDURE usp_ActualizarStockLibro @IdLibro int, @cantidad int As Update Libro set Stock = Stock - @cantidad where idLibro =@IdLibro

Create proc sp_listarLibros as select IdLibro,Titulo from libro Create proc sp_listarPedido as Select p.IdPedido,
Web Developer Microsoft.NET

Creando Aplicaciones para Windows

Microsoft Visual Basic .NET

Titulo=(select Titulo from libro where IdLibro=p.IdLibro), p.Cantidad, p.Total from pedido p Diagrama Entidad Relacin

Web Developer Microsoft.NET