Manual .Net
Transcript of Manual .Net
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 características de Visual Studio. NET
• Usar las nuevas características 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 programación con Visual Basic 6.
Metodología
El curso se desarrolla integramente en el laboratorio de computación a través de resolución de casos
prácticos. El instructor utiliza audivisuales para presentar los temas y desarrolla ejemplos prácticos.
CAPÍTULO 1: PLATAFORMA MICROSOFT.NET
Microsoft .NET se compone de un conjunto de recursos que hacen posible su implementación, estos
componentes se muestran en la siguiente ilustración:
2. Servidores Empresariales.NET
Web Developer Microsoft.NET
Creando Aplicaciones para Windows Microsoft Visual Basic .NET
Microsoft Exchange Server: Ofrece servicios de mensajería (correo electrónico) y colaboración entre
aplicaciones (workflow).
Microsoft Host Integration Server: Realiza la comunicación 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 integración entre los usuarios y las aplicaciones clientes que corran en diferentes dispositivos (PCs,
dispositivos móviles, 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 válido y puede participar en un sitio Web, aparte tiene otras ventajas como reducir el
tiempo de autenticación, guardar contenido personalizado. etc. Hotmail utiliza el servicio de Passport
para la autenticación de usuarios y guardar información de éste en el Web.
Microsoft Hailstorm: Usa los servicios de Passport para guardar información 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 creación, distribución y ejecución de servicios Web, así como de otros tipos de aplicaciones.
Se compone de cuatro partes principales que son:
1. Tiempo de F-jccución en Lenguaje Común (CLR)
Es el RunTime común 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 aplicación,
así como administrar su trabajo con el sistema.
2. Librería de Clases .NET
Son un conjunto de componentes que sirven para acceder a través 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 creación, distribución y mantenimiento de aplicaciones Web así
como de Servicios Web XML que son la razón de ser de la plataforma .NET
TIEMPO DE EJECUCIÓN EN LENGUAJE COMÚN (CLR)
Introducción al RunTime y al CLR
Un RunTime es la aplicación responsable de manejar la asignación de memoria, inicio y eliminación de
procesos mientras un programa se está ejecutando, asi como de brindar seguridad al código, y también
gestionar su relación con otros programas o componentes.
l.os RunTime lian sido usados por los lenguajes de programación como Visual Basic cuyo nombre es el
VBRLN, Visual C++ cuyo nombre es MSVCRT. pero también Visual FoxPro, JScnpt, SmaIlTalk. Per!,
Python. Java, etc. tienen su propio RunTime.
Cada aplicación Visual Basic 6 que se quería 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 Ejecución en Lenguaje
Común) y es la solución a los diferentes tipos de RunTime que manejan los diferentes lenguajes de
programación antes mencionados, que ahora serán
gestionados en ejecución por un único RunTime común.
La ventaja de tener un solo RunTime son múltiples 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 ejecución de las aplicaciones del Marco .NET. Proporciona una serie de servicios,
entre los que se incluyen los siguientes:
Administración del código (carga y ejecución).
Aislamiento de la memoria de la aplicación.
Comprobación de la seguridad de los tipos.
Web Developer Microsoft.NET
Creando Aplicaciones para Windows Microsoft Visual Basic .NET
Conversión del (Lenguaje Intermedio) a código nativo
Acceso a los metadatos (información de tipo mejorada)
Administración de memoria para los objetos administrados
Aplicación de seguridad de acceso al código
Control de excepciones, incluyendo excepciones en varios lenguajes
Interoperabilidad entre el código administrado, los objetos COM y las DLL anteriores (datos y código no
administrados)
Automatización del diseño de objetos
Suporte para servicios de desarrolladores (creación de perfiles, depuración, etc.)
Sistema de auto registro o auto descripción 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 adiós al problema de la compatibilidad de versiones de las dll.
Esta información se utiliza en tiempo de ejecución para resolver referencias, aplicar las directivas del enlace
de versiones y validar la integridad de los ensambladores cargados. El tiempo de ejecución puede determinar
y ubicar el ensamblador para cualquier objeto de ejecución, 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 código. La prueba de identidad de cada ensamblador se considera individualmente cuando .se determinan
los permisos que contiene para otorgar al código.
Espacio de Nombre
Un espacio de nombre (NameSpace) es un esquema de denominación lógica para los tipos en los que un
nombre de tipo sencillo, como OLEDB. va precedido de un nombre jerárquico separado por puntos. Dicho
esquema se encuentra totalmente bajo el control del desarrollador.
Las herramientas de diseño pueden utilizar los espacios de nombre para facilitar a los desarrolladores el
proceso de exploración y referencia a los tipos en su código. El concepto de espacio de nombre no está
relacionado con el del ensamblador. Un único ensamblador puede contener tipos cuyos nombres jerárquicos
dispongan de distintas raíces de espacio de nombre y una raíz lógica de este tipo puede abarcar varios
ensambladores.
En el Marco .NET. un espacio de nombre es una conveniencia lógica de denominación en tiempo de diseño,
mientras que un ensamblador establece el ámbito de nombre para los tipos en tiempo de ejecución.
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
declaración [mports, por ejemplo si quisiéramos acceder a datos con SQL Server y manejar archivos de texto
en una aplicación Windows realizaríamos la siguiente declaración:
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 Programación:
Visual Basic .NET
Visual C# .NET
Visual C++ .NET
Visual FoxPro .NET (No administrado por el Marco .NET)
Visual JScript .NET
Además 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/Pro¡ccts/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 páginas Web donde se
puede encontrar información 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 Eiffel Mondrian Pascal Visual Basic
Jscript.NET HastKell ML APL Visual C#
Alice C VISUAL C++ Smalltalk
Entorno Integrado de Desarrollo (IDE)
Descripción del IDE Corporativo
Visual Studio.NET tien un Entorno Integrado de Desarrollo único o compartido para crear aplicaciones
usando cualquiera de los Lenguajes de Programación, que pueden ser Visual Basic. Visual C++ o C #.
En esta nueva versión de Visual Studio, Visual FoxPro mantiene su propio IDE (similar al de la Versión 6),
además Visual InterDev ya no es parte de Visual Studio, ya que las herramientas de desarrollo para Web
están disponibles a través de los Web Forms disponibles desde el IDE común.
Al iniciar Visual Studio. NET aparece (por defecto) la Página de Inicio, tal como se muestra en la Figura 1.2
Figura 2.4: Ventana de Inicio del Visual Studio. NET
Desde esa página de inicio podemos elegir la opción “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 varían 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, Librería de Clases, Librería de Controles, Proyecto Vacío) y de Consola.
En el caso de elegir como tipo de proyecto “Visual Basic” y como plantilla “Windows Application” hay que
seleccionar la ubicación del nuevo proyecto y escribir el nombre de este, el cual creará una carpeta con el
mismo nombre en el lugar seleccionado. A continuación la figura 2.6 muestra el IDE compartido de Visual
Studio. NET en el caso de elegir una Aplicación 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)
Diseñadores
Para realizar la construcción de aplicaciones o creación de componentes o servicios disponemos de
Diseñadores que facilitan la labor de construcción de interfaces, creación de sentencias, etc.
La mayoría de diseñadores se habilitan al elegir una plantilla de Visual Studio. NET y casi todos generan
código al diseñar controles sobre el contenedor respectivo; característica totalmente distinta a la forma de
trabajo en Visual Basic 6, que ocultaba el código generado por el diseñador.
Entre los diseñadores 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 serán usados
para construir la interfase de la aplicación 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 serán usados para construir la página Web que correrá en
el servidor IIS (archivo aspx) arrastrando dichos controles hacia el formulario Web.
Component Designer: Este diseñador se muestra al elegir una de dos plantillas: “Class Library” o
“Windows Service” y también trabaja con los controles para windows creando una interfase reusable
desde otra aplicación.
Web Service Designer: Sirve para diseñar servicios Web y es mostrado al elegir una plantilla “Web
Service”, también trabaja con los controles para Windows, componentes, etc.
Existen más diseñadores, pero que lo trataremos en la categoría 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 rápido 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 aplicación. También se tratará con mayor detalle en el módulo 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 función
puede ser cubierta por el Server Explorer con solo arrartrar los campos hacia el formulario.
Query Designer: Es un Diseñador que permite crear Consultas SQL de manera sencilla arrastrando tablas
o consultas sobre éste y eligiendo los campos que se verán en la consulta de datos, también se puede
realizar filtros o especificar criterios de selección.
Además no solo se pueden construir consultas. Select sino también 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 conexión a un origen de datos, este tipo de proyecto da la posibilidad de crear y modificar
scripts de creación 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 línea de código, por sentencia o por
instrucción, además crea puntos de interrupción, permitiendo un mayor control y seguimiento del código
en caso de errores.
Todas estas herramientas mencionadas, son nuevas en Visual Stuido. NET, ha excepción del Query Builder
que es el mismo de la versión 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 más, 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
Introducción
En los módulos anteriores hemos tratado el Marco. NET y Visual Studio. NET, ahora trataremos Visual
Basic. NET, pero hay que remarcar que las características del lenguaje depende del Marco. NET y las
herramientas son compartidas por el IDE de Visual Studio. NET.
Visual Basic. NET es la versión 7 de ésta popular herramienta, ésta última versión tiene cambios radicales,
tanto en su concepción (.NET), en el lenguaje, las herramientas usadas, etc. entre las nuevas características
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 código escrito en diferentes lenguajes. NET
Creación y us o de XML para intercambio de datos entre aplicaciones.
Lenguaje Orientado a Objetos, con soporte de Herencia múltiple, y Polimorfismo a través de la
sobrecarga de propiedades, métodos y funciones con el mismo nombre.
Control de errores o excepciones en forma estructurada (Try.Catch.Finally).
Soporte de multitheread para que la aplicación puede ejecutar múltiples tareas en forma independiente.
Uso de NameSpaces para referirse a una clase que se va a usar en la aplicación. Los Assemblies
reemplazan a la Librería de Tipos, en un Assemblie puede existir uno o más NameSpaces.
Reestructuración 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, conversión explícita de tipos de datos (no
existe conversión forzosa); no existen procedimientos sino funciones, etc.
Web Developer Microsoft.NET
Creando Aplicaciones para Windows Microsoft Visual Basic .NET
Declaración de Variables
A diferencia de Visual Basic 6, en VB. NET se pueden declarar varias variables en una sola instrucción y
además se puede asignar directamente sus valores. Otra observación es que es necesario definir el tipo de
declaración y el tipo de dato (antes se hacia se asumía un tipo de declaración y un tipo de datos variant, que
ahora no existe).
Sintaxis <Tipo de Declaración> <Variables(s)> As <Tipo de Dato> [=<Valor>]
Existen varios tipos de declaración que detallamos a continuación en la siguiente tabla
Declaración Lugar de declaración Alcance o AmbitoPublic
Protected
Friend
Private
Dim
Static
Módulo o Clase
Clase
Clase
Módulo
Procedimiento
Procedimiento
Global, en todo el proyecto
En la clase declarada o en una derivada
En el Assemblie
Solo en el módulo
Solo en el Procedimiento
Solo en el Procedimiento
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 valdrán en este bloque.
Opciones de Trabajo con Variables
Por defecto en VB NET es necesario declarar las variables usadas (Option Explict) y también es necesario
que se asigne el misto tipo de dato a la variable (Option Strict), si deseamos Declaración implícita (por
defecto Objet) y Conversión Forzosa de tipos (ForeCast), aunque no es lo recomendable por performance,
podemos conseguirlo de dos formas: mediante “Propiedades” del proyecto, opción “Build” y elegir “Off” en
las listas de “Option Explicit” y “Option Strict” o mediante declaración al inicio de todo el código:
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 dimensión tiene un límite inferior que siempre
es 0 y un límite superior que es equivalente al tamaño de la dimensión del array menos 1. Esta característica
es distinta que en la versión anterior, en donde el límite inferior del array podían empezar en cualquier
número.
La clase base. NET de donde se heredan los array es “Array” y pertenece al siguiente
NameSpace:System.Array.
Web Developer Microsoft.NET
Creando Aplicaciones para Windows Microsoft Visual Basic .NET
Declaración de Arrays
A diferencia de Visual Basic 6, en VB. NET se puede declarar arrays definiendo el número de dimensiones
pero sin indicar el tamaño. Cabe resaltar que solo se puede declarar e inicializar una array que no tiene
tamaño definido.
Otra diferencia es que no existe la sentencia Option Base que haga que el límite inferior del array empiece en
0 o en 1, éste siempre empezará en 0 e irá hasta n-1.
Sintaxis
<Tipo de Declaración><Array([Tamaño])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 dimensión de un array, éste puede modificarse usando la sentencia ReDim, siempre y
cuando el array haya sido declarado como dinámico (con Dim).
Sintaxis
ReDim [Preserve] <Array> ([Tamaño]) 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 código o conjunto de instrucciones que es definido en la aplicación y que
puede ser usado varias veces mediante una llamada.
Dos características nuevas de los procedimientos, incorporadas en esta versión son:
Subrutinas: Ejecutan una sección sin retornar un valor
Funciones: Ejecutan una acción retornando un valor
De Eventos: Se desencadenan con la interacción del usuario o ante algún 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
Declaración de procedimientos
Subrutina
[Public Private Friend] Sub<Nombre> ([Optional) [ByVal ByRef]<Par>As <Tipo>
<Sentencia>
[Exit Sub]
End Sub
Función:
[Public Private Friend] Funcion<Nombre> <Parámetros>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 versión 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 básica para que el Sistema Operativo pueda ejecutar un proceso. Una aplicación
(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 simultánea, 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 aplicación 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 comunicación 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 aplicación disminuirá.
Web Developer Microsoft.NET
Creando Aplicaciones para Windows Microsoft Visual Basic .NET
Implementación de Threads
Para implementar Threads se usa el NameSpace: “System.Threading.Thread” y luego se hace uso de los
métodos que se definen a continuación:
Star: inicia un Thread, el cual es un proceso de llamada asíncrona. 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: También ocasiona una pausa en el bloque de instrucciones
Resume: Reinicia una pausa originada con el método 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.
Acción Estado de TransiciónOtro Thread a Thread Start UnchangedEl Thread inicia su ejecución RunningEl thread llama a Thread.Sleep WaitSleepJoinEl Thread llama a Monitor. Espera en otro objeto WaitSleepJoinEl Thread llama Thread. Join en otro Thread WaitSleepJoinOtro Thread lalma a Thread.Suspend SuspendRequestedEl Thread responde a un requerimiento de Thread. Suspend SuspendedOtro Thread llama a Thread.Resume RunningOtro Thread llama a Thread.Interrumpt RunningOtro Thread llama a Thread.Abort AbortRequestedEl Thread responde a Thread.Abord Aborted
Control de Excepciones
Durante el desarrollo y ejecución de toda aplicación 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 código en la aplicación; como por ejemplo una instrucción mal
escrita, omisión de un parámetro obligatorio en una función, 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.
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 inválidas.
Errores Lógicos: Ocurren una vez usada la aplicación y consiste en resultados inesperados o no
deseados: por ejemplo una función 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 expresión.
También podemos disminuir errores o excepciones de tipos de datos no deseados usando la sentencia
Option Strict que evita la conversión forzosa y verifica que el tipo de dato asignado sea del mismo tipo
que la variable o función, o que un parámetro pasado sea del mismo tipo, etc.
Errores en Tiempo de Ejecución: Este tipo de errores suceden en plena ejecución de la aplicación,
después de haber sido compilado el código. No son errores de mala escritura no de lógica, sino mas bien
de algunas excepción del sistema, como por ejemplo tratar de leer un archivo que no existe o que está
abierto, realizar una división entre cero, etc.
Para controlar los errores en tiempo de ejecución disponemos de los Manipuladores o Controladores de
Error, que evitan la caída del programa y permiten que siga funcionando. A continuación 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
también es necesario configurar las opciones de control de excepciones para lo cual del menú “Debug” se
elige “Windows” y luego “Exceptions” o también se puede elegir directamente el botón “Exceptions” de la
Barra de Depuración.
Aparecerá la ventana de control de excepciones que se muestra a continuación
Existen 2 monitores en que se pueden controlar las excepciones que son:
When the exception os threown: Es cuando la excepción ocurre y se aconseja configurarlos en
“Continue”
If the exception is not handled: Ocurre cuando la excepción 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 línea donde ocurrió el error en tiempo de
ejecución.
Continue: Continua la ejecución del programa. Si no existe controlador Finaliza la ejecución del
programa.
Use parent setting: Indica que se va a usar la configuración de la opción de nivel superior o padre.
Laboratorio 1
El presente laboratorio tiene como objetivo conocer el Entorno de Visual Studio.NET y usar algunas
características nuevas del Lenguaje Visual Basic.NET, así como implementar MultiThreads y Controlar
Excepciones.
Este primer laboratorio está dividido en 2 ejercicios que tienen una duración aproximada de 35 minutos.
Ejercicio 1: Reconocimiento VB.NET y Trabajando con el Lenguaje
Duración 20 minutos
Empleo de Textbox
Establecer las siguientes propiedades:
Control Propiedad ValorTextbox1 Name
MaxlengthText
txtCodigo4
Textbox2 NameMaxlengthText
txtNombreUpper
Textbox3 NameText
txtCurso
Textbox4 NameText
txtParcial
Textbox5 NameText
txtFinal
Label7 NameAutosizeFontTextTextAlign
lblPromedioTrueArial, 10pt,style=Bold
MiddleCenterLabel8 Name
AutosizeFontTextTextAlign
lblObsTrueArial, 12 pt,style=Bold
MiddleCenterButton1 Name
TextbtnNuevo&Nuevo
Web Developer Microsoft.NET
Creando Aplicaciones para Windows Microsoft Visual Basic .NET
Button2 NameText
btnSalir&Salir
Form1 NameCancelButtonTextFormBorderStyleIconStarPosition
frmDemo01btnSalirEmpleo TextBoxSizableSun.icoCneterScreen
Figura 3.15: Diseño 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 (extensión exe)
y otro archivo intermedio (extensión pdb), (¿Cuál de estos es conocido como Asseblie).
Ejercicio 2: Implemento Multi Thread y Control de Excepciones
Duración: 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 “Aplicación Windows”,
seleccionar como ubicación de carpeta “C:\\vbnet\Labs” y como nombre ingresar “Lab01_2”.
• Se va a crear una aplicación en la que se implemente múltiples threads para iniciar la lectura de un
archivo de texto extenso y poder cancelar este proceso si es necesario, además para evitar los errores en
tiempo de ejecución haremos uso del control estructurado de excepciones visto en este módulo.
• 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 diseño del formulario similar al presentado aquí abajo:
Figura 3.17: Diseño 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 ejecución.
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 + Línea + 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 = False
btnCancelar.Enabled = False
End Sub
• Escribir código 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
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 aplicación
CAPITULO 4: CREANDO APLICACIONES PARA WINDOWS
Usando Windows Forms
Introducción
Windows es una clase base del Marco.NET usada para crear aplicaciones que correrán sobre Windows, esta
se encuentra disponible al elegir en Visual Basic la plantilla “Windows Application”.
Al elegir una aplicación para Windows automáticamente 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 Código 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 también 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 aplicación 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 métodos y eventos,
tal como se muestra en los siguientes cuadros.
Propiedades
Propiedades DescripciónAutocroll Es una nueva propiedad que permite desplazarse por el formulario a
través de una barra si es que los controles sobrepasan el área cliente.Backcolor Especificar el color de fondo del formularioBackgrondImage Antes llamada Picture: Permite mostrar una imagen de fondo sobre el
formulario, tiene 2 tamaños: cascada y centrado en pantallaBorderStyle Controla la apariencia del borde del formulario y los controles que se
presentan en la barra de titulo. Tiene 6 opcionesControBox Si esta en True muestra el menú de controles de la barra de título, si
esta en False no los muestra.Cursor Especificar el curso que aparecerá al situar el mouse sobre el
formulario. Antes era la propiedad MousePointes y si se quería un cursor personalizado se configuraba MouseIcon, ahora solo existe Cursor y sus gráficas son vistas en la lista
Font Configura la fuente de los textos de los controles ubicados en el formulario y de los textos mostrados con métodos de dibujo.
Forecolor Especifica el colore del texto de los controles (excepto el TexBox) y de los textos mostrados con métodos de dibujo.
GridSize Determina el tamaño de las rejitas que se muestran en tiempo de diseño para diseñar controles.
Icon Indica el icono del formulario, este se muestra en la barra de título de la ventana y en la barra de tareas de Windows
IsMDIContainer Determinar si es que el formulario es un MDL, antes se creaba un formulario MDI añadiendo del menú “Projet” y un formulario hijo configurando la propiedad MDIChild en True.Ahora solo se configura para ambos la propiedad IsMDIContainer.
Location Indica la posición del formulario con respecto a la esquina superior izquierda de la pantalla. Antes había que configurar la propiedad Top y Left, ahora los valores de X e Y.
Opaciti 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
RigfRToLeft Determina la alineación de los textos con respecto a sus controles, por defecto es No, es decir se alinea de izquierda a derecha, si es True se alinearán de derecha a izquierda
Size Configura el tamaño del formulario no pixelesStartPosition Indica la posición e que aparecerá por primera vez el formulario con
respecto a la pantalla. Tiene 5 opcionesText Antes se llamaba Caption y permite mostrar el texto de la barra de
título en el formularioTopMost Posiciona en primer plano la ventana, siempre y cuando no este
desactivada. Antes se podía hacer esto con la API WindowsOnTop.WindowsState Determina la forma en que se presentará la ventana, puede ser Normal,
Web Developer Microsoft.NET
Creando Aplicaciones para Windows Microsoft Visual Basic .NET
Minimizada o Maximizada.
• Métodos
Propiedades DescripciónActive Activa el formulario y le da el focoActivateControl Activa un control del formularioClose Cierra un formulario descargándolo de la memoriFocus Pone el foco sobre el formularioHide Oculta el formulario, sin descargarlo de la memoriaRefresh Repinta el formulario y sus controlesSetLocation Ubica el formulario en una cierta posición de la pantallaSetSize Configura el tamaño de la ventana en píxelesShow Muestra un formulario como ventana no modal (modeles)ShowDialog Muestra un formulario como ventana modal (modal)
• Eventos
Propiedades DescripciónActivated Ocurre al activarse el formularioClick Se desencadena al dar clic con el mouse sobre el formularioClosed Se habilita al cerrar el formulario. Es similar al evento. Unload de
Visual Basic 6.Closing Ocurre mientras se está cerrando el formulario. Es similar al evento
QueryClose de Visual Basic6. También se puede cancelar la salidaDeactivated Ocurre al desactivarse el formularioDoubleClick Se desencadena al dar doble clic con el mouse sobre el formularioGotFocus Ocurre al ingresar el foco sobre el formularioLoad Se produce al cargar los controles sobre el formularioLostFocus Ocurre al salir el foco del formularioMouseEnter Se habilita al ingresar el mouse sobre el área cliente del formularioMouseLeave Se habilita al salir del mouse del área cliente del formularioMove Este evento se habilita al mover la ventana o formularioPaint Ocurre al pintarse la ventana en pantalla.Resize Ocurre cada vez que se modifica de tamaño el formulario
Uso del ToolBox
El TooBox es la caja de herramientas donde se encuentran los controles que se van ha usar para diseñar la
interface de los diferentes tipos de aplicaciones, este varía de acuerdo al tipo de plantilla elegida.
A continuación se presenta el ToolBox cuando elegimos una plantilla”Windows 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, también se puede dar doble clic sobre el control y aparecerá por defecto en la posición 0.0 del formulario (antes se ubicaba al centro de éste).
Usando Controles para Windows FormsUtilización de Listas.
Establece las siguientes propiedades:
Control Propiedad Valor
Web Developer Microsoft.NET
Creando Aplicaciones para Windows Microsoft Visual Basic .NET
Textbox1 NameText
txtNombre
Button1 NameText
btnAgregar&Agregar
Button2 NameText
btnEliminar&Eliminar
Button3 NameText
btnLimpiar&Limpiar Todo
Button4 NameText
&btnSalirSalir
ListBox1 NameAutosizeFontText
lstAmistadesTrueArial, 10pt,style=bold
Label3 NameAutosizeBorderStyleFontTextTextAlign
lblTotalTrueFixed3DArial, 12pt,.style=Bold
MiddleCenterForm1 Name
TextFormBorderStyleStartPosition
frmDemo01Empleo ListasSizableCenterScreen
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 indexEn 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
Introducción
Web Developer Microsoft.NET
Creando Aplicaciones para Windows Microsoft Visual Basic .NET
Una interfase es el medio de comunicación entre dos entidades, en nuestro caso, la interface sirve de enlace entre el usuario y la aplicación.En la evolución de la computación se inicia con interfaces de texto o de consola, las cuales predominan desde ls inicios de la computación hasta casi la mitad de la década del ochenta, luego aparecen las interfaces gráficas.
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 aplicación, y entre las principales intefaces tenemos:
SDI (single Document Interfce) : Interface de simple documento muetra una sola ventana con un cierto documento en la aplicación; 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 aplicación 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 evolución de Internet también se distinguen diferentes tipos de interfaces en el Browser, pero que no se tocan en este capítulo, sino que nos centraremos en la creación de interfaces para aplicaciones Windows.
CREANDO APLICACIONES MDI
Una aplicación MDI consta de dos partes: Un formulario MDI padre y uno o más formularios MDI hijos, la creación de ambos es muy sencilla en VB . NET y se aplica a continuación:
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 versión 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 Ejecución) del formulario hijo apuntar al formulario padre y luego usar el método Show para mostrarlo.
El siguiente código 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=frmPadreX. 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 método LAYOUTMDI, del formulario MDI padre junto con una constante de tipo MDILAYAOUT, que tiene 4 valores:Arrangelcons, Cascade, TileHorizontal y TileVertical.Acontinuación 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 aplicación y el otro su contenido o detalle, antes estaban disponibles como controles activeX, ahora en VB.NET estaán disponibles como controles del WinForm. Ambos controles generalmente usan imágenes para mostrar los elementos, por lo cual plrimero veremos el uso del control ImageList para almacenar imágenes 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 diseñados de formularios.Conigurar la propiedad “Name” usando el prefijo ils, seguido del nombre y la propiedad “imagesize” que define el tamaño de las imágenes: 16,32,48, etc.Seleccionar la propiedad “image” que es una colección y pulsar sobre el botón, entonces aparecerá el diálogo “Image collection Editor” en el cual se añadirá ñas imágenes con el botón “Add” y se eliminará con “remove”
Ejemplo:En el siguiente ejemplo se demuestra de cómo utilizar un control MainMenu en un formulario, inicie una nueva aplicación de tipo Winforms asígnele 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 representación 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 división de Menu Edición debe de colocarse en la propiedad text un símbolo 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 Edición seleccione la opcion copiar, borra el contenido del cuadro de texto con la opcion Limpiar Todo y luego del menu Edición seleccione Pegar, finalmente del menu Archivo seleccione Cerrar.
Creando Windows Control
Existen Tres Formas o técnicas para la creación 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 numericoComo ejemplo crearemos un control que solo permita entradas numéricas esto nos hace pensar en el control Textbox que permita el ingreso de cualquier carácter. 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 información de acuerdo a la siguiente representación 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 F73. Renombre la clase empleando la descripción 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 representación
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 combinación Ctrl+shift+B y grabe su aplicación8. Del menu File, seleccione la opcion Add Project y haga clic en New Project9. Complete de acuerdo a la siguiente representacion
10. Sobre el toolbox de la aplicación cliente haga clic derecho y seleccione customize Toolbox, luego selecione .Net Framework componets como muestra la siguinte representación:
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 añada el control CuadroTextoNumerico al formulario, la representación 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 representación:
Web Developer Microsoft.NET
Creando Aplicaciones para Windows Microsoft Visual Basic .NET
14. Grabe y ejecute su aplicación
Modificar la funcionalidad al controlComo habra notado el ejcutar la aplicación encontramos que la descripción CuadroTextoNumerico1 aparece como contenido del control que acabamos de crear esto podria ocasionar confusión 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 descripción 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 StringGetReturn MyBase.TextEnd GetSet(ByVal Value As String)If IsNumeric(Value) ThenMyBase.Text = ValueEnd If
If Value = Nothing ThenMyBase.Text = ValueExit PropertyEnd If
End SetEnd Property
Al ejecutar su aplicación ya no observara la descripción que aparece por defecto en la propiedad Text del control personalizado.
Web Developer Microsoft.NET
Creando Aplicaciones para Windows Microsoft Visual Basic .NET
INTRODUCCIÓN AL ACCESO A DATOS
Entendiendo ADO.NET
ADO.NET es un modelo de programación basado en estándares que permite crear aplicaciones distribuidas que accedan a datos compartidos. Por ser una Interfase de Programación de Aplicaciones (API), está disponible desde muchas aplicaciones, herramientas de desarrollo, lenguajes de programación 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 versión de ADO ofrece ventajas significativas con respecto a las versiones anteriores que
podemos resumirlas en dos, las cuales se detallan más 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 orígenes 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 página Web de
Internet, se utilizan datos desconectados, intercambiándose a través de XML los datos.
Las ventajas de usar DataSet y enviarlos a través de XML en ADO.NET es que no requiere de ninguna
infraestructura adicional, lo que se envía es texto; en cambio, en ADO se requería del Marshalling que es
administrado por COM, por lo que había que tener la arquitectura adecuada para realizar esto (Servidor
Windows con MTS).
Las ventajas de usar DataSet y enviarlos a través de XML en ADO.NET es que no requiere de ninguna
infraestructura adicional, lo que se envía es texto; en cambio, en ADO se requiera del Mashalling que es
administrado por COM, por lo que había que tener la arquitectura adecuada para realizar esto (Servidor
Windows NT con MTS).
Otra ventaja de ADO.NET es que para operaciones de múltiples 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 características y ventajas de ADO.NET vamos a realizar un cuadro comparativo
con la versión anterior de ADO.
Características ADO ADO.NETRepresentación de Datos en memoria
Usa el objeto Recordsel el cual se comporta como si fuese una simple tabla
Usa el objeto DataSet, el cual puede contener una o más tablas representadas por DataTables
Relación entre varias tablas
Se realiza mediante una consulta con JOIN uniéndose el resultado en una simple tabla.
Tiene el objeto DataRelation que permite asociar registros entre dos DataTables.
Navegación de datos Se recupera un conjunto de registros secuencialmente
Acceder a los registros de forma no secuencial, para lo cual sigue las relaciones entre los registros de una t abla con otra relacionada.
Acceso desconectado El acceso desconectado se implementa a través del Recordset y el acceso conectado se da a través del objeto Connection
Se comunica con la BD a través de llamadas estandarizadas al objeto DataAdapter, el cual se comunica con un proveedor.
Programabilidad Usa el objeto Connection para transmitir comandos direccionandolos a un origen de datos.
Una XML para transmitir datos desde el origen da datos a una aplicación.
Compartir datos desconectados entre niveles o componentes
Usa el Marshalling de COM para transmitir un Recordset desconectado. Solo está disponible para tipos de datos definidos por el estándar COM.
Se transmite mediante DataSet grabado en un archivo XML, este soporta cualquier tipo de datos y no requiere conversión de tipos.
Transmisión de datos a través de Firewalls
Es complicada la transmisión, por cuanto los Firewalls impiden el pedido de datos a nivel de sistema, que es el caso de COM.
Es soportada, porque los objetos DataSet de ADO.NET viajan a través de XML que es basado en HTML que puede pasar libremente a través de Firewalls
Escalabilidad El bloqueo a la base de datos y el mantenimiento de conexiones activas limitan los recursos de las bases de datos
El acceso desconectado permite retener lo menos posible las conexiones abiertas 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 través 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 más rápido y sencillo para crear aplicaciones que acceden a datos.
En Visual Studio.NET tenemos varias herramientas que hacen el trabajo con datos más fácil, entre las cuales
podemos menciona:
Server Explores
DataAdapter Wizard
Menú Data
Server explorer
Esta ventana muestra básicamente 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 Conexión con el Server Explorer
En este módulo como lo que nos interesa es acceder a datos, lo primero que debemos hacer es añadir una
conexión 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 opción “Data Conecctions” del Server Explorer y elegir del menú contextual la
opción “Add Connetion”.
Se mostrará la ventana de enlace a datos, similar a la de Visual Basic 6 usada al crear una conexión con
el Data Environment.
Por defecto aparece la ficha “Connetion” con una conexión 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 conexión.
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 Estándar (SQL
Server), si se elige Estándar 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 conexión dando clic en el botón “Test COnnection” y si la respuesta es satisfactoria dar clic en
el botón “OK”.
• Finalmente, se habrá creado la conexión que se mostrará en la ventana del Server Explorer.
Accediendo a Datos con el Server Explorer
Una vez creada la conexión 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 aplicación sin tener que ir hasta la máquina 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 mostrarán todos los registros, ubicarse al final e ingresar los datos del empleado
(excepto su código que es a utogenerado).
Para cualquier otra operación solo basta dar clic derecho sobre la tabla y aparecerá:
Creando Aplicaciones de Datos con el Servidor Explorer
Para los desarrolladores, el Server Explorer también da la posibilidad de crear aplicaciones de manera simple
y rápida. Por ejemplo, si queremos realizar una aplicación que muestre la lista de empleados, realice los
siguientes pasos:
♦ Crear una aplicación 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 crearán dos objetos: Sq[Conecction] y Sq[DataAdapter] los
cuales se verán en la zona de diseño.
♦ 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 opción “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 diseñador llamado “dstEmpleado1”
♦ Finalmente, para que se muestre los datos en tiempo de ejecución hay que agregar el siguiente código 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 botón “Sq1DataAdapter” de la ficha “Data” del Too1Box.
Se mostrará el Paso 1 del Asistente de Configuración del DataAdapter
Damos clic en el botón “Next” del Paso 1 que nos muestra la utilidad del DataAdapter Wizard.
En el Paso 2 se debe especificar la Conexión que usará el DataAdapter, si es que ya ha sido creada solo
debemos elegirla de la lista, pero sino daremos clic en el botón “New Conecction” y seguiremos los
pasos vistos en el tema anterior para crear la Conexión.
Después de especificar la conexión clic en el botón “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 opción por defecto: Usar una Sentencia SQL y clic en el botón “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 botón del “Q uery Builder” que crea
consultas de manera simple, cuya apariencia se muestra en la figura.
Figura 5.12 Ventana del Query Builder
Métodos
Método DescripciónBegin Transaction Inicia una transacción que se ejecuta de acuerdo a un cierto
nivel de aislamiento, que puede ser de lectura confiable y no
Web Developer Microsoft.NET
Creando Aplicaciones para Windows Microsoft Visual Basic .NET
confiable, serializable, etc.ChangeDataBase Cambia la base de datos a la cual nos conectamosClose Cierra la conexión a la base de datosCreateCommand Crea un objeto Command asociado con la conexión abiertaOpen Abre la conexión hacia el origen de datos de acuerdo a la
cadena de conexión
Eventos
InfoMessage Ocurre cuando el origen de datos envía un mensaje a la aplicación, por ejemplo cuando ocurre un error de integridad referencial
StateChange Ocurre cada vez que se modifica el estado de la conexión, es decir, cuando cambia el valor de la propiedad State.
Crear una Conexión
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 Conexión
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 opción 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 añadir 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 opción “new” y
escribir “dstProducto”, luego “OK” e inmediatamente se añadirá un objeto “DsProducto1” al diseñador.
Para que se vean los productos en tiempo de ejecución añadir en el evento Load del formulario el siguiente
código:
DgdProducto.DataSource = DsProducto1.Tables(0).DefaultView
SqlDataAdapter1.Fill(DstProducto1)
Nota: Si se desea ver las características del Dataset generado se selecciona el objeto y del Menú “Data” se
elige “Dataset properties...”
Preview de Datos
Esta opción 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 opción se presenta una ventana, en donde primero se debe elegir el DataAdapter, en el caso de
que sea un Store Procedure con parámetros, podrá configurarse el valor de los parámetros.
Luego, en la lista Data tables se presentarán todas las tablas que hayan sido creadas por el DataSet. Elegir
una y dar clic en el botón “Execute” e inmediatamente se presentarán 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 tamaño aproximado que ocupa los
datos mostrados por el Data Table.
Si se desea ejecutar una nueva vista de datos, se da clic sobre el botón “Clear Results”, se elige un nuevo
Data Table y clic en “Fill Dataset”.
Para salir de esta herramienta dar clic en el botón “Close” o sobre el botón de cerrar de la ventana.
Objetos de ADO.NET
Después 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
existía 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, dividiéndose en dos
grupos: Proveedores de datos.NET y Dataset, los cuales se examinan a continuación:
Objetos Connection y Comand
Objeto Connection
Se usa para establecer una conexión 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 versión anterior de ADO, para lo cual analizamos sus elementos.
Web Developer Microsoft.NET
Creando Aplicaciones para Windows Microsoft Visual Basic .NET
Propiedades
Propiedad DescripciónConnectionString Configura o devuelve la cadena de conexión que consta del
proveedore, usuario, passaword, servidir y base de datos.Connection TimeOut Devuelve los segundos que puede esperar como máximo
mientras trata de conectarse a la base de datos. Si se pasa
del tiempo de espera se genera un error de conexiónDataBase Obtiene el nombre del servidor al cual se ha conectadoPacketSise Muestra el tamaño de los paquetes en bytes usados para
comunicarse con el servidor de datos a través de la red.Provider Devuelve el nombre del Proveedor OLEDBServerrVersión Regresa la versión del servidor de d a tos que se está usandoState Devuelve el esta actual de la conexión, que puede ser
abierta, en ejecución, pausada o cerradaWorkStationId Obtiene el nombre del cliente que está conectado al
servidor.
Métodos
Método DescripciónBegin Transaction Inicia una transacción que se ejecuta de acuerdo a un cierto
nivel de aislamiento, que puede ser de lectura confiable y no
confiableChangeDataBase Cambia la base de datos a la cual nos conectamosClose Cierra la conexión a la base de datosCreateCommand Crea un objeto Command asociado con la conexión abiertaOpen Abre la conexión hacia el origen del datos de acuerdo a la
cadena de conexión.
Eventos
Evento DescripciónInfoMessage Ocurre cuando el origen de datos envía un mensaje a la
aplicación, por ejemplo cuando ocurre un error de
integridad referencialStateChange Ocurre cada vez que se modifica el estado de la conexión,
es decir, cuando cambia el valor de la propiedad State.
Crear una Conexión
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=Ldueñas; Initial
Catalog=Northwind”)
Cn.open
Usando Oledb:
Imports System.DataSq1Oledb
Dim en As OledbConnection=New OledbConnection (“Provider=SQLOLEDB:User
Id=sa;Password=;_DataSource=Ldueñas; Initial Catalog=Northwind”)
Cn.open
Cerrar una Conexión
Cn.Close
Objeto Command
Se usa para ejecutar instrucciones sobre el origen de datos, tales como ejecutar una consulta (Select),
inserción (Insert), actualización (Update) o eliminación (Delete) así como ejecutar un procedimiento
almacenado del servidor de datos.
Este objeto también ha tenido muchos cambios con respecto a la versión anterior de ADO, para lo cual
analizamos sus elementos.
Propiedades
Propiedad DescripciónCommand Text Configura o devuelve la sentencia SQL, el nombre de la
tabla o del procedimiento almacenado a ejecutarCommand TimeOut Devuelve los segundos que se puede esperar como máximo
mientras trata de ejecutarse el comandoCommandType Asigna o recupera el tipo de comando a ejecutar, que puede
ser una instrucción SQL, una tabla o procedimiento
almacenado.Connection Configura o devuelve la conexión que está usando el
comando.Parameters Es una colección que guarda información de los parámetros
de un procedimiento almacenado o una consulta con
parámetros.Transaction Es un objeto que permite manipular transacciones, para esto
cuenta con métodos como: Begin, Commit y RollBack
Web Developer Microsoft.NET
Creando Aplicaciones para Windows Microsoft Visual Basic .NET
Eventos
Evento DescripciónInfoMessage Ocurre cuando el origen de datos envía un mensaje a la
aplicación, por ejemplo cuando ocurre un error de
integridad referencialStateChange Ocurre cada vez que se modifica el estado de la conexión,
es decir, cuando cambia el valor de la propiedad State.
Métodos
Método DescripciónCancel Cancela la ejecución de un comandoCreateParameter Crea un objeto Parameter para trabajar con un parámetro de un
procedimiento almacenado o consulta con parámetrosExecuteNonQuery Ejecuta una instrucción SQL y devuelve el número de registros
afectados. Se usa para ejecutar Insert, Update o DeleteExecuteReader Ejecuta una consulta SQL o un procedimiento almacenado de
selección y devuelve los registros en un objeto DataReader.ExecuteScalar Ejecuta una instrucción SQL y devuelve un simple valorPrepare Crea una versión compilada o preparada del comando en el
servidor. Es muy útil para dar velocidad a la aplicación.
Eventos
Evento DescripciónFillError Ocurre cuando se produce un error al ejecutar el método Fill
del DataAdapter para llenar un conjunto de registros en el
Dataset.RowUptated Ocurre después de actualizar los registros de un Dataset
cuando se invoca al método Update del DataAdapterRowUpdating Ocurre mientras se está actualizando los registros de un
Dataset cuando se invoca al método 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 método
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=Ldueñas; 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 DescripciónDepth Devuelve el nivel de anidamiento del registro actualFieldCount Devuelve el número de columnas o campos del registro
actualIsClosed Determina si el DataReader se encuentra cerradoItem Obtiene el valor del campo especificado en el índiceRecordsAffected Devuelve el número de registros modificados, insertados o
eliminado por una instrucción SQL.
Métodos
Propiedad DescripciónClose Cierra el objeto DataReader
Web Developer Microsoft.NET
Creando Aplicaciones para Windows Microsoft Visual Basic .NET
GetDataTypeName Devuelve el nombre del origen del tipo de datoGetFieldType Devuelve el tipo de dato del objetoGetName Obtiene el nombre del campo especificado como índiceGetValue Obtiene el valor del campo especificado como índiceIsDBNull Devuelve un valor lógico indicando si el campo no tiene
datosNextResult Avanza al siguiente conjunto de registros cuando la
sentencia SQL que generó el DataReader es compuesta por varios Select.
Read 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 cómo crear un DataReader revisar el ejemplo del Objeto para crear una consulta de
datos, el cual ejecutaba una consulta con el método ExcecuteReader y la almacenaba en un objeto
DataReader.
Objeto DataSet
Definición
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 través del objeto DataSet que se implementa el trabajo con datos desconectados, debido a que este
almacena los datos en una o más tablas relacionadas, y sobre este se realizan las operaciones con los datos,
tales como navegación, filtro, búsqueda, 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 características del DataSet, detallando sus propiedades, métodos y eventos, tal
como se muestra a continuación.
Propiedades
Propiedad DescripciónDataSetName Asigna o devuelve el nombre del DataSet actualDefault ViewManager Obtiene una vista personalizada de registros para realizar
operaciones de filtro, búsqueda y navegaciónEnforceConstraints Determina si hubo una infracción de una regla o restricción
de integridad de datosExtendedProperties Obtiene la colección de información personalizada de
usuario.HasErrors Indica si existe un error en cualquiera de los registros de
cualquier tabla del DataSetTables Es una colección de tablas o conjunto de registros
Web Developer Microsoft.NET
Creando Aplicaciones para Windows Microsoft Visual Basic .NET
Métodos
Métodos DescripciónAccepChanges Envía todos los cambios hechos hasta antes de su llamadaClear Limpia el DataSet eliminando todas las tablas y sus
registrosClone Copia la estructura del DataSet en otro, incluyendo
esquemas, relaciones y restricciones de las tablasCopy Copia la estructura y los datos del DataSet en otroGetChanges Obtiene una copia del DataSet con todos los cambios
hechosHasChanges Devuelve un valor lógico indicando si se ha insertado,
eliminado o modificado registros en el DataSetMerge Combina un DataSet con otroRejectChanges Deshace todos los cambios hechos hasta antes de su llamadaReset Restaura el DataSet a su estado original
Eventos
Evento DescripciónMergeFailed Ocurre al fallar la operación de combinar el DataSet con
otro.
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 DescripciónAllowDelete Indica si está permitido eliminar registrosAlowEdit Indica si se pueden modificar registrosAllowNew Indica si se puede insertar nuevos registrosApplyDefaultSort Devuelve un valor lógico indicado si se está usando el
orden por defecto de la vistaCount Devuelve el número de registros de la vistaRowStateFilter Establece o devuelve el estado de los registros filtrados, que
pueden ser iguales, adicionados, eliminados, modificados, etc.
Sort Ordena por uno o más campos la vista.
Métodos
Método DescripciónAddNew Añade una nueva fila o registro al DataViewCopyTo Copia los registros de la vista en un arreglo, solo usado en
WebDelete Elimina un registro especificado por el índiceFind 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 DescripciónListChanged Ocurre al cambiar el conjunto de registros de la vista.
ADO.NET y XML
El eXtensible Markip Language (XML) es el lenguaje común de intercambio de datos en Internet y es un
estándar de la industria que se encuentra normado pro el 3WC (World Wide Web Consortium).
XML, es el núcleo 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 envía datos desde y
hacia el origen de datos en forma de documento XML, pero que también tiene métodos para leer y escribir el
DataSet en un archivo XML, lo cual tratamos a continuación.
Método WriteXML
Es un método 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 información 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 método WriteXML del DataSet escriba el siguiente código en algún
comando:
Import System.IO
Dim archivo As StreamWriter = New StreamWriter (“NombreArchivo.xm1”)
ObjDataset.WriteXm1 (archivo)
Archivo.Close ()
Método ReadXML
Es otro método del DataSet que permite leer un archivo XML y añadirlo como una Tabla del DataSet. Es
muy útil realizar cuando se requiere recibir la información 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 método ReadXML del DataSet escriba el siguiente código en algún
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 duración total aproximada de 60
minutos.
Ejercicio 1: Trabajando con Objetos de ADO.NET
Duración 20 minutos
CREATE PROCEDURE sp_Productos_Listar_Porproveedor@IdProveedor int
AS
Select*From Products Wherw SupplierId=@IdProveedor
Order By ProductName
• Realizar el diseño del formulario llamado “frmProducto”, añadiendoc dos etiquetas, un
ComboBox y un ListBox tal como se muestran en la figura de abajo:
Figura 5.18 Diseño 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 conexión, cm para el comando, rdS para el
cursor de Proveedores, rdP para el cursor de Productos y pm para el parámetro 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 código en el evento del formulario para abrir la conexión, ejecutar comandos
y mostrar datos de productos y proveedores, además 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 parámetro y ejecutando el procedimiento.
Private Sub cboProveedor_SelectedIndexChanged(...) Handles...
pm.Value = Cint(cboProveedor.Text)
ListaProductos ( )
End Sub
Ejercicio 2: Usando XML en ADO.NET
Duración: 20 minutos
• Elegir un nuevo proyecto “Visual Basic” y una plantilla de “Aplicación Widows”,
seleccionar en ubicación la carpeta “C:\VBNET\Labs” y como nombre escribir “Lab05_3”.
• Vamos a crear una aplicación que recupere datos de los empleados de un cierto local de
la empresa que se encuentra en la BD, luego vamos a simular recuperar la información de los
empleados de otro local en un archivo XML y ambas se actualizarán 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: Diseño del formulario frmEmpleado
Web Developer Microsoft.NET
Creando Aplicaciones para Windows Microsoft Visual Basic .NET
• Después de realizado el diseño 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 y seleccionar los campos:
“EmployeId”, “LastName”, “FirstName” y “Title”, arrastralos hacia el formulario y
automática se habrán 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 programación 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 código 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 código fuente y modificar los datos de los empleados, volver a grabar el archivo.
• Escribimos código 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
Introducción a la Programación Orientada a Objetos (POO)
Visual Basic.NET tiene todas las características de la Programación Orientada a Objetos
(POO), ya que el Marco.NET soporta los requerimientos para que todos los lenguajes que
trabajen con el usen POO. Estas características son:
1. Encapsulación
Cuando creamos un componente.NET este se encuentra encapsulado, ya que ocupa la
lógica de programación a los usuarios que lo utilizan, permitiendo manejar dicho objeto a
través de sus miembros, tales como propiedades y métodos, realizando el desarrollo de
aplicaciones mas simple, al ocultar la complejidad del código (encapsular).
Web Developer Microsoft.NET
Creando Aplicaciones para Windows Microsoft Visual Basic .NET
2. Herencia
La herencia es la característica en la cual una clase llamada “Clase base” pasa o hereda
todas sus características a otra llamada “Clase Derivada”, permitiendo la total
reusabilidad del código escrito en las aplicaciones. La herencia de clases es una nueva
característica de Visual Basic.NET y no solo es a nivel de clases creadas en este lenguaje
sino a través de cualquier lenguaje del Marco.NET
3. Polimosfismo
Otra característica 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 método herecado de la clase base. Es decir. Podemos tener un mismo método
con dos comportamientos distintos (códigos distintos) de acuerdo al tipo de objeto, que
puede ser creado de la clase base o de la derivada.
Como vemos las nuevas características de la Programación Orientación a Objetos (POO)
mezcladas con la facilidad de uso de la Programación Orientada a Componentes (POC) dan
como resultado la creación de aplicaciones poderosas y con un bajo costo de mantenimiento.
Sin duda, la reusabilidad y encapsulación ofrecida por la tecnología COM basada en
componentes se ve incrementada por la herencia de clases y el polimorfismo ofrecida por la
tecnología.NET orientada a objetos; lográndose una verdadera integración entre
aplicaciones.
Para finalizar esta introducción a los componentes.NET la otra gran ventaja con respecto a
COM es la distribución de componentes, que en este último era una pesadilla debido había
que registrar componentes y lidiar con los problemas de compatibilidad de versiones; en
cambio con NET los componentes no se registran y su distribución es automática con solo
copiar y pegar la aplicación.
Elementos de una Clase (Miembros)
Todos los componentes están formados por clases y estas a su vez se componen de elementos
o miembros. Los cuales trataremos en este capítulo.
Para ilustrar mejor tenemos el siguiente gráfico.
A diferencia de Visual Basic ó en donde las clases podian tener solo propiedades, métodos,
y constantes enumeradas, en Visual Basic NET.las clases pueden tener campos delegados,
constructores y destructores. Además pueda ser que una clase herede de otre que este dentro
del componente o en otro componente. NET.
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 MÉTODOS.
La clase define un nuevo tipo de datos que resulta se la abstracción de algún elemento de
aplicación por lo tanto, es necesario diseñar bien la aplicación antes de crear la clase, ya
que esta solo implementa el diseño de objetos previamente diseñado.
Declaración de una Clase
A diferencia de Visual Basic o, donde el tipo de clase estaba dado por la propiedad
INSTANCING. De la clase, que podría 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 características de las clases dependen de la forma de su declaración.
Sintaxis
{tipo de declaración} class -nombré clase-
{definición de miembros de clase}
End Class
Existen varias formas de declarar una clase, que detallamos a continuación en la siguiente
tabla.
Declaración Alcance o AmbitoPublic Puede usarse en cualquier otra clase
del componente o En las aplicaciones
clientes.Private No puede usarse en otras clases del
componente ni en Las aplicaciones
clientesProtected Solo puede ser usadas por las clases
derivadas de este, Pero no por las
aplicaciones clientes.Friend solo puede ser usadas por las otras
clases del componente, pero no por las
aplicaciones clientes.Protected Friend Es una combinación 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.Mustlnherit determinan que los miembros de la
clase pueden heredarse a una clase
derivada, pero no puede ser creada Por
explicaciones clientes. Notlnheritable la clase no puede heredarse pero si
instanciarse desde Aplicaciones
clientes.
Ejemplo
Si queremos crear una aplicación se planilla necesitamos diseñar un componente
que manipule información 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, definiríamos la
clase en Visual Basic, tal como sigue.
Constantes Campos y Enumeraciones.
Constantes
Una constante es un dato que permanece fijo en toda ejecución de la aplicación,
a diferencia se la variable cuyo valor va cambiándose en tiempo de ejecución.
Se utiliza para facilitar el mantenimiento del código, ya que si sefinimos un
valor en constante, si esto cambia, con solo cambiar el valor de la constante, la
aplicación 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 propósitos 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 puede ser usada
internamente por los miembros de la clase pero no por otras clases o por
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 método, 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 cálculo de los impuestos.
Private IES As Single.
Private Irenta As Single.
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 numeración.
Las numeraciones son útiles para dar claridad al programa y evitar errores de
asignación 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
enumeración.
Sintaxis
{Public}{Private}{Protected}{Friend}{Enum- Nombre Enumeración-
-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
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 propósitos internos para trabajar con
información del empleado.
Public Enum Cargos
Auxiliar
Técnico
Ingeniero
Secretaria
Vendedor
End Enum Areas
Private Enum Areas
Gerencia-100
Contabilidad-200
Producción-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 sería
como sigue.
Din Cargo As Cargos
Cargo- cargos. Vendedor
Dim Area As Areas
Area –Areas. Ventas.
Propiedades
Una propiedad es una característica del objeto que tiene información sobre un
cierto atributo de este como por ejemplo su nombre, descripción, etc.
Las propiedades son métodos 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 versión 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
Creando Aplicaciones para Windows Microsoft Visual Basic .NET
Sintaxis
{Tipo de Declaración} Property-Nombre{As Tipo Dato-}
{Read Only} Get
-Instrucciones-
Ensd Get}
{{Write Only} Set {By Val Value{ As- Tipo Dato}
-Instrucciones-
End Set}.
Existen muchas formas de declarar una propiedad, que explicamos en la sgte
tabla.
Declaración UsoDefault Indica que la propiedad es por defecto (no es
necesario escribirla) puede ser usada desde
cualquier clase o aplicaciónPrivate Solo puede ser accesada desde dentro de la claseProtected Se usa desde dentro de la clase o desde una clase
derivadaFriend Puede ser usada desde otras clases o desde una
clase derivadaProtected Puede ser usada desde otras clases componentes
pero no fuera.Protected Friend Tiene las características 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.ReadOnly Indica que el valor de la propiedad solo puede ser
recuperado pero no escrito. Solo puede tener la
cláusula Set o no Get.Overloads Permite que la propiedad de la clase base sea
sobrecargada, es decir definida varias veces en las
clases derivadas pero con diferentes parámetros
que la propiedad definida en la clase BaseOverrides Permite sobrescribir la propiedad por otra
propiedad con el mismo nombre en una clase
derivadaOverridable Permite sobrescribir la propiedad por método con
Web Developer Microsoft.NET
Creando Aplicaciones para Windows Microsoft Visual Basic .NET
el mismo nombre en una clase derivadaNotOverridable Indica que la propiedad no puede ser sobrescrita
por nadie en ninguna clase derivadaMustOverride Indica que la propiedad no puede ser implementada
en esta clase y puede ser implementada en una
clase derivadaShadows Se usa para ocultar una propiedad de tal manera
que no pueda implementarse en una clase derivada.Shared Permite que la propiedad sea compartida y pueda
llamarse sin necesidad de instanciar a la clase sino
a través de su nombre.
Ejemplo
Para muestra clase Empleado, podemos implementar las propiedades código, nombre y
básico 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
Métodos
Un método es un conjunto de instrucciones que modifica el estado de las propiedades en
términos de objetos, un método es un servicio o función del objeto, mientras que en
términos de código un método es un procedimiento o función que realiza una tarea
específica.
En Visual Basic. NET todos los miembros de una clase (propiedades, eventos, constructores,
destructores, etc.) son en realidad métodos, claro, estos últimos son métodos especiales.
Un procedimiento o función en una clase es un método, y sus características son las mismas
que cuando se encuentran en un módulo estándar, es decir, si es procedimiento de
declaración es con Sub, y si es función de declaración es con Function, tal como se muestra
en las sintaxis de abajo.
Sintaxis
[Tipo Declaración] [Sub | Funtion] <Nombre> ([Praram]) | As<Tipo Dato>
<Instrucciones>
[Exit [Sub Function]]
End Property
En cuanto al tipo de declaración, es muy similar al de las propiedades, que describimos
anteriormente en una tabla, es decir, puede declararse el método como Public. Private,
Protected, Friend, Protected Friend y Shadows.
También hay que recordar que si el método es una función siempre se deberá devolver un
valor que se puede hacer de dos formar: de manera clásica asignado un valor al nombre de la
función o de una nueva forma escribiendo sentencia return y el valor.
Web Developer Microsoft.NET
Creando Aplicaciones para Windows Microsoft Visual Basic .NET
Ejemplo
En nuestro ejemplo de Empleado, podemos implementar dos métodos públicos, uno que
permita asignar valores a las propiedades creadas: código, nombre y sueldo del empleado y
otro método 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 acción
correspondiente.
Es fácil 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 botón, el evento
“MouseMove” que ocurre al pasar el mouse por el botón. Y así hay muchos eventos
asociados al objeto botón; pero, cuando trabajamos con clases, los eventos son más
abstractos y un poco más difíciles de entender, ya que podía confundirse con los métodos.
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
métodos como “Depósito”, “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 también 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.
Declaración Sintaxis.
[Tipo Declaracion]Event <Nombre>([Parámetro(s)]
Declaración Llamada:
RaiseEvent <Nombre>([Parámetro(s)]
El tipo de declaración, 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 PRESENTACIÓN
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 TryEnd 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 SubEnd Class
2) Ejercicio de Menús
Imports System.Drawing.Drawing2DPublic Class Menu Inherits System.Windows.Forms.FormDim 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 SubEnd 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 SubEnd 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 SubErrorCtx: 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 SubEnd 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 SubEnd 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 SubEnd 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 cómo construir una aplicación con tablas maestro / detalle. Este tipo común de formulario vinculado a datos es útil para navegar a través 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 atrás a través de los registros. Utilizando también las teclas direccionales o las teclas Inicio/Fin.
Option Strict OnImports System.Data.SqlClient
Public Class frmMain Inherits System.Windows.Forms.Form ' Inicializar la Connección con la Base de Datos ' y displayar el error de la conexión 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 SubEnd Class
7). Manejo de colecciónes 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 diseñe 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 código 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 PropertyEnd Class
Implementar el código 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 código 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 PropertyEnd Class
Implementar en los metodo:
Imports coleccionesHPublic 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 SubEnd 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 LIBNETBusinessEntityImports 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 LIBNETBusinessEntityImports 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 LIBNETBusinessEntityImports System.Data.SqlClientPublic 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 FunctionEnd Class
Clase SQLHelper
Imports System.DataImports System.XmlImports System.Data.SqlClientImports 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 FunctionEnd Class
Web Developer Microsoft.NET
Creando Aplicaciones para Windows Microsoft Visual Basic .NET
• LIBNETWinSolucion
Imports LIBNETBusinessEntityImports LIBNETBusinessLogicImports System.Data.SqlClientPublic 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 intasDeclare @Precio decimal (18,2)
Select @Precio = Precio From Librowhere IdLibro=@IdLibro
Insert Into Pedido(Fecha,IdLibro,Cantidad,Total) values(GetDate(),@IdLibro,@Cantidad,@Precio *@Cantidad)
CREATE PROCEDURE usp_ActualizarStockLibro@IdLibro int,@cantidad intAsUpdate Libro set Stock = Stock - @cantidad where idLibro =@IdLibro
Create proc sp_listarLibrosasselect IdLibro,Titulo from libro
Create proc sp_listarPedidoasSelect 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 Relación
Web Developer Microsoft.NET