Libro C#

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 345

VISUAL C# APLICACIÓN Y DESARROLLO

INTRODUCCIÓN

C# (leído en inglés “C Sharp” y en español “C Almohadilla”) es el nuevo


lenguaje de propósito general diseñado por Microsoft para su plataforma
.NET. Sus principales creadores son Scott Wiltamuth y Anders Hejlsberg,
éste último también conocido por haber sido el diseñador del lenguaje
Turbo Pascal y la herramienta RAD Delphi.

Aunque es posible escribir código para la plataforma .NET en muchos


otros lenguajes, C# es el único que ha sido diseñado específicamente
para ser utilizado en ella, por lo que programarla usando C# es mucho
más sencillo e intuitivo que hacerlo con cualquiera de los otros lenguajes
ya que C# carece de elementos heredados innecesarios en .NET. Por
esta razón, se suele decir que C# es el lenguaje nativo de .NET

La sintaxis y estructuración de C# es muy parecida a la de C++ o Java,


puesto que la intención de Microsoft es facilitar la migración de códigos
escritos en estos lenguajes a C# y facilitar su aprendizaje a los
desarrolladores habituados a ellos. Sin embargo, su sencillez y el alto
nivel de productividad son comparables con los de Visual Basic.

Un lenguaje que hubiese sido ideal utilizar para estos menesteres es


Java, pero debido a problemas con la empresa creadora del mismo -
Sun-, Microsoft ha tenido que desarrollar un nuevo lenguaje que
añadiese a las ya probadas virtudes de Java las modificaciones que
Microsoft tenía pensado añadirle para mejorarlo aún más y hacerlo un
lenguaje orientado al desarrollo de componentes.

En resumen, C# es un lenguaje de programación que toma las mejores


características de lenguajes preexistentes como Visual Basic, Java o
C++ y las combina en uno solo. El hecho de ser relativamente reciente
no implica que sea inmaduro, pues Microsoft ha escrito la mayor parte
de la BCL usándolo, por lo que su compilador es el más depurado y
optimizado de los incluidos en el .NET Framework SDK

UNA BREVE RESEÑA HISTÓRICA

La historia de C parte de un lenguaje anterior, el lenguaje B, escrito por


Ken Thompson en 1970 con el objetivo de recodificar el sistema

1
VISUAL C# APLICACIÓN Y DESARROLLO

operativo UNIX, que hasta el momento se había programado en


ensamblador. La pega del ensamblador era que lo ligaba a una serie de
máquinas concretas, por lo que conseguir un lenguaje abstraído de cada
máquina conseguiría una portabilidad del sistema muchísimo mayor. A
su vez B fue inspirado en el BCPL de Martin Richard, diseñado tres años
antes.

En 1972 es Dennis Ritchie (de los Laboratorios Bell de AT&T) quien


diseña finalmente C a partir del B de Thompson, aportando un diseño de
tipos y estructuras de datos que consiguen una claridad y eficacia en el
lenguaje muy superior. Es un lenguaje que permite realizar una
programación estructurada economizando las expresiones, con
abundancia de operadores y tipos de datos (aunque los básicos sean
pocos), codificando en alto y bajo nivel simultáneamente, reemplazando
ventajosamente la programación en ensamblador y permitiendo una
utilización natural de las funciones primitivas del sistema. Además, no
está orientado a ningún área en especial y sobre todo consigue un
código objeto altamente optimizado que repercute en que los programas
son muy rápidos.

Durante muchos años no existen reglas estándar para el lenguaje, pero


en 1983 se decide formar un comité con el objetivo de crear el estándar
ANSI (Instituto Nacional Americano de Estándares). El proceso dura seis
años y a principios de los 90 el estándar es reconocido por la ISO
(Organización Internacional de Estándares) y comienza a
comercializarse con el nombre ANSI C.

/* "Hola mundo" escrito en C */

#include <stdio.h>
void main()
{
printf( "Hola mundo" );
}

Paralelamente, en 1980 surge C++ de la mano de Bjarne Stroustrup


(también de Laboratorios Bell de AT&T). Diseña este lenguaje con el
objetivo de añadir a C nuevas características: clases y funciones
virtuales (de SIMULA67), tipos genéricos y expresiones (de ADA), la
posibilidad de declarar variables en cualquier punto del programa (de
ALGOL68), y sobre todo, un auténtico motor de objetos con herencia
múltiple que permite combinar la programación imperativa de C con la
programación orientada a objetos. Estas nuevas características
mantienen siempre la esencia del lenguaje C: otorgan el control
absoluto de la aplicación al programador, consiguiendo una velocidad

2
VISUAL C# APLICACIÓN Y DESARROLLO

muy superior a la ofrecida por otros lenguajes. El siguiente hecho


fundamental en la evolución de C++ es sin duda la incorporación de la
librería STL años más tarde, obra de Alexander Stepanov y Adrew
Koening. Esta librería de clases con contenedores y algoritmos genéricos
proporciona a C++ una potencia única entre los lenguajes de alto nivel.

Debido al éxito del lenguaje, en 1990 se reúnen las organizaciones ANSI


e ISO para definir un estándar que formalice el lenguaje. El proceso
culmina en 1998 con la aprobación del ANSI C++.

/* "Hola mundo" escrito en C++ */

#include <iostream>
void main()
{
std::cout << "Hola mundo";
}

La última variante que ha surgido de C es el moderno C#. En el año


2000, Microsoft presenta su plataforma .NET junto con un nuevo
lenguaje, C# (diseñado por Anders Hejlsberg), que servirá de lenguaje
principal de la plataforma. C# es un híbrido de C++ y Java que fusiona,
principalmente, la capacidad de combinar operadores propia del primero
(no incorpora la herencia múltiple) con la plena orientación a objetos del
segundo. La orientación a objetos es tal que el propio programa está
encapsulado en una clase.Actualmente C# se encuentra entre los 10
lenguajes más utilizados. A pesar de su corta historia, ha recibido la
aprobación del estándar de dos organizaciones: en el 2001 se aprueba
el ECMA y en el 2003 el ISO.

Este Lenguaje, desarrollado por Microsoft por un equipo dirigido por


Andres Helsberj y Scott Wiltamuth, se diseño en específico para la
plataforma .Net como un lenguaje que permitiera a los programadores
migrar con facilidad hacia .Net. Tiene sus raíces en Java, C y C++;
adapta las mejores características de cada uno de estos lenguajes y
agrega características propias. C# está orientado a objetos y contiene
una poderosa biblioteca de clases (FCL por sus siglas en Ingles;
FrameWork Class Library), mejor conocida como Biblioteca de Clases de
Framework, que consta de componentes preconstruidos que permiten a
los programadores desarrollar aplicaciones con rapidez, además este
lenguaje es apropiado para desarrollar aplicaciones de escritorio

3
VISUAL C# APLICACIÓN Y DESARROLLO

(Windows Forms), así como Smart Clients, Aplicaciones Web (ASP .Net),
Aplicaciones Móviles, entre otras.

C# es un lenguaje de programación visual controlado por eventos, en el


cual se crean programas mediante el uso de un Entorno de Desarrollo
Integrado (IDE Por sus siglas en Inglés; Integrated Development
Environment). Con un IDE un programador puede crear, ejecutar,
probar y depurar programas en C#, con lo cual se reduce el tiempo
requerido para producir un programa funcional en una fracción del
tiempo que llevaría sin utilizar el IDE. La plataforma .Net permite la
interoperabilidad de los lenguajes: los componentes de software de
distintos lenguajes pueden interactuar como nunca antes se había
hecho. Los desarrolladores pueden empaquetar incluso hasta el software
antiguo para que trabaje con nuevos programas en C#. Además, las
aplicaciones en C# pueden interactuar a través de Internet mediante el
uso de estándares industriales de comunicación como XML (eXtensible
Markup Language) o el SOAP (Simple Object Access Protocol).

EL LENGUAJE VISUAL C SHARP


C SHARP es un lenguaje orientado a objetos moderno, simple y
poderoso. Fue desarrollado por Microsoft y posteriormente
estandarizado. Fue modelado principalmente en base a C++ y Java.

C SHARP es el lenguaje que Microsoft desarrollo principalmente para la


plataforma .Net. Para su creación se usaron conceptos de C, C++,
Smalltalk, Modula 2 y Java.

Desde sus primeras versiones C# continúa evolucionando agregando


funcionalidad que mejora y facilita notablemente la escritura de código,
como la seguridad de tipos, manejo automático de memoria y más.
Actualmente está disponible la versión 3.0 del lenguaje

C SHARP es un lenguaje moderno, mejora la productividad en el


desarrollo de software, incorpora características del estado del arte de
los lenguajes actuales.

C SHARP es un lenguaje simple permitiendo una sintaxis sencilla y


elegante, evitando la utilización de punteros, la gestión de memoria, la
validación de límites de arrays.

C SHARP es un lenguaje poderoso permitiendo el desarrollo de código


“seguro” y “no seguro”.

4
VISUAL C# APLICACIÓN Y DESARROLLO

C SHARP es un lenguaje de propósito general que puede ser utilizado


para la construcción de aplicaciones web, aplicaciones de escritorio,
servicios web, aplicaciones para celulares y componentes.

C SHARP es un lenguaje totalmente orientado a objetos.

Su creador es Anders Hejlsberg quien trabajó con Scott Wiltamuth y


Peter Golde. Hejlsberg fue el creador de Turbo Pascal.

C SHARP es moderno, simple, poderoso y orientado a objetos.

VENTAJAS Y CARACTERÍSTICAS DEL LENGUAJE

C# es un lenguaje moderno, sencillo y muy seguro. Fue creado para desarrollar


aplicaciones orientadas a objetos. Incorpora las características de un lenguaje de
última generación. Está en continuo desarrollo y tiene el soporte de una de las
empresas más grandes del sector.

C# es un lenguaje de propósito general y aunque cada plataforma sea dispar y


tenga sus secretos, podemos desarrollar aplicaciones para cualquiera de ellas
utilizando el mismo lenguaje.

Este hecho acarrea la consecuencia que un desarrollador en C# profundiza el


conocimiento del lenguaje mejorando la calidad del software que escribe ya se
trate de aplicaciones Web, Servicios Web, aplicaciones de escritorio, aplicaciones
Smartphone, Gadget, Live, MSN o Microsoft Spaces.

Un escenario común de hoy en día consiste en modelar una aplicación web que
utiliza servicios de una capa estructurada con servicios web. Además los servicios
son accedidos desde gadget en Live y desde aplicaciones de escritorio para la
barra de tareas de Windows que monitorean ciertas variables. Se utilizan diversas
tecnologías y todas ellas programadas con C#. C# es ideal para cualquier punto
de este escenario.

5
VISUAL C# APLICACIÓN Y DESARROLLO

LA PLATAFORMA .NET

La plataforma .NET es un conjunto de tecnologías diseñadas para


transformar Internet en una plataforma informática distribuida a escala
completa. Proporciona nuevas formas de desarrollar aplicaciones a partir
de colecciones de Servicios Web. La plataforma .NET soporta totalmente
la infraestructura existente de Internet, incluyendo HTTP, XML y SOAP.

.NET es toda una nueva arquitectura tecnológica, desarrollada por


Microsoft para la creación y distribución del software como un servicio.
Esto quiere decir, que mediante las herramientas de desarrollo
proporcionadas por esta nueva tecnología, los programadores podrán
crear aplicaciones basadas en servicios para la web.

Las características principales que conforman .NET son las siguientes:


 La plataforma .NET Framework, que proporciona la infraestructura
para crear aplicaciones y el entorno de ejecución para las mismas.
 Los productos de Microsoft enfocados hacia .NET, entre los que se
encuentran Windows .NET Server, como sistema operativo que
incluirá de forma nativa la plataforma .NET Framework; Visual
Studio .NET, como herramienta integrada para el desarrollo de
aplicaciones; Office .NET; b.Central para .NET, etc.
 Servicios para .NET desarrollados por terceros fabricantes, que
podrán ser utilizados por otras aplicaciones que se ejecuten en
Internet.

Existen adicionalmente un conjunto de productos, que bajo la etiqueta


de Servidores Empresariales para .NET (.NET Enterprise Servers) se
incluyen dentro de la estrategia .NET. Entre estos productos podemos
encontrar a SQL Server 2000, BizTalk Server, Commerce Server 2000,
etc. Sin embargo, hemos de hacer una puntualización importante: estos
productos no están basados en .NET Framework.

Ellos pueden funcionar dentro del entorno de ejecución de .NET


Framework, pero el único producto actualmente desarrollado bajo el
nuevo entorno es Visual Studio .NET. Gracias a .NET y a su modelo de
desarrollo basado en servicios, se flexibiliza y enriquece el modo en el
que hasta ahora se construían aplicaciones para Internet.
La idea que subyace bajo esta tecnología, es la de poblar Internet con
un extenso número de aplicaciones, que basadas en servicios para la
web (Web Services), formen un marco de intercambio global, gracias a
que dichos servicios están fundamentados en los estándares SOAP y
XML, para el intercambio de información.

6
VISUAL C# APLICACIÓN Y DESARROLLO

En este sentido, un programador puede crear Web Services para que


sean utilizados por sus propias aplicaciones a modo de componentes
(pero de una forma mucho más avanzada que empleando el modelo
COM clásico), siguiendo una estructura de programación ya conocida

.NET FRAMEWORK

El .NET Framework se basa en un nuevo entorno de ejecución de


lenguaje común (CLR - Common Language Runtime). Este motor de
ejecución proporciona un conjunto de servicios comunes para los
proyectos generados en Visual Studio .NET, con independencia del
lenguaje. Estos servicios proporcionan bloques de desarrollo
fundamentales para aplicaciones de cualquier tipo.

Antes del modelo COM, las aplicaciones estaban formadas por entidades
totalmente separadas con poca o ninguna integración. Al utilizar COM,
es posible integrar componentes dentro de una aplicación y entre
aplicaciones exponiendo una serie de interfaces comunes. Sin embargo,
todavía es necesario que los desarrolladores escriban el código para
envolver, gestionar e integrar componentes y objetos.

En el .NET Framework, los componentes se construyen sobre una base


común. Ya no es necesario escribir código para permitir que los objetos
interactúen directamente entre sí. En el entorno .NET, ya no es
necesario escribir envoltorios de componentes, puesto que los
componentes no los utilizan. El .NET Framework puede interpretar las
construcciones a los que los desarrolladores están acostumbrados
utilizando lenguajes orientados a objetos. El .NET Framework soporta
totalmente clases, herencia, métodos, propiedades, eventos,
polimorfismo, constructores y otras construcciones orientadas a objetos.

LOS BENEFICIOS DEL .NET FRAMEWORK

El .NET Framework fue diseñado para satisfacer los siguientes objetivos:

 Basado en estándares y prácticas Web El .NET Framework soporta


totalmente las tecnologías existentes de Internet, incluyendo
Hypertext Markup Language (HTML), XML, SOAP, Extensible
Stylesheet Language for Transformations (XSLT), Xpath y otros
estándares Web. El .NET Framework promueve la creación de
servicios Web débilmente conectados y sin estado.

 Extensible La jerarquía del .NET Framework no queda oculta al


desarrollador. Podemos acceder y extender clases .NET (a menos

7
VISUAL C# APLICACIÓN Y DESARROLLO

que estén selladas) utilizando herencia. También podemos


implementar herencia multi-lenguaje.

 Fácil de usar por los desarrolladores. En el .NET Framework, el


código está organizado en espacios de nombres jerárquicos y
clases. El Framework proporciona un sistema de tipos común,
denominado sistema de tipos unificado, que utiliza cualquier
lenguaje compatible con .NET. En el sistema de tipos unificado,
todo es un objeto. No existen tipos variant, sólo hay un tipo de
cadena (string), y todos los datos de la cadena son Unicode.

 Diseñado utilizando modelos de aplicaciones unificados.

EL CLR O COMMON LANGUAGE RUNTIME

El Entorno de Ejecución Común de Lenguajes o CLR (Common Language


Runtime), representa el alma de .NET Framework y es el encargado de
la ejecución del código de las aplicaciones.

A continuación se enumeran algunas de las características de este


componente de la plataforma:
 Proporciona un desarrollo de aplicaciones más sencillo y rápido
gracias a que gran parte de las funcionalidades que
tradicionalmente debía de crear el programador, vienen
implementadas en el entorno de ejecución.
 Administra el código en tiempo de ejecución, en todo lo referente
a su carga, disposición en memoria, recuperación de memoria no
utilizada a través de un recolector de memoria, etc.
 Implementa características de gestión a bajo nivel (administración
de memoria, por ejemplo), que en ciertos lenguajes, eran labor
del programador.
 Proporciona un sistema común de tipos para todos los lenguajes
del entorno.
 Gestiona la seguridad del código que es ejecutado.
 Dispone de un diseño abierto a lenguajes y herramientas de
desarrollo creadas por terceros fabricantes.
 Facilita enormemente la distribución e instalación de aplicaciones,
ya que en teoría, es posible instalar una aplicación simplemente
copiando los ficheros que la componen en uno de los directorios
del equipo en el que se vaya a ejecutar, eliminando los temibles
conflictos de versiones entre librerías, problema conocido también
con el nombre de Infierno de las DLL o DLL Hell.

8
VISUAL C# APLICACIÓN Y DESARROLLO

EL CTS, COMMON TYPE SYSTEM

El Sistema Común de Tipos o CTS (Common Type System), es el


mecanismo del CLR que permite definir el modo en que los tipos serán
creados y manipulados por el entorno de ejecución de .NETFramework.

Entre las funcionalidades que comprende, podemos destacar la


integración de código escrito en diferentes lenguajes; optimización del
código en ejecución; un modelo de tipos orientado a objeto, que soporta
múltiples lenguajes; y una serie de normas que aseguran la
intercomunicación entre objetos.

El sistema común de tipos (CTS a partir de ahora), como hemos


indicado, permite definir o diseñar el modo en cómo el código de la
aplicación será ejecutado, pero no se encarga directamente de su
ejecución; dicho de otro modo, el CTS le dice al CLR cómo quiere que
sea ejecutado el código.

Un ejemplo de las ventajas del CTS, consiste en que desde un lenguaje


como CS.NET, podemos instanciar un objeto de una clase escrita en otro
lenguaje como C#; y al hacer una llamada a uno de los métodos del
objeto, no es necesario realizar conversiones de tipos en los parámetros
del método,
funcionando todo de forma transparente.

MICROSOFT INTERMEDIATE LANGUAGE O LENGUAJE


INTERMEDIO DE MICROSOFT (MSIL)

Ninguno de los compiladores que generan código para la plataforma


.NET produce código máquina para CPUs x86 ni para ningún otro tipo de
CPU concreta, sino que generan código escrito en el lenguaje intermedio
conocido como Microsoft Intermediate Lenguage (MSIL) El CLR da a
las aplicaciones la sensación de que se están ejecutando sobre una
máquina virtual, y precisamente MSIL es el código máquina de esa
máquina virtual. Es decir, MSIL es el único código que es capaz de
interpretar el CLR, y por tanto cuando se dice que un compilador genera
código para la plataforma .NET lo que se está diciendo es que genera
MSIL.

9
VISUAL C# APLICACIÓN Y DESARROLLO

MSIL ha sido creado por Microsoft tras consultar a numerosos


especialistas en la escritura de compiladores y lenguajes tanto del
mundo académico como empresarial. Es un lenguaje de un nivel de
abstracción mucho más alto que el de la mayoría de los códigos
máquina de las CPUs existentes, e incluye instrucciones que permiten
trabajar directamente con objetos (crearlos, destruirlos, inicializarlos,
llamar a métodos virtuales, etc.), tablas y excepciones (lanzarlas,
capturarlas y tratarlas)

Ya se comentó que el compilador de C# compila directamente el


código fuente a MSIL, que Microsoft ha desarrollado nuevas versiones de
sus lenguajes Visual Basic (Visual Basic.NET) y C++ (C++ con
extensiones gestionadas) cuyos compiladores generan MSIL, y que ha
desarrollado un intérprete de JScript (JScript.NET) que genera código
MSIL. Pues bien, también hay numerosos terceros que han anunciado
estar realizando versiones para la plataforma .NET de otros lenguajes
como APL, CAML, Cobol, Eiffel, Fortran, Haskell, Java (J#), Mercury, ML,
Mondrian, Oberon, Oz, Pascal, Perl, Python, RPG, Scheme y Smalltalk.

La integración entre lenguajes al ser independiente de la CPU y


proporcionar un formato común para el código máquina generado por
todos los compiladores que generen código para .NET. Sin embargo,
dado que las CPUs no pueden ejecutar directamente MSIL, antes de
ejecutarlo habrá que convertirlo al código nativo de la CPU sobre la que
se vaya a ejecutar. De esto se encarga un componente del CLR conocido
como compilador JIT (Just-In-Time) o jitter que va convirtiendo
dinámicamente el código MSIL a ejecutar en código nativo según sea
necesario. Este jitter se distribuye en tres versiones:

 jitter normal: Es el que se suele usar por defecto, y sólo compila


el código MSIL a código nativo a medida que va siendo necesario,
pues así se ahorra tiempo y memoria al evitarse tener que
compilar innecesariamente código que nunca se ejecute. Para
conseguir esto, el cargador de clases del CLR sustituye
inicialmente las llamadas a métodos de las nuevas clases que vaya
cargando por llamadas a funciones auxiliares (stubs) que se
encarguen de compilar el verdadero código del método. Una vez
compilado, la llamada al stub es sustituida por una llamada directa
al código ya compilado, con lo que posteriores llamadas al mismo
no necesitarán compilación.

10
VISUAL C# APLICACIÓN Y DESARROLLO

 jitter económico: Funciona de forma similar al jitter normal solo


que no realiza ninguna optimización de código al compilar sino que
traduce cada instrucción MSIL por su equivalente en el código
máquina sobre la que se ejecute. Esta especialmente pensado
para ser usado en dispositivos empotrados que dispongan de poca
potencia de CPU y poca memoria, pues aunque genere código más
ineficiente es menor el tiempo y memoria que necesita para
compilar. Es más, para ahorrar memoria este jitter puede
descargar código ya compilado que lleve cierto tiempo sin
ejecutarse y sustituirlo de nuevo por el stub apropiado. Por estas
razones, este es el jitter usado por defecto en Windows CE,
sistema operativo que se suele incluir en los dispositivos
empotrados antes mencionados.

Otra utilidad del jitter económico es que facilita la adaptación de la


plataforma .NET a nuevos sistemas porque es mucho más sencillo de
implementar que el normal. De este modo, gracias a él es posible
desarrollar rápidamente una versión del CLR que pueda ejecutar
aplicaciones gestionadas aunque sea de una forma poco eficiente, y una
vez desarrollada es posible centrarse en desarrollar el jitter normal para
optimizar la ejecución de las mismas.
 prejitter: Se distribuye como una aplicación en línea de
comandos llamada ngen.exe mediante la que es posible compilar
completamente cualquier ejecutable o librería (cualquier
ensamblado en general, aunque este concepto se verá más
adelante) que contenga código gestionado y convertirlo a código
nativo, de modo que posteriores ejecuciones del mismo se harán
usando esta versión ya compilada y no se perderá tiempo en
hacer la compilación dinámica.

La actuación de un jitter durante la ejecución de una aplicación


gestionada puede dar la sensación de hacer que ésta se ejecute más
lentamente debido a que ha de invertirse tiempo en las compilaciones
dinámicas. Esto es cierto, pero hay que tener en cuenta que es una
solución mucho más eficiente que la usada en otras plataformas como
Java, ya que en .NET cada código no es interpretado cada vez que se
ejecuta sino que sólo es compilado la primera vez que se llama al
método al que pertenece. Es más, el hecho de que la compilación se
realice dinámicamente permite que el jitter tenga acceso a mucha más
información sobre la máquina en que se ejecutará la aplicación del que
tendría cualquier compilador tradicional, con lo que puede optimizar el
código para ella generado (por ejemplo, usando las instrucciones
especiales del Pentium III si la máquina las admite, usando registros
extra, incluyendo código inline, etc.) Además, como el recolector de

11
VISUAL C# APLICACIÓN Y DESARROLLO

basura de .NET mantiene siempre compactada la memoria dinámica las


reservas de memoria se harán más rápido, sobre todo en aplicaciones
que no agoten la memoria y, por tanto, no necesiten de una recolección
de basura. Por estas razones, los ingenieros de Microsoft piensan que
futuras versiones de sus jitters podrán incluso conseguir que el código
gestionado se ejecute más rápido que el no gestionado.

12
VISUAL C# APLICACIÓN Y DESARROLLO

PRACTICA

1. ¿Qué es MSIL?

2. ¿Para qué están proyectados los cambios de VISUAL BASIC.NET?

3. ¿Qué es la CLS (Common Language Specification,


Especificación de lenguajes comunes)?

4. ¿Qué es la plataforma .NET?

5. Características principales de la PLATAFORMA .NET.

13
VISUAL C# APLICACIÓN Y DESARROLLO

6. Hable brevemente del .NET FRAMEWORK

7. Enumere los beneficios de .NET FRAMEWORK.

8. Hable del CLR O Common Language Runtime

14
VISUAL C# APLICACIÓN Y DESARROLLO

9. Características del CLR.

10. EL CTS, COMMON TYPE SYSTEM.

15
VISUAL C# APLICACIÓN Y DESARROLLO

INICIANDO VISUAL CSHARP


Abra elmenú INICIO, seleccione TODOS LOS PROGRAMAS, haga clic en
la carpeta de programas MICROSOFT VISUAL STUDIO 2008 y por
último, haga clic sobre el acceso directo MICROSOFT VISUAL STUDIO
2008.

DE INMEDIATO APARECE LA SIGUIENTE PANTALLA:

16
VISUAL C# APLICACIÓN Y DESARROLLO

TIPOS DE DATOS QUE MANEJO C#

El tipo de dato asignado a un campo (constante o variable) determina el


contenido que éste puede aceptar y los tipos de operaciones que se
pueden realizar con él.

C SHARP tiene dos categorías generales de tipos de datos integrados


que son los tipos de valor que son los que contienen directamente sus
valores y los tipos de referencia.

LOS TIPOS ENTEROS

La siguiente tabla muestra los ocho tipos de enteros definidos en C#:

TIPO LONGITUD RANGO CONTENIDO

Entero sin signo


byte 8 bits De 0 a 255
de 8 bits

Entero con signo


sbyte 8 bits De -128 a 127
de 8 bits

17
VISUAL C# APLICACIÓN Y DESARROLLO

short 16 bits De -32.768 a 32.767 Entero corto

Entero corto sin


ushort 16 bits De 0 a 65.535
signo

int 32 bits De -2.147.483.648 a 2.147.483.647 Entero medio

Entero medio sin


uint 32 bits De 0 a 4.294.967.295
signo

De -9.223.372.036.854.775.808 a
long 64 bits Entero largo
9.223.372.036.854.775.807

Entero largo sin


ulong 64 bits De 0 a 18.446.744.073.709.551.615
signo

TIPOS DE PUNTO FLOTANTE

Los tipos de punto flotante representan números con fraccionas. Existen


dos clases de estos tipos que son: float y double.

La siguiente tabla muestra estos tipos:

Tipo de datos de punto flotante

TIPO LONGITUD RANGO CONTENIDO

float 32 bits De 1,5E-45 a 3,4E+38 Punto flotante corto

De 5E-324 a
double 64 bits Punto flotante largo
1,7E+308

Punto flotante
decimal 128 bits De 1E-28 a 7,9E+28
monetario

18
VISUAL C# APLICACIÓN Y DESARROLLO

 El tipo double es el más utilizado porque muchas funciones


matemáticas de la biblioteca de clases de C# usan valores
double.
 El tipo decimal esta dirigido al uso de cálculos monetarios. La
aritmética de punto flotante normal está sujeta a una variedad de
errores de redondeo cuando se aplica a valores decimales. El tipo
decimal elimina estos errores y puede representar hasta 28
lugares decimales.

TIPO CHAR

Los caracteres en C# no son cantidades de 8 bits como en otros


lenguajes de programación, sino que usa un tipo de caracteres de 16
bits llamado Unicode al cual se le llama char.

TIPO LONGITUD RANGO CONTENIDO

char 16 bits De 0 a 65,535 (código Unicode) Carácter

TIPO DE DATOS LÓGICOS

Un tipo de dato lógico o buleano representa un valor de verdad que


puede ser falso (False) o verdadero (True.)

TIPO LONGITUD RANGO CONTENIDO

true or false, no se usa 1 ó 0 ya que


bool 1 bits true or false
no hay conversión definida

LAS CONSTANTES

Las constantes en C# se denominan literales. Todas las constantes


tienen un tipo de dato, en caso de ser una constante entera se usa la de
menor tamaño que pueda alojarla, empezando por int y en caso de
punto flotante se considera como un double. Sin embargo se pueden
especificar explícitamente el tipo de dato que una constante deberá
usar, por medio de los sufijos:

19
VISUAL C# APLICACIÓN Y DESARROLLO

SUFIJO TIPO DE DATO EJEMPLO

L Long 12L

UL Ulong 68687UL

F Float 10,19F

M Decimal 9,95M

CARACTERES DE SECUENCIAS DE ESCAPE

C# al igual que C++ es compatible con el tipo de constante cadena de


caracteres. Dentro de la cadena de caracteres se pueden usar
secuencias de escape. Una cadena de caracteres puede iniciar con el
símbolo @ seguido por una cadena entre comillas, en este caso, todas
las secuencias de escape no se respetan, además así la cadena puede
ocupar dos o más líneas.

SECUENCIA DE ESCAPE SIGNIFICADO

\a Alerta (timbre)

\b Retroceso

\f Avance de página

\n Nueva línea

\r Retorno de carro

\t Tabulador horizontal

20
VISUAL C# APLICACIÓN Y DESARROLLO

SECUENCIA DE ESCAPE SIGNIFICADO

\v Tabulador vertical

\0 Nulo

\' Comilla sencilla

\" Comilla doble

\\ Diagonal invertida

DECLARACIÓN DE VARIABLES

Toda variable se debe de declarar antes de ser utilizada. La forma en


que se declara una variable en C# es la siguiente:
Tipo nombre_variable;

Para asignar un valor a una variable:


nombre_variable = valor

REGLAS PARA ASIGNAR NOMBRES A VARIABLES


1. Empezar con una letra o guión bajo _.
2. No utilizar espacios ni caracteres especiales
3. No utilizar palabras reservadas de VISUAL C#.

El formato para declarar variables es el siguiente:


Tipo De Datos nombreVariable;
Veamos algunos ejemplos de variables
Decimal Sueldo:
Integer Edad;
String Nombre;
Date FechaNacimiento;

21
VISUAL C# APLICACIÓN Y DESARROLLO

PRÁCTICA
1. Declare una variable de cada tipo de datos.

2. ¿Cuántas categorías generales de tipos de datos integrados tiene


C SHARP y cuáles son?

3. ¿Cuántos y cuáles son tipos de enteros definidos en C#:

4. ¿Qué representan los tipos de punto flotante?

5. ¿Cuáles son los tipos de punto flotante?

6. ¿A qué esta dirigido El tipo decimal?

7. ¿Cuál es la diferencia de los tipos CHAR de C# con relación a otros


lenguajes de programación?

8. ¿Qué es un tipo lógico?

22
VISUAL C# APLICACIÓN Y DESARROLLO

9. ¿Cuáles son los sufijos usados en las constantes?

10. Describa cinco caracteres de secuencia de escape y sus


significados.

23
VISUAL C# APLICACIÓN Y DESARROLLO

LOS CONTROLES DE VISUAL C#

Los controles son objetos contenidos en objetos de formulario.


Cuando diseñamos y modificamos la interfaz de usuario de nuestras
aplicaciones de Windows Forms, tendremos que agregar, alinear y situar
controles. Cada tipo de control tiene su propio conjunto de propiedades,
métodos y eventos que lo hacen adecuado para un propósito en
particular. Puede manipular los controles en el diseñador y escribir
código para agregar controles dinámicamente, en tiempo de ejecución.
En esta sección conoceremos el uso de los controles más comúnmente
usados en visual Basic o cualquier lenguaje de programación visual u
orientada a objeto.

Enriqueceremos la teoría de los controles mediante ejemplos prácticos e


ilustraciones.

EL CONTROL BUTTON O BOTÓN


Este control representa un botón de pulsación.

Se puede hacer clic en Botón utilizando el Mouse (ratón), la tecla


ENTER O INTRO o la BARRA ESPACIADORA si el botón tiene foco.

Se establece la propiedad AcceptButton o CancelButton de un objeto


Form para permitir a los usuarios hacer clic en un botón presionando
ENTRAR o ESCAPE incluso si el botón no tiene foco. Esto proporciona al
formulario el comportamiento de un cuadro de diálogo.

Al mostrar un formulario mediante el método ShowDialog, se puede


utilizar la propiedad DialogResult de un botón para especificar el valor
devuelto de ShowDialog.

Es posible cambiar la apariencia del botón. Por ejemplo, para darle un


aspecto liso a una página Web, hay que establecer la propiedad
FlatStyle en FlatStyle.Flat. La propiedad FlatStyle también puede
establecerse en FlatStyle.Popup, y el botón presentará un aspecto liso
hasta que el puntero del Mouse pase sobre el mismo, con lo cual a partir
de ese momento el botón adoptará la apariencia de un botón estándar
de Windows.

Entre la gran cantidad de de propiedades de este control, describiremos


las principales y más comúnmente usadas.

24
VISUAL C# APLICACIÓN Y DESARROLLO

NOMBRE DESCRIPCIÓN
TEXT O TEXTO Sirve como identificador. Es decir,
una cadena para poner el título del
botón.
NAME O NOMBRE Para poder el nombre del botón,
con el que será referenciado en el
EDITOR DE CÓDIGO.
TEXTALIGN Para alinear el título dentro del
área del botón.
BACKCOLOR Para cambiar el color de fondo
para el botón
CURSOR Permite cambiar el cursor del
Mouse que tiene el botón por
defecto.
IMAGE Imagen que podemos mostrar en
el botón como complemento a su
título, o bien, en el caso de que no
asignemos un texto al botón, nos
permitirá describir su
funcionalidad.
IMAGEALIGN Para alinear la imagen dentro del
área del botón
BACKGROUNDIMAGE Permite especificar la imagen de
fondo para el botón.
FLATSTYLE Permite cambiar el tipo de
resaltado.
FONT Permite cambiar el tipo de fuente y
del texto del botón y todas las
características correspondiente a la
fuente elegida.

EL CONTROL LABEL O ETIQUETA

El control Label proporciona un medio para mostrar texto o el


identificador de otro control en un formulario.

ALGUNAS PROPIEDADES DEL CONTROL LABEL

PROPIEDAD DESCRIPCIÓN
TEXT O TEXTO Es la más importante, se utiliza para establecer el
texto que mostrará el control.
AUTOSIZE En trae permite que las dimensiones ajusten al largo y

25
VISUAL C# APLICACIÓN Y DESARROLLO

alto del texto que muestre


ALIGNMENT Para alinear el texto al centro, izquierda o derecha
VISIBLE En Trae muestra el texto y en False lo oculta.
BACKCOLOR Determina el color del fondo de la etiqueta
NAME Para nombrar la etiqueta.
FONTNAME Permite escoger el nombre de la fuente que usará el
control.
FORECOLOR Permite escoger el color de la fuente que usará el
control.
CONTROL TEXTBOX O CAJA DE TEXTO
El control TextBox se coloca en un formulario para que los usuarios
puedan escribir una cadena para un propósito específico. El control
TextBox puede enmascarar los datos correspondientes a contraseñas si
el dispositivo del usuario admite esta funcionalidad. Es un control de
entrada de datos.

La propiedad principal de este control se llama Text. Mediante ella


podemos asignarle un texto ya sea en tiempo de diseño o tiempo de
ejecución al control. Si es en tiempo de diseño, debemos seleccionar el
TextBox e ir a la ventana de propiedades y seleccionar Text. Dentro de
ella podemos escribir el texto a ser mostrado. Si es en tiempo de
ejecución debemos escribir el nombre de el TextBox que queremos y
al presionar el punto ".", C# despliega la lista de propiedades y
métodos del TextBox, y ahí seleccionamos Text.

EJEMPLO:

TEXTBOX1.TEXT =”VOY A APRENDER C#”;

La propiedad Multiline o mixtilínea se utiliza para poder mostrar los


saltos de carro o saltos de línea y que el texto se vea en varias y no
todo en un única línea. Los valores que posee son True que está
activada y en False quiere decir que está deshabilitada. Por defecto
cuando añadimos un TextBox, la propiedad está en False, o sea que
tenemos que indicarle nosotros a CS, ya sea desde la ventana de
propiedades poniéndola en true. Una cosa importante es que esto no lo
podemos cambiar en tiempo de ejecución mediante código, si o si hay
que establecerla desde la ventana de propiedades, ya que es una
propiedad de solo lectura.

La propiedad PasswordChar tiene la función de ocultar el


verdadero contenido del TextBox por el caracter que le indiquemos,

26
VISUAL C# APLICACIÓN Y DESARROLLO

por ejemplo los TextBox de ingresos de contraseña, donde el


texto se oculta pero no se pierde, solo impide visualizarlo.

La propiedad ScrollBars permite que el TextBox tenga o no tenga


barras de Scroll cuando el texto sea superior a las dimensiones de la
caja de texto. Los valores que puede tener son: 0 indica que el
textBox no mostrará Barras de desplazamiento, en 1 Solo barra Horizontal, 2
Solo barra Vertical y 3 ambas barras de desplazamiento. En esta imagen se
ve un TextBox con la propiedad Scrollbars en 2, solo Vertical

Propiedad Enable impide que se pueda escribir en el TextBox,


bloqueando la entrada de datos. Esta propiedad puede tener el
Valor True o False, habilitado para el primero y False para el
segundo. Por defecto está deshabilitada, es decir en False

La propiedad MaxLength se usa para limitar la cantidad de caracteres


que se podrán ingresar. Por ejemplo si en el TextBox tuviésemos
el texto "Domingo" y hacemos esto:

A CONTINUACIÓN DESARROLLAREMOS UN EJERCICIO DONDE


USAREMOS LOS CONTROLES BUTTON, LABEL Y TEXTBOX PARA HACER
UNA CALCULADORA QUE REALICE LAS OPERACIONES ARITMÉTICAS
BÁSICAS. APROPÓSITO, ESTOS SON LOS CONTROLES QUE MÁS SE
USAN EN LA PROGRAMACIÓN VISUAL Y ORIENTADA A OBJETOS.

27
VISUAL C# APLICACIÓN Y DESARROLLO

EJERCICIO CON LOS CONTROL BUTTON, LABEL Y TEXBOX

1. inicie Visual Studio.

2. En el área PROJECT TYPES escoja VISUAL C#.

3. En el área TEMPLATES O PLANTILLAS escoja WINDOWS FORMS


APPLICATION.

4. En la caja de texto NAME O NOMBRE escriba: CALCULADORA I

5. En la caja de texto LOCATION, especifique el directorio o carpeta


donde se guardará el proyecto.

6. Haga clic sobre el botón OK O ACEPTAR.

28
VISUAL C# APLICACIÓN Y DESARROLLO

ESTA ES LA VENTANA DEL NUEVO PROYECTO:

7. Tome como guía la siguiente tabla para que le indica cuales y


cuántos controles se colocarán en el formulario y los valores de las
propiedades que se modificarán:

CONTROL PROPIEDAD VALOR

FORM1 TEXT O TEXTO CALCULADORA I

NAME O NOMBRE FCALCULADORAI

LABEL1 TEXT O TEXTO PRIMER VALOR

LABEL2 TEXT O TEXTO SEGUNDO VALOR

LABEL3 TEXT O TEXTO RESULTADO

29
VISUAL C# APLICACIÓN Y DESARROLLO

CONTROL PROPIEDAD VALOR

TEXBOX1 O CAJA DE NAME O NOMBRE TV1


TEXTO1

TEXBOX2 O CAJA DE NAME O NOMBRE TV2


TEXTO2

TEXBOX3 O CAJA DE NAME O NOMBRE TR


TEXTO3

BUTTON1 O BOTON1 NAME O NOMBRE BSUMAR

TEXT O TEXTO SUMAR

BUTTON2 O BOTON2 NAME O NOMBRE BRESTAR

TEXT O TEXTO RESTAR

BUTTON3 O BOTON3 NAME O NOMBRE BDIVIDIR

TEXT O TEXTO DIVIDIR

BUTTON4 O BOTON4 NAME O NOMBRE BMULTIPLICAR

TEXT O TEXTO MULTIPLICAR

BUTTON5 O BOTON5 NAME O NOMBRE BPOTENCIA

TEXT O TEXTO POTENCIA

BUTTON6 O BOTON6 NAME O NOMBRE BLIMPIAR

TEXT O TEXTO LIMPIAR

30
VISUAL C# APLICACIÓN Y DESARROLLO

CONTROL PROPIEDAD VALOR

BUTTON7 O BOTON7 NAME O NOMBRE BSALIR

TEXT O TEXTO SALIR

EL FORMULARIO SE VERÁ ASÍ:

VALIDACIÓN DE ENTRADA NUMÉRICA

Para evitar errores que pueden ocurrir cuando el usuario digita otro
valor que no sean número sin querer haremos que sea obligatoria la
entrada de valores numéricos en las cajas de texto TV1 y TV2.

8. Haga doble clic sobre el formulario para abrir el procedimiento del


evento LOAD que se verá así:
private void FCALCULADORA_Load(object sender, EventArgs e)

31
VISUAL C# APLICACIÓN Y DESARROLLO

}
9. Escriba el siguiente código para deshabilitar el texto o caja de
texto TTV2:
TV2.Enabled = false;
AHORA EL PROCEDIMIENTO SE VERÁ ASÍ:
private void FCALCULADORA_Load(object sender, EventArgs e)
{
TV2.Enabled = false;
}
10. Asegúrese que la propiedad CAUSESVALIDATION de cada
control TEXTBOX esté en TRUE (VERDADERO).
11. Haga clic sobre la caja de texto TV1.
1. Haga clic sobre la pestaña EVENTS O EVENTOS (EL RAYITO
AMARILLO) de la ventana PROPIEDADES O PROPERTIES para
mostrar la ventana de eventos.

.
2. Haga doble clic sobre el evento KEYPRESS para ver el
procedimiento del evento.

12. En el procedimiento

private void TV1_KeyPress(object sender, KeyPressEventArgs e)


{

Escriba el siguiente código:

if (Char.IsNumber(e.KeyChar))

32
VISUAL C# APLICACIÓN Y DESARROLLO

{
e.Handled = false;
TV2.Enabled = true;

//La caja de texto TN2 se activará después que se escriba un número


//en la caja de texto TN1 de forma que tampoco deje a TN1 en blanco.
}
else
{
e.Handled = true;
MessageBox.Show("DEBE DIGITAR UN VALOR NUMÉRICO");
TV1.Focus();
TV2.Enabled = false;
}
EL PROCEDIMIENTO COMPLETO SE VE AHORA ASÍ:

private void TV1_KeyPress(object sender, KeyPressEventArgs e)


{
if (Char.IsNumber(e.KeyChar))
{
e.Handled = false;

}
else
{
e.Handled = true;
MessageBox.Show("DEBE DIGITAR UN VALOR NUMÉRICO");
TV1.Focus();
TV2.Enabled = false;
}
}

13. Haga clic derecho en cualquier parte del editor de código y escoja
VIEW DESIGNER O VER DISEÑADOR.

33
VISUAL C# APLICACIÓN Y DESARROLLO

14. Haga clic sobre la caja de texto TV2.


3. Haga clic sobre la pestaña EVENTS O EVENTOS (EL RAYITO
AMARILLO) de la ventana PROPIEDADES O PROPERTIES para
mostrar la ventana de eventos.

.
4. Haga doble clic sobre el evento KEYPRESS para ver el
procedimiento del evento.

15. En el procedimiento

34
VISUAL C# APLICACIÓN Y DESARROLLO

private void TV2_KeyPress(object sender, KeyPressEventArgs e)


{

Escriba el siguiente código:

if (Char.IsNumber(e.KeyChar))
{
e.Handled = false;

}
else
{
e.Handled = true;
MessageBox.Show("DEBE DIGITAR UN VALOR NUMÉRICO");
TV2.Focus();
TV2.Clear();
}
EL PROCEDIMIENTO COMPLETO SE VE AHORA ASÍ:

private void TV2_KeyPress(object sender, KeyPressEventArgs e)


{
if (Char.IsNumber(e.KeyChar))
{
e.Handled = false;
}
else
{
e.Handled = true;
MessageBox.Show("DEBE DIGITAR UN VALOR NUMÉRICO");
TV2.Focus();
TV2.Clear();

}
}

16. Haga clic derecho en cualquier parte del editor de código y escoja
VIEW DESIGNER O VER DISEÑADOR.

35
VISUAL C# APLICACIÓN Y DESARROLLO

17. Haga doble clic sobre el botón SUMAR.

APARECE EL SIGUIENTE PROCEDIMIENTO:

private void BSUMAR_Click(object sender, EventArgs e)


{

18. Desplace el cursor hasta el procedimiento

public partial class FCALCULADORA : Form


{
public FCALCULADORA()
{
InitializeComponent();
}

19. Ubique el cursor después la primera llave y pulse la tecla ENTER.

DECLARE LAS VARIABLES DE MEMORIA CON ESTA LÍNEA DE CÓDIGO:

double v1, v2, r;

EL PROCEDIMIENTO DEBE VERSE ASÍ:

public partial class FCALCULADORA : Form


{

36
VISUAL C# APLICACIÓN Y DESARROLLO

double v1, v2, r;


public FCALCULADORA()

20. Desplace el cursor hasta el procedimiento

private void BSUMAR_Click(object sender, EventArgs e)


{

Y escriba el siguiente código:

//SI TV1 Y TV2 ES NO ESTA EN BLANCO SE HACE LA OPERACION

if(TV1.Text != "" & TV2.Text !="")

//Convertimos los valores de las cajas de texto a double


// almacenamos el resultado en las variables v1 y v2 tipo double
v1 = Convert.ToDouble(TV1.Text);
v2 = Convert.ToDouble(TV2.Text);
//Sumamos las variables v1 y v2
r = v1 + v2;
//Convertimos la variable de salida o de resultado a string
//para poder visualizar el resultado de la operación en la
//caja de texto TR.

TR.Text = Convert.ToString(r);

else

//DE LO CONTRARIO DE UN MENSAJE DE ERROR Y VUELVE A TV2

MessageBox.Show("NIGUNA DE LAS VARIABLES PUEDE


DEJARSE EN BLANCO");

TV2.Focus();

37
VISUAL C# APLICACIÓN Y DESARROLLO

21. Vuelva al diseño del formulario y haga doble clic sobre el botón
RESTAR.

APARECE EL SIGUIENTE PROCEDIMIENTO:

private void BRESTAR_Click(object sender, EventArgs e)


{

22. Escriba el siguiente código:

Y escriba el siguiente código:

//SI TV1 Y TV2 ES NO ESTA EN BLANCO SE HACE LA OPERACION

if(TV1.Text != "" & TV2.Text !="")

//Restamos las variables v1 y v2


r = v1 - v2;
//Convertimos la variable de salida o de resultado a string
//para poder visualizar el resultado de la operación en la
//caja de texto TR.

TR.Text = Convert.ToString(r);

else

//DE LO CONTRARIO DE UN MENSAJE DE ERROR Y VUELVE A TV2

MessageBox.Show("NIGUNA DE LAS VARIABLES PUEDE


DEJARSE EN BLANCO");

TV2.Focus();

38
VISUAL C# APLICACIÓN Y DESARROLLO

23. Vuelva al diseño del formulario y haga doble clic sobre el botón
DIVIDIR.

APARECE EL SIGUIENTE PROCEDIMIENTO:

private void BDIVIDIR_Click(object sender, EventArgs e)


{

24. Escriba el siguiente código:

Y escriba el siguiente código:

//SI TV1 Y TV2 ES NO ESTA EN BLANCO SE HACE LA OPERACIÓN

if(TV1.Text != "" & TV2.Text !="")

//Dividimos las variables v1 y v2


r = v1 / v2;
//Convertimos la variable de salida o de resultado a string
//para poder visualizar el resultado de la operación en la
//caja de texto TR.

TR.Text = Convert.ToString(r);

else

//DE LO CONTRARIO DE UN MENSAJE DE ERROR Y VUELVE A TV2

MessageBox.Show("NIGUNA DE LAS VARIABLES PUEDE


DEJARSE EN BLANCO");

TV2.Focus();

39
VISUAL C# APLICACIÓN Y DESARROLLO

25. Vuelva al diseño del formulario y haga doble clic sobre el botón
MULTIPLICAR.

APARECE EL SIGUIENTE PROCEDIMIENTO:

private void BMULTIPLICAR_Click(object sender, EventArgs e)


{

26. Escriba el siguiente código:

Y escriba el siguiente código:

//SI TV1 Y TV2 ES NO ESTA EN BLANCO SE HACE LA OPERACIÓN

if(TV1.Text != "" & TV2.Text !="")

//Multiplicamos las variables v1 y v2


r = v1 * v2;
//Convertimos la variable de salida o de resultado a string
//para poder visualizar el resultado de la operación en la
//caja de texto TR.

TR.Text = Convert.ToString(r);

40
VISUAL C# APLICACIÓN Y DESARROLLO

else

//DE LO CONTRARIO DE UN MENSAJE DE ERROR Y VUELVE A TV2

MessageBox.Show("NIGUNA DE LAS VARIABLES PUEDE


DEJARSE EN BLANCO");

TV2.Focus();

27. Vuelva al diseño del formulario y haga doble clic sobre el botón
POTENCIA.

APARECE EL SIGUIENTE PROCEDIMIENTO:

private void BPTENCIA_Click(object sender, EventArgs e)


{

28. Escriba el siguiente código:

//SI TV1 Y TV2 ES NO ESTA EN BLANCO SE HACE LA OPERACIÓN

if(TV1.Text != "" & TV2.Text !="")

//Elevamos a la potencia v1 al valor que tenga v2


r =Math.Pow(v1,v2);
//Convertimos la variable de salida o de resultado a string
//para poder visualizar el resultado de la operación en la
//caja de texto TR.

TR.Text = Convert.ToString(r);

else

//DE LO CONTRARIO DE UN MENSAJE DE ERROR Y VUELVE A TV2

41
VISUAL C# APLICACIÓN Y DESARROLLO

MessageBox.Show("NIGUNA DE LAS VARIABLES PUEDE


DEJARSE EN BLANCO");

TV2.Focus();

29. Vuelva al diseño del formulario y haga doble clic sobre el botón
LIMPIAR.

APARECE EL SIGUIENTE PROCEDIMIENTO:

private void BLIMPIAR_Click(object sender, EventArgs e)


{

30. Escriba el siguiente código:

TV1.Clear();
TV2.Clear();
TR.Clear();
TV1.Focus();

31. Vuelva al diseño del formulario y haga doble clic sobre el botón
SALIR.

APARECE EL SIGUIENTE PROCEDIMIENTO:

private void BSALIR_Click(object sender, EventArgs e)


{

32. Escriba: this.Close();

ESTE ES EL CODIGO COMPLETO DEL PROYECTO CALCULADORA I:

namespace CALCULADORA_I
{
public partial class FCALCULADORA : Form
{
double v1, v2, r;
public FCALCULADORA()
{

42
VISUAL C# APLICACIÓN Y DESARROLLO

InitializeComponent();
}
private void TV1_KeyPress(object sender, KeyPressEventArgs e)
{
f (Char.IsNumber(e.KeyChar))
{
e.Handled = false;
TV2.Enabled = true;
}
else
{
e.Handled = true;
MessageBox.Show("DEBE DIGITAR UN VALOR NUMÉRICO");
TV1.Focus();

TV2.Enabled = false;
}
}
private void BSUMAR_Click(object sender, EventArgs e)
{
//SI TV1 Y TV2 ES NO ESTA EN BLANCO SE HACE LA OPERACION

if(TV1.Text != "" & TV2.Text !="")

{
//Convertimos los valores de las cajas de texto a double
//y almacenamos el resultado en las variables v1 y v2 tipo double
v1 = Convert.ToDouble(TV1.Text);
v2 = Convert.ToDouble(TV2.Text);
//Sumamos las variables v1 y v2
r = v1 + v2;
//Convertimos la variable de salida o de resultado a string
//para poder visualizar el resultado de la operación en la
//caja de texto TR.
TR.Text = Convert.ToString(r);
}
else
{
//DE LO CONTRARIO DE UN MENSAJE DE ERROR Y VUELVE A TV2
MessageBox.Show("NIGUNA DE LAS VARIABLES PUEDE DEJARSE EN BLANCO");
}
}
private void BRESTAR_Click(object sender, EventArgs e)
{
//SI TV2 ES NO ESTA EN BLANCO SE HACE LA OPERACION

43
VISUAL C# APLICACIÓN Y DESARROLLO

if (TV2.Text != "")
{
//Restamos las variables v1 y v2
r = v1 - v2;
//Convertimos la variable de salida o de resultado a string
//para poder visualizar el resultado de la operación en la
//caja de texto TR.
TR.Text = Convert.ToString(r);
}
else
{
//DE LO CONTRARIO DE UN MENSAJE DE ERROR Y VUELVE A TV2
MessageBox.Show("EL SEGUNDO VALOR NO PUEDE ESTAR EN BLANCO");
TV2.Focus();
}
}

private void BDIVIDIR_Click(object sender, EventArgs e)


{
//SI TV2 ES NO ESTA EN BLANCO SE HACE LA OPERACION

if (TV1.Text != "" & TV2.Text !="")

{
//Dividimos las variables v1 y v2
r = v1 / v2;
//Convertimos la variable de salida o de resultado a string
//para poder visualizar el resultado de la operación en la
//caja de texto TR.
TR.Text = Convert.ToString(r);
}
else
{
//DE LO CONTRARIO DE UN MENSAJE DE ERROR Y VUELVE A TV2
MessageBox.Show("EL SEGUNDO VALOR NO PUEDE ESTAR EN BLANCO");
TV2.Focus();
}
}
private void BMULTIPLICAR_Click(object sender, EventArgs e)
{
//SI TV2 ES NO ESTA EN BLANCO SE HACE LA OPERACION

if (TV1.Text != "" & TV2.Text !="")

44
VISUAL C# APLICACIÓN Y DESARROLLO

//Multiplicamos las variables v1 y v2


r = v1 * v2;
//Convertimos la variable de salida o de resultado a string
//para poder visualizar el resultado de la operación en la
//caja de texto TR.
TR.Text = Convert.ToString(r);
}
else
{
//DE LO CONTRARIO DE UN MENSAJE DE ERROR Y VUELVE A TV2
MessageBox.Show("EL SEGUNDO VALOR NO PUEDE ESTAR EN BLANCO");
TV2.Focus();
}

}
private void BPTENCIA_Click(object sender, EventArgs e)
{
//SI TV2 ES NO ESTA EN BLANCO SE HACE LA OPERACION

If (TV1.Text != "" & TV2.Text !="")

{
//Elevamos a la potencia v1 al valor que tenga v2
r = Math.Pow(v1, v2);
//Convertimos la variable de salida o de resultado a string
//para poder visualizar el resultado de la operación en la
//caja de texto TR.
TR.Text = Convert.ToString(r);
}
else
{
//DE LO CONTRARIO DE UN MENSAJE DE ERROR Y VUELVE A TV2
MessageBox.Show("EL SEGUNDO VALOR NO PUEDE ESTAR EN BLANCO");
TV2.Focus();
}
}
private void BLIMPIAR_Click(object sender, EventArgs e)
{
TV1.Clear();
TV2.Clear();
TR.Clear();
TV1.Focus();
}
private void BSALIR_Click(object sender, EventArgs e)
{

45
VISUAL C# APLICACIÓN Y DESARROLLO

this.Close();
}
private void TV2_KeyPress(object sender, KeyPressEventArgs e)
{
if (Char.IsNumber(e.KeyChar))
{
e.Handled = false;
}
else
{
e.Handled = true;
MessageBox.Show("DEBE DIGITAR UN VALOR NUMÉRICO");
TV2.Focus();
TV2.Clear();
}
}
private void FCALCULADORA_Load(object sender, EventArgs e)
{
TV2.Enabled = false;
}

}
}

33. Pulse la tecla F5 para ejecutar el proyecto.

ESTE ERROR APARECE SI NO SE DIGITA UN VALOR NUMÉRICO

46
VISUAL C# APLICACIÓN Y DESARROLLO

HAGAMOS EL MISMO EJERCICIO ORIENTADO A OBJETOS

1. Cree un proyecto llamado CALCULADORA POO

2. Diseñe el formulario igual que el anterior.

Debe quedar así:

3. Haga clic derecho en un área libre del escritorio y escoja View Code.

4. Debajo de public partial class, declare las variables así:


double VALOR1, VALOR2, RESULTADO;

5. Ubique el puntero debajo de la llave de cierre de


{
InitializeComponent();
}

y escriba los siguientes métodos:


//Creación del método SUMAR.
private void SUMAR()
{
//Se invoca el mètodo entrada
ENTRADA();
RESULTADO = VALOR1 + VALOR2;
//Se invoca el mètodo salida
SALIDA();
}
//Creación del método RESTAR.
private void RESTAR()
{

47
VISUAL C# APLICACIÓN Y DESARROLLO

//Se invoca el mètodo entrada


ENTRADA();
RESULTADO = VALOR1 - VALOR2;
//Se invoca el mètodo salida
SALIDA();
}
//Creación del método MULTIPLICAR.
private void MULTIPLICAR()
{
//Se invoca el mètodo entrada
ENTRADA();
RESULTADO = VALOR1 * VALOR2;
//Se invoca el mètodo salida
SALIDA();
}
//Creación del método DIVIDIR.
private void DIVIDIR()
{
//Se invoca el mètodo entrada
ENTRADA();
RESULTADO = VALOR1 + VALOR2;
//Se invoca el mètodo salida
SALIDA();
}
//Creación del método POTENCIA.
private void POTENCIA()
{
//Se invoca el mètodo entrada
ENTRADA();
RESULTADO = Math.Pow(VALOR1,VALOR2);
//Se invoca el mètodo salida
SALIDA();
}
//Creación del método que convierte el contenido de las cajas de
//de texto del formulario en núneros.
private void ENTRADA()
{
try
{
VALOR1 = Double.Parse(TN1.Text);
VALOR2 = Double.Parse(TN2.Text);
}
catch
{
MessageBox.Show("ENTRADA INVALIDA. TRATE DE NUEVO");
TN1.Focus();
}
}
//Creación del método que convierte el contenido de la variable
//RESULTADO en texto y lo copia en el textbox TR
private void SALIDA()
{
TR.Text = Convert.ToString(RESULTADO);
}
//Método que limpia las cajas de texto o textboxs

48
VISUAL C# APLICACIÓN Y DESARROLLO

private void LIMPIAR()


{
TR.Clear();
TN2.Clear();
TR.Clear();
}

6. Vuelva al diseño del formulario y haga doble clic sobre el botón


SUMA.

EL EVENTO CLICK DEL BOTÓN SUMA SE VE ASÍ:

7. Escriba:
SUMAR();

Para invocar el método SUMAR()

8. Haga lo mismo con los demás botones invocando sus respectivos


métodos.

El código completo debe verse así:


private void SUMAR()
{
//Se invoca el mètodo entrada
ENTRADA();
RESULTADO = VALOR1 + VALOR2;
//Se invoca el mètodo salida
SALIDA();
}
//Creación del método RESTAR.
private void RESTAR()
{
//Se invoca el mètodo entrada
ENTRADA();
RESULTADO = VALOR1 - VALOR2;
//Se invoca el mètodo salida
SALIDA();
}
//Creación del método MULTIPLICAR.
private void MULTIPLICAR()
{
//Se invoca el mètodo entrada
ENTRADA();
RESULTADO = VALOR1 * VALOR2;
//Se invoca el mètodo salida
SALIDA();

49
VISUAL C# APLICACIÓN Y DESARROLLO

}
//Creación del método DIVIDIR.
private void DIVIDIR()
{
//Se invoca el mètodo entrada
ENTRADA();
RESULTADO = VALOR1 / VALOR2;
//Se invoca el mètodo salida
SALIDA();
}
//Creación del método POTENCIA.
private void POTENCIA()
{
//Se invoca el mètodo entrada
ENTRADA();
RESULTADO = Math.Pow(VALOR1,VALOR2);
//Se invoca el mètodo salida
SALIDA();
}
//Creación del método que convierte el contenido de las cajas de
//de texto del formulario en núneros.
private void ENTRADA()
{
try
{
VALOR1 = Double.Parse(TN1.Text);
VALOR2 = Double.Parse(TN2.Text);
}
catch
{
MessageBox.Show("ENTRADA INVALIDA. TRATE DE NUEVO");
TN1.Focus();
}
}
//Creación del método que convierte el contenido de la variable
//RESULTADO en texto y lo copia en el textbox TR
private void SALIDA()
{
TR.Text = Convert.ToString(RESULTADO);
}
//Método que limpia las cajas de texto o textboxs
private void LIMPIAR()
{
TR.Clear();
TN2.Clear();
TR.Clear();
}

private void BSUMA_Click(object sender, EventArgs e)


{
SUMAR();
}

private void BMULTIPLICA_Click(object sender, EventArgs e)


{
MULTIPLICAR();
}

50
VISUAL C# APLICACIÓN Y DESARROLLO

private void BPOTENCIA_Click(object sender, EventArgs e)


{
POTENCIA();
}

private void BRESTA_Click(object sender, EventArgs e)


{
RESTAR();
}

private void BDIVIDE_Click(object sender, EventArgs e)


{
DIVIDIR();
}

private void BNUEVO_Click(object sender, EventArgs e)


{
LIMPIAR();
}

private void BFINALIZA_Click(object sender, EventArgs e)


{
Close();
}

9. Pulse F5 para ejecutar el proyecto y pruébelo.

DIVIDIENDO EN TIEMPO DE EJECUCIÓN:

51
VISUAL C# APLICACIÓN Y DESARROLLO

EL CONTROL LISTBOX

Un control ListBox de formularios Windows Forms muestra una


lista de elementos de los cuales el usuario podemos seleccionar
uno o más. Cuando el número total de elementos supera el
número que se puede mostrar, se agrega automáticamente una
barra de desplazamiento vertical al control ListBox.

Este control contiene muchas propiedades y métodos que facilitan el


trabajo con datos la más importante es su propiedad Ítems.

PROPIEDAD MÉTODO ACCIÓN


Items Add(dato) Inserta un elemento al final del
cuadro de lista o listbox.
[index].Text Fija el texto en la Posición
indicada.
Clear() Elimina uno o todos los
elementos de la lista.
Count() Regresa la cantidad de
elementos en lista
Sorted=true Ordena los elementos de la
lista.
Contains(dato) Regresa true o false
dependiendo si el dato se
encuentra o no en la lista.
IndexOf(dato) Regresa el índice a la posición
del objeto o dato indicado
dentro del cuadro de cuadro de
lista o listbox.
Insert(index,dato) Inserta el dato en la posición
indicada.
Remove(dato) Elimina el dato del cuadro de
lista listbox.
RemoveAt(índice) Elimina el dato que esta en la
posición indicada.
Count Refleja el número de elementos
de la lista.
SelectionMode MultiExtended Determina cuántos elementos
de la lista pueden seleccionarse
a la vez.
MultiColumn Trae o False Para mostrar elementos en

52
VISUAL C# APLICACIÓN Y DESARROLLO

PROPIEDAD MÉTODO ACCIÓN


varias columnas, si esta en
verdadero o trae.
ScrollAlwaysVisible Trae o False Para mostrar o no la barra de
desplazamiento.
SelectedIndex Devuelve un valor entero que
corresponde al primer elemento
seleccionado en el cuadro de
lista

El siguiente código crear una instancia de un control cuadro de lista o


ListBox:

Dim listBox1 As New ListBox

El siguiente código añade el cuadro de lista o listbox al formulario.

Me.Controls.Add(listBox1)

Cuando ponemos la propiedad MultiColumn en verdadero o true, el


cuadro de lista muestra elementos en varias columnas y aparece una
barra de desplazamiento horizontal. Cuando ponemos la propiedad
MultiColumn en falso o false, el cuadro de lista muestra elementos en
una única columna y aparece una barra de desplazamiento vertical.
Cuando ScrollAlwaysVisible se establece en true, la barra de
desplazamiento aparece, independientemente del número de elementos.

El siguiente código pone en verdadero true la propiedad Multicolumn.

listBox1.MultiColumn = True

La propiedad SelectionMode determina cuántos elementos de la lista


pueden seleccionarse a la vez.

El siguiente código establece el modo de selección para múltiple


selección y extendido.

listBox1.SelectionMode = SelectionMode.MultiExtended

EJERCICIO CON EL CONTROL LISTBOX O CUADRO DE LISTA

53
VISUAL C# APLICACIÓN Y DESARROLLO

1. Cree un nuevo proyecto Windows Application con el nombre:


CONTROL LISTBOX.
2. En la propiedad NAME o NOMBRE del formulario, escriba: FLISTA.
3. En la propiedad TEXT o TEXTO escriba EL CONTROL CUADRO DE
LISTA O COMBOBOX.
4. Añada los controles indicados y modifique sus propiedades según
muestra la siguiente tabla.

CONTROL PROPIEDAD VALOR

LABEL1 O ETIQUETA1 TEXT O TEXTO ESCRIBA LOS NOMBRES


AQUÍ

TEXTBOX1 O CAJA DE NAME O NOMBRE TNOMBRE


TEXTO1

BUTTON1 O BOTON1 TEXT O TEXTO AGREGAR A LA LISTA

NAME O NOMBRE BAGREGAR

BUTTON2 O BOTON2 TEXT O TEXTO SALIR

NAME O NOMBRE BSALIR

LISTBOX1 O CUADRO DE NAME O NOMBRE LBLISTA


LISTA1

SELECTIONMODE MULTIEXTENDED

BUTTON3 O BOTON3 TEXT O TEXTO BORRAR UNO

NAME O NOMBRE BBORRARUNO

BUTTON4 O BOTON4 TEXT O TEXTO BORRAR TODOS

NAME O NOMBRE BBORRARTODOS

54
VISUAL C# APLICACIÓN Y DESARROLLO

CONTROL PROPIEDAD VALOR

BUTTON5 O BOTON5 TEXT O TEXTO ORDENAR

NAME O NOMBRE BORDENAR

55
VISUAL C# APLICACIÓN Y DESARROLLO

EL FORMULARIO DEBE VERSE ASÍ:

5. Haga doble clic en un área del formulario donde no haya ningún


control

Esto hace que se muestre el evento Form_Load que es el que se


ejecuta cuando el formulario se carga en la memoria, justo antes de
mostrarse.

Esta es la estructura del evento:

private void FLISTA_Load(object sender, EventArgs e)


{

Escriba el siguiente código:

TNOMBRES.Focus();

ESTO COLOCA EL PUNTERO EN EL CUADRO DE TEXTO


TNOMBRE.

AHORA EL PROCEDIMIENTO DEL EVENTO SE VE ASÍ:

56
VISUAL C# APLICACIÓN Y DESARROLLO

private void FLISTA_Load(object sender, EventArgs e)


{
TNOMBRES.Focus();
}

6. Vuelva al diseño del formulario.


7. Haga doble clic sobre el botón AGREGAR.

APARECE EL SIGUIENTE PROCEDIMIENTO:


private void BAGREGAR_Click(object sender, EventArgs e)
{

8. Escriba lo siguiente:

LISTA.Items.Add(TNOMBRES.Text);
TNOMBRES.Clear();

TNOMBRES.Focus();

9. El procedimiento complete se verá así:

private void BAGREGAR_Click(object sender, EventArgs e)


{
LISTA.Items.Add(TNOMBRES.Text);
TNOMBRES.Clear();
TNOMBRES.Focus();

¿QUE SIGNFICA ESTA LÍNEA DE CÓDIGO?

Items son los elementos que tiene el objeto ListBox o Cuadro de


Lista que nombramos como LISTA.

Add es un método de Items que se encarga de añadir o agregar los


elementos de la lista(LISTA) desde el
cuadro o caja de texto TNOMBRES.

10. Haga clic derecho en cualquier parte


de EDITOR DE CÓDIGO y escoja la opción
VIEW DESIGNER o VER DISEÑADOR para
volver al formulario.

57
VISUAL C# APLICACIÓN Y DESARROLLO

11. Haga doble clic sobre el botón ORDENAR:

APARECE EL SIGUIENTE PROCEDIMIENTO:

private void BORDENAR_Click(object sender, EventArgs e)


{

12. Escriba el siguiente código:

LISTA.Sorted = true;

EL PROCEDIMIENTO DEL EVENTO SE VERA ASÍ:

private void BORDENAR_Click(object sender, EventArgs e)


{
LISTA.Sorted = true;
}

13. Haga clic derecho en cualquier parte de EDITOR DE CÓDIGO y


escoja la opción VIEW DESIGNER o VER DISEÑADOR para volver
al formulario.
14. Haga doble clic sobre el botón BORRAR TODOS.

APARECE EL SIGUIENTE PROCEDIMIENTO:

private void BBORRARTODO_Click(object sender, EventArgs e)


{
}

15. Escriba el siguiente código:

LISTA.Items.Clear();
TNOMBRES.Focus();

EL PROCEDIMIENTO DEL EVENTO SE VERA ASÍ:

private void BBORRARTODO_Click(object sender, EventArgs e)


{
LISTA.Items.Clear();
TNOMBRES.Focus();
}

58
VISUAL C# APLICACIÓN Y DESARROLLO

16. Haga clic derecho en cualquier parte de EDITOR DE CÓDIGO y


escoja la opción VIEW DESIGNER o VER DISEÑADOR para volver
al formulario.
17. Haga doble clic sobre el botón BORRAR UNO.

APARECE SL SIGUIENTE PROCEDIMIENTO:

private void BELIMINAR_Click(object sender, EventArgs e)


{

18. Escriba el siguiente código:

LISTA.Items.Remove(LISTA.SelectedItem);

TNOMBRES.Focus();

ESTE CODIGO REMUEVE EL ELEMENTO QUE HA SIDO SELECCIONADO.

EL PROCEDIMIENTO COMPLETO SE VERÁ ASÍ:

private void BELIMINAR_Click(object sender, EventArgs e)


{
LISTA.Items.Remove(LISTA.SelectedItem);
TNOMBRES.Focus();
}

19. Vuelva al diseño del formulario.


20. Haga doble clic sobre el botón SALIR.
21. Escriba:

this.Close();

PASAR EL CONTENIDO DE LA CAJA DE TEXTO AL CUADRO DE LISTA


CON LA TECLA ENTER.

Tenemos el botón AGREGAR para copiar el contenido de la caja de texto


TNOMBRES al cuadro de liste, pero tambien podemos hacer que esto
suceda al pulsar la tecla ENTER.

22. Vuelva al diseño del formulario.

23. Haga clic sobre la caja de texto TNOMBRES.

59
VISUAL C# APLICACIÓN Y DESARROLLO

24. Despliegue la pestaña de EVENTOS y haga doble clic sobre el


evento KEYSDOWM.

APARECE EL SIGUIENTE PROCEDIMIENTO:

private void TNOMBRES_KeyDown(object sender, KeyEventArgs e)


{
if (e.KeyValue == 13)
{

25. Escriba el siguiente código:

if (e.KeyValue == 13)
{
LISTA.Items.Add(TNOMBRES.Text);
TNOMBRES.Clear();
}

ESTE CODIGO QUIERE DECIR:

Si el código o valor correspondiente a la tecla presionada es igual a 13


es (que es el valor de la tecla ENTER), entonces añade el contenido de
la caja de texto TNOMBRES como otro elemento del cuadro de lista y
luego limpie el contenido de la caja de texto TNOMBRES.

ESTE ES EL CÓDIGO COMPLETO DE LA APLICACIÓN:

namespace EL_CONTROL_LISTBOX
{
public partial class FLISTA : Form
{
public FLISTA()
{
InitializeComponent();
}

private void BSALIR_Click(object sender, EventArgs e)


{
this.Close();

60
VISUAL C# APLICACIÓN Y DESARROLLO

private void BAGREGAR_Click(object sender, EventArgs e)


{
LISTA.Items.Add(TNOMBRES.Text);
TNOMBRES.Clear();
TNOMBRES.Focus();
}

private void BORDENAR_Click(object sender, EventArgs e)


{
LISTA.Sorted = true;
}

private void BELIMINAR_Click(object sender, EventArgs e)


{
LISTA.Items.Remove(LISTA.SelectedItem);
TNOMBRES.Focus();
}
private void BBORRARTODO_Click(object sender, EventArgs e)
{
TNOMBRES.Focus();
LISTA.Items.Clear();
TNOMBRES.Focus();
}
private void FLISTA_Load(object sender, EventArgs e)
{
TNOMBRES.Focus();
}
private void TNOMBRES_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyValue == 13)
{
LISTA.Items.Add(TNOMBRES.Text);
TNOMBRES.Clear();
}

}
}
}

26. Pulse la tecla F5 para ejecutar el proyecto.

61
VISUAL C# APLICACIÓN Y DESARROLLO

LA VENTANA DEL PROYECTO EN TIEMPO DE EJECUCIÓN SE VERA ASÍ:

27. Escriba la lista de elementos que desee haciendo clic sobre el


botón AGREGAR o pulse la tecla ENTER para que pase al cuadro
de lista.

62
VISUAL C# APLICACIÓN Y DESARROLLO

28. Pruebe cada botón para comprobar que su programa funciona


bien. Si alguna opción no funciona bien revise los pasos
anteriores.

63
VISUAL C# APLICACIÓN Y DESARROLLO

PRÁCTICA

1. ¿Qué son los controles?

2. ¿Para qué sirve el control BUTTON?

3. Mencione algunas propiedades del control BUTTON.

4. Defina el control LISTBOX.

5. Mencione algunas propiedades del control LISTBOX.

HAGA EL PROGRAMA ANTERIOR USANDO MÉTODOS

64
VISUAL C# APLICACIÓN Y DESARROLLO

EL CONTROL COMBOBOX O CUADRO COMBINADO


El control BOMBOBOX ofrece una lista de elementos entre los que
podemos escoger uno. Este es uno de los controles de lista más
utilizados en las aplicaciones tanto de escritorio como ASP .Net. Este es
sumamente versátil.

El ejemplo que desarrollamos a continuación muestra como ingresar una


fecha considerando edades entre 17 y 90 años. El botón Comprobar
permite mostrar un mensaje si la fecha seleccionada es Correcta o
Incorrecta.
CALCULADORA CON COMBOBOX CUADRO COMBINADO

En este ejercició veremos como crear y llamar métodos dentro de uns misma clase.
Tambien usaremos la instrucción IF/THEN/ELSE

DISEÑO DE LA INTERFAZ

1.Inicie un nuevo proyecto y pongale el nombre de CALDULADORA


CON COMBOBOX
2.El la proiedad TEXT del formulario ponga USO DEL CONTROL
COMBOBOX.
3.El la proiedad NAME póngale FCALCULADORA.
4.Complete el diseño, colocando los controles que usaremos
sobre el formulario de acuerdo a las especificaciones de la
siguiente tabla:

CONTROL PROPIEDAD VALOR


LABEL1 TEXT O TEXTO PRIMER VALOR
LABEL2 TEXT O TEXTO SEGUNDO VALOR
LABEL3 TEXT O TEXTO RESULTADO
LABEL3 TEXT O TEXTO ESCOJA LA OPERACIÓN
ARITMÉTICA
TEXTBOX1 NAME O NOMBRE TN1
TEXTBOX2 NAME O NOMBRE TN2
TEXTBOX3 NAME O NOMBRE TR
ENABLE FALSE
LOCKED TRUE
BUTTON1 NAME O NOMBRE BCALCULAR
TEXT O TEXTO CALCULAR
BUTTON2 NAME O NOMBRE BNUEVO

65
VISUAL C# APLICACIÓN Y DESARROLLO

CONTROL PROPIEDAD VALOR


TEXT O TEXTO NUEVO
BUTTON3 NAME O NOMBRE BFINALIZAR
TEXT O TEXTO SALIR
COMBOBOX OPCION

5. Haga clic derecho sobre el cuadro combinado(COMBOBOX) y escoja


EDIT ITEMS selecciónelo, luego haga clic en la propiedad ITEMS y
despues en los tres puntos que aparecen a la derecha del valor de la
propiedad COLECTION.

6. Haga sobre el cuadro de texto RESULTADO, luego localice la


propiedad ENABLE y escoja el valor FALSE para que cuando corra el
programa no permita acceder a este cuadro para escribir ya se
usará como salida del resultado de la operación aritmética que se
escoja.

6. Independiente de cual de los dos métodos escoja aparecera éste


cuadro de diálogo siguiente donde escribira los nombres de las
operaciones aritméticas como se ilustra dentro del mismo:

66
VISUAL C# APLICACIÓN Y DESARROLLO

1. Cuando haya escrito los elementos haga clic sobre el botón


aceptar.

EL FORMULARIO QUEDARÁ ASÍ:

PROGRAMACIÓN DE LOS CONTROLES

10. Haga clic derecho en un área libre del escritorio y escoja View
Code.

11. Debajo de public partial class, declare las variables así:


double VALOR1, VALOR2, RESULTADO;

12. Ubique el puntero debajo de la llave de cierre de

67
VISUAL C# APLICACIÓN Y DESARROLLO

{
InitializeComponent();
}

y escriba los siguientes métodos:


//Creación del método SUMAR.
private void SUMAR()
{
//Se invoca el mètodo entrada
ENTRADA();
RESULTADO = VALOR1 + VALOR2;
//Se invoca el mètodo salida
SALIDA();
}
//Creación del método RESTAR.
private void RESTAR()
{
//Se invoca el mètodo entrada
ENTRADA();
RESULTADO = VALOR1 - VALOR2;
//Se invoca el mètodo salida
SALIDA();
}
//Creación del método MULTIPLICAR.
private void MULTIPLICAR()
{
//Se invoca el mètodo entrada
ENTRADA();
RESULTADO = VALOR1 * VALOR2;
//Se invoca el mètodo salida
SALIDA();
}
//Creación del método DIVIDIR.
private void DIVIDIR()
{
//Se invoca el mètodo entrada
ENTRADA();
RESULTADO = VALOR1 + VALOR2;
//Se invoca el mètodo salida
SALIDA();
}
//Creación del método POTENCIA.
private void POTENCIA()
{
//Se invoca el mètodo entrada
ENTRADA();
RESULTADO = Math.Pow(VALOR1,VALOR2);
//Se invoca el mètodo salida
SALIDA();
}
//Creación del método que convierte el contenido de las cajas de
//de texto del formulario en núneros.
private void ENTRADA()

68
VISUAL C# APLICACIÓN Y DESARROLLO

{
try
{
VALOR1 = Double.Parse(TN1.Text);
VALOR2 = Double.Parse(TN2.Text);
}
catch
{
MessageBox.Show("ENTRADA INVALIDA. TRATE DE NUEVO");
TN1.Focus();
}
}
//Creación del método que convierte el contenido de la variable
//RESULTADO en texto y lo copia en el textbox TR
private void SALIDA()
{
TR.Text = Convert.ToString(RESULTADO);
}
//Método que limpia las cajas de texto o textboxs
private void LIMPIAR()
{
TR.Clear();
TN2.Clear();
TR.Clear();
}
2. Vuelva al diseño del formulario y haga doble clic sobre el botón CALCULAR.
3. Escriba el siguiente código:

if (OPCION.SelectedItem == "SUMAR")
{
SUMAR();
}
else
if (OPCION.SelectedItem =="RESTAR")
{
RESTAR();

}
else
if (OPCION.SelectedItem =="DIVIDIR")
{
DIVIDIR();
}
else
if (OPCION.SelectedItem =="MULTIPLICAR")
{
MULTIPLICAR();
}
else
if (OPCION.SelectedItem == "POTENCIA")
{
POTENCIA();
}

4. Vuelva al formulario y haga doble clic sobre el botón NUEVO y escriba:

69
VISUAL C# APLICACIÓN Y DESARROLLO

LIMPIAR();

5. Vuelva al diseño del formulario y haga doble clic sobre el botón FINALIZA y
escriba:

Close();

6. Ejecuta el proyecto y pruébelo.

EN TIEMPO DE EJECUCIÓN:

LLAMADE DE MÉTODOS DESDE DIFERENTES CLASES

EJERCICIO CON LOS CONTROLES RADIOUTTON Y GROUPBOX

Para ejemplificar estos dos controles haremos una calculadora con un


GROUPBOX conteniendo un RADIOBUTTON por cada operación
aritmética y tres botones de comandos. La operación aritmética que se
ejecutará dependerá de la opción escogida. Cada RADIOBUTTON será
una opción y el botón de comando CALCULAR contendrá las
instrucciones para realizar cada cálculo.
CREACIÓN DEL PROYECTO
1. Inicie un nuevo proyecto y pongale el nombre de CALDULADORA CON
RADIOBUTTON.

70
VISUAL C# APLICACIÓN Y DESARROLLO

DISEÑO DE LA INTERFAZ

2. El la propiedad TEXT O TEXTO del formulario ponga USO DEL


RADIOBUTOM,GROUBOX Y LA ESTRUCTURA IF/THEN/ELSEIF.
3. El la proiedad NAME póngale FCALCULADORA.
4. Complete el diseño de acuerdo a las especificaciones de la
siguiente tabla:

CONTROL EN LA PROPIEDAD EN LA PROPIEDAD


TEXT NAME
LABEL PRIMER VALOR
LABEL SEGUNDO VALOR
LABEL RESULTADO
TEXTBOX TN1
TEXTBOX TN2
TEXTBOX TR
RADIOBUTTON CALCULAR RBCALCULAR
RADIOBUTTON LIMPIAR RBLIMPIAR
RADIOBUTTON SALIR BSALIR
GROUPBOX ESCOJA UNA OPCIÓN Y GBPCION
HAGA CLIC EN CALCULAR
RADIOBUTTON SUMAR RBSUMA

71
VISUAL C# APLICACIÓN Y DESARROLLO

CONTROL EN LA PROPIEDAD EN LA PROPIEDAD


TEXT NAME
RADIOBUTTON RESTAR RBRESTA
RADIOBUTTON MULTIPLICAR RBMULTIPLICA
RADIOBUTTON DIVIDIR RBDIVIDE
RADIOBUTTON POTENCIA RBPOTENCIA

EL FORMULARIO QUEDARÁ ASÍ:

5. En el EXPLORADOR DE SOLUCIONES, haga clic derecho sobre el


nombre del proyecto, seleccione Add y escoja Class.
6. Nombre esta clase como PROCESOS y pulse ENTER.

APARECE EL CUERPO DE LA NUEVA CLASE

72
VISUAL C# APLICACIÓN Y DESARROLLO

7. Escriba la palabra reservada public antes de class PROCESOS para


que la clase sea pública y podamos invocar sus métodos desde la
clase del formulario.

AHORA DEBE VERSE ASÍ:

8. Escriba el siguiente código:


//Declarando las propiedades de la clase
public double VALOR1, VALOR2,RESULTADO;

//Creación del método SUMAR.


public void SUMAR()
{
RESULTADO = VALOR1 + VALOR2;

}
//Creación del método RESTAR.
public void RESTAR()
{
RESULTADO = VALOR1 - VALOR2;
}
//Creación del método MULTIPLICAR.
public void MULTIPLICAR()
{
RESULTADO = VALOR1 * VALOR2;
}
//Creación del método DIVIDIR.
public void DIVIDIR()
{
RESULTADO = VALOR1 / VALOR2;
}
//Creación del método POTENCIA.
public void POTENCIA()
{
RESULTADO = Math.Pow(VALOR1,VALOR2);
}

73
VISUAL C# APLICACIÓN Y DESARROLLO

9. Vaya al diseño del formulario y entre a la ventana de código.


10. Cree una instancia de la clase PROCESOS.

DEBE VERSE ASÍ:

11. Vuelva al formulario y haga doble clic sobre el radiobutton SUMA


CON EL SIGUIENTE CÓDIGO:
//Creamos una instancia de la clase PROCESOS
PROCESOS P = new PROCESOS();

DEBE VERSE ASÍ:

12. Cree los siguientes métodos:

public void mensaje()


{
MessageBox.Show("ENTRADA INVÁLIDA. TRATE DE NUEVO");
TN1.Focus();
}
//Método que limpia las cajas de texto o textboxs
public void LIMPIAR()
{
TN1.Clear();
TN2.Clear();
TR.Clear();
}
//Creación del método que convierte el contenido de las cajas de
//de texto del formulario en núneros.
public void ENTRADA()
{
try
{ P.VALOR1 = Double.Parse(TN1.Text);
P.VALOR2 = Double.Parse(TN2.Text);
}
catch
{//Si digitó letras o no hizo entradas.
//Llamada al método mensaje que está en el formulario.
mensaje();
}
}

74
VISUAL C# APLICACIÓN Y DESARROLLO

//Creación del método que convierte el contenido de la variable


//RESULTADO en texto y lo copia en el textbox TR
public void SALIDA()
{
TR.Text = Convert.ToString(P.RESULTADO);
}

LA CLASE HASTA AHORA DEBE VERSE ASÍ:

13. Vuelva al diseño del formulario y haga doble clic sobre el


radiobutton SUMA

APARECE LO SIGUIENTE:

14. Escriba:

//Llamada al médoto ENTRADA


ENTRADA();

75
VISUAL C# APLICACIÓN Y DESARROLLO

//Llamada al método SUMAR DE LA CLASE PROCESOS


P.SUMAR();
//Llamada al médoto SALIDA
SALIDA();

15. Haga lo mismo con los demás RADIOBUTTON llamando


los métodos correspondientes.

DEBE VERSE ASÍ:

private void RBRESTA_CheckedChanged(object sender, EventArgs e)


{
//Llamada al método ENTRADA
ENTRADA();
//Llamada al método RESTAR DE LA CLASE PROCESOS
P.RESTAR();
//Llamada al método SALIDA
SALIDA();
}

private void RBMULTIPLICA_CheckedChanged(object sender, EventArgs e)


{
//Llamada al método ENTRADA
ENTRADA();
//Llamada al método MULTIPLICAR DE LA CLASE PROCESOS
P.MULTIPLICAR();
//Llamada al método SALIDA
SALIDA();
}

private void RBDIVIDE_CheckedChanged(object sender, EventArgs e)


{
//Llamada al método ENTRADA
ENTRADA();
//Llamada al método DIVIDIR DE LA CLASE PROCESOS
P.DIVIDIR();
//Llamada al método SALIDA
SALIDA();
}

private void RBPOTENCIA_CheckedChanged(object sender, EventArgs e)


{
//Llamada al método ENTRADA
ENTRADA();
//Llamada al método POTENCIA DE LA CLASE PROCESOS
P.POTENCIA ();
//Llamada al método SALIDA
SALIDA();
}
private void RBLIMPIA_CheckedChanged(object sender, EventArgs e)
{
//Llamada al método LIMPIAR

76
VISUAL C# APLICACIÓN Y DESARROLLO

LIMPIAR();
}

16. Haga doble clic sobre el formulario para abrir el procedimiento del
evento LOAD.

EL PROCEDIMIENTO SE VE ASÍ:

17. Escriba:

//INABILITAMOS LA CAJA DE TEXTO TR


//PARA IMPEDIR LA ENTRADA DE DATOS A EL
TR.Enabled = false;

AHORA SE VE ASÍ:

18. Vuelva al formulario y haga doble clic sobre el botón SALIR.


19. Escriba:

this.Close();

20. Pulse la tecla F5 para ejecutar el proyecto.

ESTE ES EL RESULTADO:

77
VISUAL C# APLICACIÓN Y DESARROLLO

ESTE ES EL RESULTADO EN CASO DE DEJAR ALGUNA CAJA DE


TEXTO SIN VALOR.

PRÁCTICA
Haga obligatoria la entrada de números en las cajas
de texto TN1 y TN2 y explique los pasos que dio para
logarlo.
PRÁCTICA

78
VISUAL C# APLICACIÓN Y DESARROLLO

A CONTINUACIÓN TE MUESTRO UN CÓDIGO PARA EL CÁLCULO DE UNA NÓMINA


DE VENDEDORES.

Se requiere que usted haga lo siguiente:


1. Crear un proyecto llamado NOMINA DE VENDEDORES I.
2. Diseñar la interfaz y dibujarla en el espacio en blanco que le
dejaré, es decir, colocar los controles de acuerdo al código y
modificar las propiedades teniendo en cuanta el código del
programa que proporciono.
3. Ejecutar y probar el programa.
4. Describir paso a paso lo que usted hace como programador y lo
que hace el programa.
5. HAGA ESTE EJERCICIO INVOCANDO MÉTODOS DESDE OTRA
CLASE.

namespace NOMINA_DE_VENDEDORES
{
public partial class FVENDEDORES : Form
{
double SUELDO, VENTA, COMISION, TG;
public FVENDEDORES()
{
InitializeComponent();
}

private void FVENDEDORES_Load(object sender, EventArgs e)


{
TCOMISION.Enabled = false;
TTG.Enabled = false;
}

private void BCALCULAR_Click(object sender, EventArgs e)


{
if (TVENTA.Text != "" & TSUELDO.Text != "")
{
SUELDO = Convert.ToDouble(TSUELDO.Text);
VENTA = Convert.ToDouble(TVENTA.Text);
if (VENTA >= 100000)
{
COMISION = VENTA * .1;
}
else
{
COMISION = VENTA * 0.05;
}

79
VISUAL C# APLICACIÓN Y DESARROLLO

TG = SUELDO + COMISION;
TCOMISION.Text = Convert.ToString(COMISION);
TTG.Text = Convert.ToString(TG);
}
else
{
MessageBox.Show("NO PUEDE DEJAR CAMPOS EN BLANCO");
TSUELDO.Focus();
}

private void BLIMPIAR_Click(object sender, EventArgs e)


{
TCODIGO.Clear();
TVENDEDOR.Clear();
TVENTA.Clear();
TSUELDO.Clear();
TCOMISION.Clear();
TTG.Clear();
TCODIGO.Focus();

private void BSALIR_Click(object sender, EventArgs e)


{
this.Close();

}
}
}

80
VISUAL C# APLICACIÓN Y DESARROLLO

FUNCIONES DE FORMATO

Las funciones de conversión juegan un papel trascendental en este


entorno de APLICACIONES WINDOWSFORMES, pues el formulario es
la interfaz desde donde el usuario introduce los datos en las cajas de
texto de entrada y recibe el resultado de las operaciones aritméticas
realizadas en los eventos de los controles. Por eso es preciso la
declaración de las variables de entrada y de salida, como cajas de texto
en el formulario, pero en los procedimientos de la ventada de código se
les debe asignar un tipo de datos específico, según la necesidad. Luego
deben convertirse las cajas de texto que sirven de entradas al tipo de
datos de las variables equivalentes que servirán de entrada para los
cálculos. Después de realizados los cálculos hay que convertir los
resultados o salidas a cadenas o string para que puedan verse en el
formulario y generalmente queremos aplicarles un formato específico

A continuación presento una lista de las funciones de formatos que


podemos usar en C3.

FUNCION FORMATO
(VARIABLE.TOSTRING(“D”)) Para números enteros (decimales).
o d MINÚSCULA
(VARIABLE.TOSTRING(“E”)) Para números en formato de
O e MINÚSCULA. exponente.
(VARIABLE.TOSTRING(“F”)) Para números reales, con parte
O f MINÚSCULA. decimal
(VARIABLE.TOSTRING(“G”)) Para formato general
O d MINÚSCULA.
(VARIABLE.TOSTRING(“N”)) Igual que F, pero con la separador
O d MINÚSCULA. de miles.
(VARIABLE.TOSTRING(“P”)) Porcentaje
O d MINÚSCULA.
(VARIABLE.TOSTRING(“R”)) Round-trip o viaje redondo, que se
O d MINÚSCULA. usa en números reales. Garantiza
que un valor numérico convertido a
string será retransformado de
vuelta sin perder información
(VARIABLE.TOSTRING(“X”)) número en formato hexadecimal
O d MINÚSCULA. (ej: 1A24C)

81
VISUAL C# APLICACIÓN Y DESARROLLO

Puedes hacer uso de los métodos Parse o ParseExact de la clase


DateTime.

Ejemplo:

DateTime fechaOriginal = DateTime.Parse("01/01/2006");


string nuevaFecha = fechaOriginal.ToString("yyyy-MM-dd");

Las funciones mencionas en la tabla anterior convierten y dan formato al


mismo tiempo.

LA FUNCION MATH
Esta función se usa para calcular las funciones trigonométricas y
matemáticas tradicionales.

FUNCIÓN MÉTODO DESCRIPCIÓN

MATH . ABS CALCULA EL VALOR ABSOLUTO DE UNA


VARIABLE NUMÉRICA O UNA EXPRESIÓN
NUMÉRICA.
MATH . ATAN CALCULA EL ARCO TANGENTE DE UNA
VARIABLE NUMÉRICA O DE NÚMERO
MATH .COS CALCULA EL COSENO DE UN ÁNGULO
MATH .POW CALCULA EL NÚMERO "E" ELEVADO A UNA
POTENCIA.
MATH .LOG CALCULA EL LOGARITMO NATURAL DE UN
NÚMERO
MATH .SIN CALCULA EL SENO DE UN ÁNGULO O
MATH .SQRT CALCULA LA RAÍZ CUADRADA DE UN NÚMERO
MATH .TAN CALCULA LA TANGENTE DE UN ÁNGULO.

EJERCICIO CON LAS FUNCIONES DE FORMATO Y LAS FUNCIONES


MATEMÁTICAS.

1. Cree un nuevo proyecto tipo WINDOWS APPLICATION FORMS


llamado FUNCIONES NUMÉRICAS.
2. En la propiedad TEXT del formulario escriba: FUNCIONES
NUMÉRICAS.
3. En la propiedad NAME escriba: FUNCIONES.
4. tome la siguiente tabla como guía para colocar los controles
necesarios para este ejercicio:

82
VISUAL C# APLICACIÓN Y DESARROLLO

CONTROL PROPIEDAD VALOR


LABEL1 TEXT ESCRIBA EL NÚMERO
LABEL2 TEXT EL RESULTADO ES:
BUTTON1 TEXT APLICAR
NAME BAPLICAR
BUTTON2 TEXT LIMPIAR
NAME BLIMPIAR
BSALIR TEXT SALIR
NAME BSALIR
GROUPBOX1 OPCIONES REOPCIONES
RADIOBUTTON1 TEXT SENO
NAME RBSENO
RADIOBUTTON2 TEXT COSENO
NAME RBCOSENO
RADIOBUTTON3 TEXT TANGENTE
NAME RBTANGENTE
RADIOBUTTON4 TEXT COTANGENTE
NAME RBCOTENGENTE
RADIOBUTTON5 TEXT ARCOTANGENTE
NAME RBARCOTANGENTE
RADIOBUTTON6 TEXT LOGARITMO
NAME RBLOGARITMO
RADIOBUTTON7 TEXT RAIZ CUADRADA
NAME RBRAIZ
RADIOBUTTON8 TEXT ACOSENO
NAME RBACOSENO
RADIOBUTTON9 TEXT ASENO
NAME RBASENO

EL FORMULARIO QUEDARÁ ASÍ:

83
VISUAL C# APLICACIÓN Y DESARROLLO

5. Haga doble clic en un área no ocupada del formulario para abrir el


procedimiento del evento LOAD.

APARECE EL SIGUIENTE PROCEDIMIENTO:

private void Form1_Load(object sender, EventArgs e)


{
TR.Enabled = false;
}
6. Escriba:

TR.Enabled = false;

Esto inhabilita la caja de texto TR para evitar que el usuario introduzca


datos en ella.

AHORA EL PROCEDIMIENTO SE VERÁ ASÍ:


private void Form1_Load(object sender, EventArgs e)
{
TR.Enabled = false;
}
7. Vuelva al diseño del formulario.
8. Haga doble clic sobre el botón APLICAR.
EL PROCEDIMIENTO SE VERA ASÍ:
private void BAPLICAR_Click(object sender, EventArgs e)
{

84
VISUAL C# APLICACIÓN Y DESARROLLO

}
9. Escriba el siguiente código:

VALOR=Convert.ToDouble(TVALOR.Text);
if (RBSENO.Checked)
R = Math.Sin(VALOR);
if (RBCOSENO.Checked)
R = Math.Cos(VALOR);
if (RBTANGENTE.Checked)
R = Math.Tan(VALOR);
if (RBARCOTANGENTE.Checked)
R = Math.Atan(VALOR);
if (RBLOGARITMO.Checked)
R = Math.Log(VALOR);
if (RBRAIZ.Checked)
R = Math.Sqrt(VALOR);
if (RBACOSENO.Checked)
R = Math.Acos(VALOR);
if (RBASENO.Checked)
R = Math.Asin(VALOR);
TR.Text=Convert.ToString(R);

AHORA EL PROCEDIMIENTO DEBE VERSE ASÍ:

private void BAPLICAR_Click(object sender, EventArgs e)


{
VALOR=Convert.ToDouble(TVALOR.Text);
if (RBSENO.Checked)
R = Math.Sin(VALOR);
if (RBCOSENO.Checked)
R = Math.Cos(VALOR);
if (RBTANGENTE.Checked)
R = Math.Tan(VALOR);
if (RBARCOTANGENTE.Checked)
R = Math.Atan(VALOR);
if (RBRAIZ.Checked)
R = Math.Sqrt(VALOR);
if (RBACOSENO.Checked)
R = Math.Acos(VALOR);
if (RBASENO.Checked)
R = Math.Asin(VALOR);
TR.Text=Convert.ToString(R);
if (RBLOGARITMO.Checked)
{
R = Math.Log(VALOR);
TR.Text = (R.ToString("G"));
}
}
10. Vuelva al formulario y haga doble clic sobre el botón LIMPIAR.
APARECE EL SIGUIENTE PROCEDIMIENTO:
private void BLIMPIAR_Click(object sender, EventArgs e)

85
VISUAL C# APLICACIÓN Y DESARROLLO

}
11. Escriba el siguiente código:
TVALOR.Clear();
TR.Clear();
TVALOR.Focus();
AHORA EL PROCEDIMIENTO SE VERÁ ASÍ:
private void BLIMPIAR_Click(object sender, EventArgs e)
{
TVALOR.Clear();
TR.Clear();
TVALOR.Focus();
}
12. Vuelva al formulario y haga doble clic sobre el botón SALIR.
13. Escriba:
this.Close();
14. Pulse LA TECLA F5 para ejecutar el programa:

86
VISUAL C# APLICACIÓN Y DESARROLLO

PRÁCTICA
HAGA EL EJERCICIO ANTERIOR USANDO MÉTODOS

USO DE LA FUNCIÓN CONVERT


Estas funciones se usan para convertir una expresión a un tipo de datos
específico.

El formato para cualquiera de estas funciones es el siguiente:

VARIABLE = FUNCIÓN (EXPRESIÓN)

Donde EXPRESIÓN puede ser un número, una cadera de caracteres, una


variable declarada previamente o una caja de texto y VARIABLE puede ser un
todo lo anterior excepto un número.

A continuación describimos las funciones y el tipo de dato que devuelve.

FUNCIÓN DESCRIPCIÓN

Convert.ToBoolean Convierte la expresión a Boolean

Convert.ToByte Convierte la expresión a Byte

Convert.ToChar Convierte la expresión a Char

Convert.ToDateTime Convierte la expresión a Date

Convert.ToDouble Convierte la expresión a Double

Convert.ToDecimal Convierte la expresión a Decimal

Convert.ToInt Convierte la expresión a Integer

Convert.ToLong Convierte la expresión a Long

Convert.ToSByte Convierte la expresión a SByte

Convert.ToShort Convierte la expresión a Short

Convert.ToSingle Convierte la expresión a Single

Convert.ToString Convierte la expresión a String

Convert.ToUInt Convierte la expresión a UInteger

87
VISUAL C# APLICACIÓN Y DESARROLLO

Convert.ToULong Convierte la expresión a ULong

Convert.ToUShort Convierte la expresión a UShort

LA INSTRUCCIÓN TRY...CATCH

La instrucción try...catch proporciona una manera de controlar algunos


o todos los errores posibles que pueden ocurrir en un bloque dado de
código, mientras todavía se ejecuta el código. Si ocurren errores que el
programador no controló, C# simplemente proporciona su mensaje de
error normal a un usuario, como si no hubiera control de errores.
El argumento Try <instrucciones< contiene código donde puede ocurrir
un error, mientras Catch<instrucciones> contiene el código para
controlar cualquier error que ocurra. Si ocurre un error en Try, el control
de programas se pasa a Catch para su disposición. El valor inicial de
excepción es el valor del error que ocurrió en Try. Si no se produce
ningún error, Catch nunca se ejecuta.
Después de ejecutar todas las instrucciones de Try y no controlar ningún
error en Catch, se ejecutan las instrucciones de instrucciones Finally
incondicionalmente.

88
VISUAL C# APLICACIÓN Y DESARROLLO

EJERCICIO DE CONVERSIÓN DE DATOS

A Continuación desarrollaremos un proyecto con el objetivo de


ejemplificar LAS FUNCIONES DE CONVERSIÓN DE DATOS y el
control de errores mediante las instrucciones TRY y CATCH.

1. Haga clic sobre la opción Create Project.

2. Escriba el nombre del proyecto en el cuadro de texto NAME. En nuestro


caso CONVERSIÓN DE DATOS.

3. Especifique la ruta donde estará ubicado el proyecto en el cuadro de texto


LOCATION.

4. Escriba el nombre de la Solución en el cuadro de texto SOLUCIÓN


NAME. En nuestro caso CONVERSIÓN DE DATOS y haga clic en el
botón SAVE O GUARDAR.

5. Tome como guía la siguiente tabla para colocar los controles dentro del
formulario con sus correspondientes propiedades:

CONTROL PROPIEDAD VALOR


FORMULARIO TEXT O TEXTO CONVERSION DE DATOS
NAME NOMBRE FCONVERSION
LABEL1 TEXT O TEXTO INTRODUZCA EL CONTENIDO A
CONVERTIR
LABEL2 TEXT O TEXTO ESTE ES EL RESULTADO
LABEL3 OTRO VALOR
TEXTBOX1 NAME NOMBRE TFUENTE
TEXTBOX2 NAME NOMBRE TR
TEXTBOX3 NAME NOMBRE TN
BUTTON1 NAME NOMBRE BDEDOBLEACADENA
TEXT O TEXTO DE DOBLE A CADENA
BUTTON2 NAME NOMBRE BDECADENAADOBLE
TEXT O TEXTO DE CADENA A DOBLE
BUTTON3 NAME NOMBRE BDEDOUBLEABYTE
TEXT O TEXTO DE DOUBLE A BYTE
BUTTON4 NAME O NOMBRE BDECADENAFECHAYHORA
TEXT O TEXTO DE CADENA FECHA Y HORA

89
VISUAL C# APLICACIÓN Y DESARROLLO

CONTROL PROPIEDAD VALOR


BUTTON5 NAME O NOMBRE BDEDOUBLEAENTERO
TEXT O TEXTO DE DOUBLE A ENTERO
BUTTON6 NAME O NOMBRE BDEENTEROALOGICO
TEXT O TEXTO DE ENTERO A LÓGICO
BUTTON7 NAME O NOMBRE BDEDECIMALADOBLE
TEXT O TEXTO DE DECIMAL A DOBLE
BUTTON8 NAME O NOMBRE BDEDOBLEASBYTE
TEXT O TEXTO DE DOBLE A SBYTE
BUTTON9 NAME O NOMBRE BDEDOBLEASIMPLE
TEXT O TEXTO DE DOBLE A SIMPLE
BUTTON10 NAME O NOMBRE BDEDOBLEAUINTEGER
TEXT O TEXTO DE DOBLE A UINTEGER
BUTTON11 NAME O NOMBRE BLIMPIAR
TEXT O TEXTO LIMPIAR
BUTTON12 NAME O NOMBRE BTERMINAR
TEXT O TEXTO TERMINAR

90
VISUAL C# APLICACIÓN Y DESARROLLO

EL FORMULARIO SE VERA ASÍ:

1. Haga doble clic sobre el botón TERMINAR.

2. Escriba:

this.Close()

EL PROCEDIMIENTO SE VERÁ ASÍ:

private void BTERMINAR_Click(object sender, EventArgs e)


{
this.Close();
}

3. Haga doble clic sobre el botón LIMPIAR.

APARECE EL SIGUIENTE PROCEDIMIENTO:

private void BLIMPIAR_Click(object sender, EventArgs e)


{

91
VISUAL C# APLICACIÓN Y DESARROLLO

4. Escriba el siguiente código:

TFUENTE.Clear();
TR.Clear();
TN.Clear();
TFUENTE.Focus();

TFUENTE.Focus()

EL PROCEDIMIENTO AHORA SE VE ASÍ:

private void BLIMPIAR_Click(object sender, EventArgs e)


{
TFUENTE.Clear();
TR.Clear();
TN.Clear();
TFUENTE.Focus();

5. Haga doble clic en cualquier parte vacía del formulario para abrir el
procedimiento LOAD.

APARECE EL SIGUIENTE PROCEDIMIENTO:


private void FCONVERSION_Load(object sender, EventArgs e)
{

6. Escriba el siguiente código:


TR.Enabled = false;
TR.Visible = false;
TN.Enabled = false;
TN.Visible = false;
LBOTRO.Visible = false;

AQUÍ DESACTIVAMOS Y OCULTAMOS LAS CAJAS DE TEXTO TR, TN Y LA


ETIQUETA LBOTRO PARA ACTIVARLAS O MOSTRARLAS CUANDO SEA
PRECISO.

EL PROCEDIMIENTO AHORA SE VERÁ ASÍ:


{
TR.Enabled = false;
TR.Visible = false;
TN.Enabled = false;
TN.Visible = false;
LBOTRO.Visible = false;

92
VISUAL C# APLICACIÓN Y DESARROLLO

7. Haga clic derecho en cualquier parte de la ventana del EDITOR DE


CÓDIGO y escoja VIEW DESIGNER O VER DISEÑADOR para volver al
diseño del formulario.

8. Haga doble clic sobre el botón DEDOBLE A STRING.

APARECE EL SIGUIENTE PROCEDIMIENTO:


private void DEDOBLEASTRING_Click(object sender, EventArgs e)
{

9. Escriba el siguiente código:


TFUENTE.Enabled = false;
double FUENTE;
FUENTE = 1235.85;
TR.Text = Convert.ToString(FUENTE);

El procedimiento completo se verá así:


private void DEDOBLEASTRING_Click(object sender, EventArgs e)
{
TFUENTE.Enabled = false;
double FUENTE;
FUENTE = 1235.85;
TR.Text = Convert.ToString(FUENTE);

10. Vuelva al diseño del formulario.

11. Haga doble clic sobre el botón DE DOBLE A BYTE.

APARECE EL SIGUIENTE PROCEDIMIENTO:

private void DEDOBLEABYTE_Click(object sender, EventArgs e)


{

12. Escriba el siguiente código:

double FUENTE;
byte R;
FUENTE = Convert.ToDouble(TFUENTE.Text);
R = Convert.ToByte(FUENTE);

TR.Text = Convert.ToString(R);

93
VISUAL C# APLICACIÓN Y DESARROLLO

EL PROCEDIMIENTO AHORA SE VERÁ ASÍ:

private void DEDOBLEABYTE_Click(object sender, EventArgs e)


{
double FUENTE;
byte R;
FUENTE = Convert.ToDouble(TFUENTE.Text);
R = Convert.ToByte(FUENTE);

TR.Text = Convert.ToString(R);

13. Vuelva al diseño del formulario.

14. Haga doble clic sobre el botón DE CADENA A FECHA Y HORA.

APARECE EL SIGUIENTE PROCEDIMIENTO:


private void DECADENAAFECHAHORA_Click(object sender, EventArgs e)
{

15. Digite el siguiente código:


DateTime FUENTE;
FUENTE = Convert.ToDateTime(TFUENTE.Text);

TR.Text = FUENTE.ToString("d");

EL PROCEDIMIENTO AHORA SE VERÁ ASÍ:

private void DECADENAAFECHAHORA_Click(object sender,


EventArgs e)
{
DateTime FUENTE;
FUENTE = Convert.ToDateTime(TFUENTE.Text);
TR.Text = FUENTE.ToString("d");
}

16. Haga doble clic sobre el botón DE DOBLE A ENTERO.

APARECE EL SIGUIENTE PROCEDIMIENTO:

private void DEDOBLEAENTERO_Click(object sender, EventArgs e)


{
}

17. Escriba el siguiente código:

94
VISUAL C# APLICACIÓN Y DESARROLLO

double FUENTE;
int R;
//Deshabilitamos el control TR.
TR.Enabled = false;
//Convertimos la el contenido de la caja de texto
// TFUENTE a doble y luego la variable local FUENTE
// a entero, al final R a cadena para que se vea el
// resultado en el formulario.
FUENTE = Convert.ToDouble(TFUENTE.Text);
R = Convert.ToInt32(FUENTE);
TR.Text = Convert.ToString(R);

EL PROCEDIMIENTO AHORA SE VERÁ ASÍ:

private void DEDOBLEAENTERO_Click(object sender, EventArgs e)


{
double FUENTE;
int R;
//Deshabilitamos el control TR.
TR.Enabled = false;
//Convertimos la el contenido de la caja de texto
// TFUENTE a doble y luego la variable local FUENTE
// a entero, al final R a cadena para que se vea el
// resultado en el formulario.
FUENTE = Convert.ToDouble(TFUENTE.Text);
R = Convert.ToInt32(FUENTE);
TR.Text = Convert.ToString(R);
}

18. Haga doble clic sobre en botón DE ENTERO A LÓGICO.

APARECE EL SIGUIENTE PROCEDIMIENTO:


private void DEENTEROABOOL_Click(object sender, EventArgs e)
{

19. Escriba el siguiente código:

private void DEENTEROABOOL_Click(object sender, EventArgs


e)
{
try
{
if (TN.Text != "")
{
int FUENTE, N;
bool R;

95
VISUAL C# APLICACIÓN Y DESARROLLO

FUENTE = Convert.ToInt32(TFUENTE.Text);
N = Convert.ToInt32(TN.Text);
R = Convert.ToBoolean(FUENTE == N);
TR.Text = Convert.ToString(R);
TR.Visible = true;
}
else
{
MessageBox.Show("ESCRIBA EL OTRO NÚMERO EN LA CAJA DE TEXTO QUE SE VERÁ AHORA");
LBOTRO.Visible = true;
TN.Visible = true;
TN.Enabled = true;
TN.Focus();
}
}
catch
{
MessageBox.Show("INTENTE CON UN NÚMEROS ENTEROS");

EL PROCEDIMIENTO AHORA SE VERÁ ASÍ:


private void DEENTEROABOOL_Click(object sender, EventArgs e)
{
try
{
if (TN.Text != "")
{
int FUENTE, N;
bool R;
FUENTE = Convert.ToInt32(TFUENTE.Text);
N = Convert.ToInt32(TN.Text);
R = Convert.ToBoolean(FUENTE == N);
TR.Text = Convert.ToString(R);
TR.Visible = true;
}
else
{
MessageBox.Show("ESCRIBA EL OTRO NÚMERO EN LA CAJA DE TEXTO QUE SE VERÁ AHORA");
LBOTRO.Visible = true;
TN.Visible = true;
TN.Enabled = true;
TN.Focus();
}
}
catch
{
MessageBox.Show("INTENTE CON UN NÚMEROS ENTEROS");

96
VISUAL C# APLICACIÓN Y DESARROLLO

20. Haga doble clic sobre el botón DE DECIMAL A DOBLE.

APARECE EL SIGUIENTE PROCEDIMIENTO:


private void DEDECIMALADOBLE_Click(object sender, EventArgs e)
{

21. Escriba el siguiente código:


decimal FUENTE;
double R;
FUENTE = Convert.ToDecimal(TFUENTE.Text);
R = Convert.ToDouble(FUENTE);
TR.Text = Convert.ToString(R);
TR.Visible = true;

EL PROCEDIMIENTO AHORA SE VERA ASÍ:


private void DEDECIMALADOBLE_Click(object sender, EventArgs e)
{
decimal FUENTE;
double R;
FUENTE = Convert.ToDecimal(TFUENTE.Text);
R = Convert.ToDouble(FUENTE);
TR.Text = Convert.ToString(R);
TR.Visible = true;

22. Haga doble clic sobre el botón DE DOBLE A SBYTE.

APARECE EL SIGUIENTE PROCEDIMIENTO:

private void DEDOBLEASBYTE_Click(object sender, EventArgs e)


{

23. Escriba el siguiente código:


double FUENTE;
sbyte R;
FUENTE=Convert.ToDouble(TFUENTE.Text);
R = Convert.ToSByte(FUENTE);
TR.Text = Convert.ToString(R);
TR.Visible = true;

97
VISUAL C# APLICACIÓN Y DESARROLLO

EL PROCEDIMIENTO AHORA SE VERA ASÍ:


private void DEDOBLEASBYTE_Click(object sender, EventArgs e)
{
double FUENTE;
sbyte R;
FUENTE=Convert.ToDouble(TFUENTE.Text);
R = Convert.ToSByte(FUENTE);
TR.Text = Convert.ToString(R);
TR.Visible = true;
}

24. Haga doble clic sobre el botón DE ENTERO A CHAR.

APARECE EL SIGUIENTE PROCEDIMIENTO:


private void DEENTEROACHAR_Click_1(object sender, EventArgs e)
{

25. Escriba el siguiente código:


int FUENTE;
char R;
try
{
FUENTE = Convert.ToInt32(TFUENTE.Text);
R = Convert.ToChar(FUENTE);
TR.Text = Convert.ToString(R);
TR.Visible = true;
}

catch
{
MessageBox.Show("EL NÚMERO QUE INTRODUJO ES IN CORRECTO");
TFUENTE.Focus();
}

EL PROCEDIMIENTO AHORA SE VE ASÍ:


private void DEENTEROACHAR_Click_1(object sender, EventArgs e)
{
int FUENTE;
char R;
try
{
FUENTE = Convert.ToInt32(TFUENTE.Text);
R = Convert.ToChar(FUENTE);
TR.Text = Convert.ToString(R);
TR.Visible = true;

98
VISUAL C# APLICACIÓN Y DESARROLLO

catch
{
MessageBox.Show("EL NÚMERO QUE INTRODUJO ES IN CORRECTO");
TFUENTE.Focus();
}

26. Haga doble clic sobre el botón DE DOBLE A SIMPLE.

APARECE EL SIGUIENTE PROCEDIMIENTO:

private void DEDBLEASIMPLE_Click(object sender, EventArgs e)


{

27. Escriba el siguiente código:

double FUENTE;
Single R;
FUENTE = Convert.ToDouble(TFUENTE.Text);
R = Convert.ToSingle(FUENTE);
TR.Text = Convert.ToString(R);
TR.Visible = true;

EL PROCEDIMIENTO AHORA SE VE ASÍ:

private void DEDBLEASIMPLE_Click(object sender, EventArgs e)


{
double FUENTE;
Single R;
FUENTE = Convert.ToDouble(TFUENTE.Text);
R = Convert.ToSingle(FUENTE);
TR.Text = Convert.ToString(R);
TR.Visible = true;

28. Vuelva al diseño del formulario.

29. Haga doble clic sobre el botón DE DOBLE A UNINTEGER.

APARECE EL SIGUIENTE PROCEDIMIENTO:


private void BDEDOBLEAUNINTEGER_Click(object sender, EventArgs e)
{

99
VISUAL C# APLICACIÓN Y DESARROLLO

30. Escriba el siguiente código:


double FUENTE;
uint R;
try
{
FUENTE = Convert.ToDouble(TFUENTE.Text);
R = Convert.ToUInt32(FUENTE);
TR.Text = Convert.ToString(R);
TR.Visible = true;
}
catch
{
MessageBox.Show("EL NÚMERO QUE INTRODUJO ES IN CORRECTO");
TFUENTE.Focus();
}

EL PROCEDIMIENTO AHORA SE VE ASÍ:


private void BDEDOBLEAUNINTEGER_Click(object sender, EventArgs e)
{

double FUENTE;
uint R;
try
{
FUENTE = Convert.ToDouble(TFUENTE.Text);
R = Convert.ToUInt32(FUENTE);
TR.Text = Convert.ToString(R);
TR.Visible = true;
}
catch
{
MessageBox.Show("EL NÚMERO QUE INTRODUJO ES IN CORRECTO");
TFUENTE.Focus();
}

100
VISUAL C# APLICACIÓN Y DESARROLLO

PRÁCTICA
 HAGA EL EJERCICIO ANTERIOR USANDO MÉTODOS
Y CLASES.

 Aplique el control de errores a los procedimientos


que no lo tienen, del ejercicio anterior, usando las
instrucciones Try..Catch.

101
VISUAL C# APLICACIÓN Y DESARROLLO

LAS FUNCIONES DE VISUAL C#


Las funciones propias del lenguaje que permiten trabajar con cadenas
de caracteres, con números, fechas, horas, presentar mensajes en
pantalla y muchas otras funciones para formatear datos específicos. En
esta lección veremos las funciones más usadas.

FUNCIONES PARA CALCULAR FECHAS

Visual C# cuenta con una serie de funciones que nos permiten calcular
fechas y horas, por ejemplo generar un intervalo de fechas, sumar y
restar fechas y horas y otras operaciones y cálculos.

Estas son las funciones de fecha:

DateAdd : Devuelve un Variant que contiene una fecha que indica el


intervalo de tiempo que se ha agregado.

El siguiente código añade 25 años a la fecha actual:

MSGBOX DATEADD(“YYYY”, 25 , DATE)

El siguiente código añade 30 meses a la fecha actual:

MSGBOX DATEADD(“M”, 30 , DATE)

El siguiente código añade 300 días a la fecha actual:

MSGBOX DATEADD("Y", -1, DATE)

DatePart : Devuelve una parte específica de una fecha dada

DateDiff: Devuelve el número de intervalos de tiempo entre dos fechas


determinadas

DateSerial: Devuelve un valor Date para un año, mes y día


determinados

EJERCICIO PARA CALCULAR LA EDAD

La función de fecha más idónea para calcular la edad de una persona o


los años trascurridos entre dos períodos es DateDiff.

102
VISUAL C# APLICACIÓN Y DESARROLLO

1. Cree un nuevo proyecto WINDOWS APPLICATION FORMS y


póngale por nombre: CALCULAR EDAD.

2. En la propiedad TEXT O TEXTO del formulario escriba: CALCULO


DE EDAD O AÑOS TRASCURRIDOS ENTRE DOS PERIODOS.
3. En la propiedad NAME O NOMBRE del formulario escriba: FEDAD.
4. Añada los componentes y cambie sus propiedades de acuerdo a la
siguientes tabla:

CONTROL PROPIEDAD VALOR


LABEL1 TEXT O TEXTO INTRODUZCA SU FECHA
DE NACIMIENTO
LABEL2 TEXT O TEXTO LA FECHA ACTUAL ES
LABEL3 TEXT O TEXTO EDAD
TEXBOX1 NAME O NOMBRE TFECHANAC
TEXBOX2 NAME O NOMBRE TFECHAACT
TEXBOX3 NAME O NOMBRE TEDAD
LOCKED TRUE
ENABLE FALSE
BUTTON1 TEXT O TEXTO CALCULAR EDAD
NAME O NOMBRE BCALCULAREDAD

EL FORMULARIO QUEDARA ASÍ:

5. Haga doble clic sobre el botón CALCULAR EDAD.

103
VISUAL C# APLICACIÓN Y DESARROLLO

APARECE EL SIGUIENTE PROCEDIMIENTO:

private void BALCULAEDAD_Click(object sender, EventArgs e)


{

}
6. Escriba el siguiente código:
DateTime FECHANAC;
DateTime FECHAACT;
FECHANAC = Convert.ToDateTime(TFECHANAC.Text);
FECHAACT = DateTime.Today;
int EDAD = DateTime.Now.Year - FECHANAC.Year;
TFECHAACT.Text = FECHAACT.ToString("d") ;
TEDAD.Text = Convert.ToString(EDAD) + " AÑOS";

7. Vuelva al diseño del formulario.


8. Haga doble clic sobre el botón TERMINAR.

APARECE EL SIGUIENTE PROCEMIMIENTO:

Private Sub BTERMINAR_Click(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles BTERMINAR.Click

End Sub
9. Escriba:
End

ESTE ES EL CÓDIGO COMPLETO DEL PROGRAMA:


private void BALCULAEDAD_Click(object sender, EventArgs e)
{
DateTime FECHANAC;
DateTime FECHAACT;

FECHANAC = Convert.ToDateTime(TFECHANAC.Text);
FECHAACT = DateTime.Today;
int EDAD = DateTime.Now.Year - FECHANAC.Year;
TFECHAACT.Text = FECHAACT.ToString("d") ;
TEDAD.Text = Convert.ToString(EDAD) + " AÑOS";
// TEDAD.Text = TEDAD.Text + "AÑOS";

10. Pulse la tecla F5 para ejecutar y probar el programa.


11. Escriba la fecha renacimiento en formato BRITÁNICO:
MES/DIA/AÑO.
12. Haga igual con la fecha actual.
13. Haga clic sobre el botón CALCULAR FECHA.

104
VISUAL C# APLICACIÓN Y DESARROLLO

PRÁCTICA:

1. AÑADA UN BOTÓN LLAMADO LIMPIAR AL FORMULARIO Y


PROGRÁMELO.
CUANDO USTED HAGA CLIC SOBRE EL BOTÓN LIMPIAR SE BORRARAN
LA FECHA DE NACIMIENTO, FECHA ACTUAL Y LA EDAD.
2. HAGA QUE LA FECHA ACTUAL SE MUESTRE EN EL CUADRO DE
TEXTO TFA.
3. ESCRIBA AQUÍ LOS PASOS QUE DIO Y EL CÓDIGO QUE ESCRIBIÓ.

105
VISUAL C# APLICACIÓN Y DESARROLLO

ACCESO A DATOS
USO DE ENTITYFRAMEWORK Y LINQ
Entity Framework aparece por primera vez con el Netframwork 3.5 Service Pack 1
DE Visual Studio 2008 y con el Visual Studio 2010 se lanza la versión 4.4. Entity
Framework es un conjunto de APIS o tecnologías, desarrolladas por la Microsoft,
que pertenece ADO.NET con el objetivo de que los desarrolladores puedan crear
soluciones de programas informáticos orientadas a datos.

Con Entity Framework es posible trabajar con datos en forma de objetos y


propiedades sin tener que preocuparse por las tablas y columnas de la base de
datos subyacente donde se almacenan estos datos. Esto reduce la cantidad de
código como en las tecnologías de acceso a datos tradicionales, logrando así una
mayor claridad y facilidad de mantenimiento de las aplicaciones.

LINQ abreviatura de Language-Integrated Query o Lenguaje Integrado de


Consulta es un componente de .NET que consiste en un conjunto de características
que permite realizar consultas enficientes y eficaces, y con pocos códigos, a los

106
VISUAL C# APLICACIÓN Y DESARROLLO

lenguajes de la Plataforma .NET. LINQ no sólo permite hacer consultas sino que
además es posible actualizar datos con excelentes estándares de fácil aprendizaje e
implementación. “Visual Studio incluye ensamblados de proveedores para
LINQ que habilitan el uso de LINQ con colecciones de .NET Framework, bases de
datos SQL Server, conjuntos de datos de ADO.NET y documentos XML”. Linq,
aparece con Visual Studio 2008.
En esta sección desarrollaremos un ejercicio con el objetivo de
demostrar el uso de ENTITYFRAMEWORK y LINQ. Para esto
crearemos una base de datos con SQL SERVER.

CREACION DE LA BASE DE DATOS

ESCRIBIR AQUÍ LOS PASOS


CODIGOS PARA LA CREACIÒN DE LA BASE DE DATOS
1. Inicie SQL SERVER.

2. Haga clic sobre el botón New Query o Nueva Consulta.


3. En la ventana que se abre a la derecho escriba el siguiente código:

CREATE DATABASE SCXP

USE [SCXP]

CREATE TABLE [dbo].[PROVEEDORES](


[CODIGO] [varchar](7)PRIMARY KEY,
[NOMBRES] [varchar](25) NOT NULL,
[APELLIDOS] [varchar](25) NOT NULL,
[DIRECCION] [varchar](35) NULL,
[CIUDAD] [varchar](25) NULL,
[TELEFONO] [varchar](13) NULL

107
VISUAL C# APLICACIÓN Y DESARROLLO

--TABLA FACTURAS

CREATE TABLE [dbo].[FACTURAS](


[NUMERO_FACTURA] [int]PRIMARY KEY,
[CODIGO] [varchar](7) NOT NULL,
[VALOR_FACTURA] [money] NULL,
[FECHA_FACTURA] [datetime] NULL,
[FECHA_VENCIMIENTO] [datetime] NULL
)
--RELACIÓN DE LA TABLA FACTURAS CON LA TABLA PROVEEDORES.
ALTER TABLE [dbo].[FACTURAS] WITH CHECK ADD FOREIGN
KEY([CODIGO])
REFERENCES [dbo].[PROVEEDORES] ([CODIGO])
ON UPDATE CASCADE
ON DELETE CASCADE
GO

--TABLA CHEQUES
CREATE TABLE [dbo].[CHEQUES](
[NUMERO_CHEQUE] [int] NOT NULL,
[NUMERO_FACTURA] [int] NOT NULL,
[VALOR_CHEQUE] [money] NULL,
[FECHA_CHEQUE] [datetime] NULL,
CONSTRAINT [PK_CHEQUES] PRIMARY KEY CLUSTERED
(
[NUMERO_CHEQUE] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS
= ON) ON [PRIMARY]
) ON [PRIMARY]

GO
--RELACIÓN DE LA TABLA CHEQUES CON LA TABLA FACTURAS

ALTER TABLE [dbo].[CHEQUES] WITH CHECK ADD FOREIGN


KEY([NUMERO_FACTURA])
REFERENCES [dbo].[FACTURAS] ([NUMERO_FACTURA])
ON UPDATE CASCADE
ON DELETE CASCADE
GO

--TABLA USUARIOS

CREATE TABLE [dbo].[USUARIOS](


[USUARIO] [nvarchar](20)PRIMARY KEY,

108
VISUAL C# APLICACIÓN Y DESARROLLO

[CLAVE] [nvarchar](15) NULL


)
--INSERTAR LOS DATOS DE LOS USUARIOS
INSERT INTO USUARIOS (USUARIO,CLAVE) VALUES ('FRANK','YOSOY')
INSERT INTO USUARIOS (USUARIO,CLAVE) VALUES ('ANNERYS','GIGI')
INSERT INTO USUARIOS (USUARIO,CLAVE) VALUES ('DARIANNY','DARY')
INSERT INTO USUARIOS (USUARIO,CLAVE) VALUES ('CAROLINA','CARO')
INSERT INTO USUARIOS (USUARIO,CLAVE) VALUES ('YANNERYS','RUBIA')

--VISTA ESTADO DE CUENTAS


SELECT DISTINCT
dbo.PROVEEDORES.CODIGO, dbo.PROVEEDORES.NOMBRES,
dbo.PROVEEDORES.APELLIDOS, dbo.FACTURAS.NUMERO_FACTURA,
SUM(dbo.FACTURAS.VALOR_FACTURA) AS MONTO,
SUM(dbo.CHEQUES.VALOR_CHEQUE) AS PAGOS,
SUM(dbo.FACTURAS.VALOR_FACTURA -
dbo.CHEQUES.VALOR_CHEQUE) AS BALANCE
FROM dbo.PROVEEDORES INNER JOIN
dbo.FACTURAS ON dbo.PROVEEDORES.CODIGO =
dbo.FACTURAS.CODIGO AND dbo.PROVEEDORES.CODIGO =
dbo.FACTURAS.CODIGO INNER JOIN
dbo.CHEQUES ON dbo.FACTURAS.NUMERO_FACTURA =
dbo.CHEQUES.NUMERO_FACTURA
GROUP BY dbo.PROVEEDORES.CODIGO, dbo.PROVEEDORES.NOMBRES,
dbo.PROVEEDORES.APELLIDOS, dbo.FACTURAS.VALOR_FACTURA,
dbo.CHEQUES.VALOR_CHEQUE,
dbo.FACTURAS.NUMERO_FACTURA

CREACIÓN DEL PROYECTO


1. Entre a Visual Studio y cree un proyecto WINDOWS FORM
APPLICATION llamado CUENTAS POR PAGAR.
2. Añada los controles necesarios para que el formulario que es
creado junto con el proyecto quede como ilustra la siguiente
figura:

109
VISUAL C# APLICACIÓN Y DESARROLLO

Los Textbox tendrán como nombres TUSUARIO y TCLAVE,


respectivamente, el formulario FINICIO , el botón BENTRADA y el
DataGridView DAGVUSUARIOS.
3. Añada otro formulario y nómbrelo como FMENUPRI.
4. Añada un control MenuStrip de la caja de herramientas o ToolBox.
5. Construya el menú acorde a la siguientes ilustraciones:

EL MENÚ PROVEEDORES

EL MENÚ FACTURAS

110
VISUAL C# APLICACIÓN Y DESARROLLO

EL MENÚ CHEQUES

6. Añada un nuevo formulario y nómbrelo como FPROVEEDORES


7. En la propiedad Text del formulario ponga MANTENIMIENTO DE
PROVEEDORES.
8. En la propiedad Name ponga FPROVEEDORES.
9. Añada dos formularios más uno llamado FAGREGARPROV y otro
FMODIFICARPROV y en la propiedad Text le pondrá
REGISTRAR DATOS DE PROVEEDORES y MODIFICAR DATOS
DE PROVEEDORES respectivamente.

La figura anterior muestra el formulario maestro de control con


respecto a los proveedores y contendrá los siguientes controles:

 El DATAGRIDVIEW DGVPROVEEDORES donde se


 mostrarán los datos de los proveedores existentes.
 Una Etiqueta o Label con el texto BUSCAR
PROVEEDORES POR:
 Un Panel dentro del cual colocaremos todas las cajas de
texto o Texboxs y etiquetas o Labels.
 Una etiqueta (Label) que pedirá el nombre del proveedor.

111
VISUAL C# APLICACIÓN Y DESARROLLO

 El Textbox TCODIGO en el que se escribirá el código del


proveedor que se desea encontrar.
 El Textbox TNOMBRE en el que se escribirá el nombre
del proveedor que se desea encontrar.
 El Textbox TAPELLIDO en el que se escribirá el apellido
del proveedor que se desea encontrar.
 El Textbox TDIRECCIÓN en el que se escribirá la
dirección del proveedor que se desea encontrar.
 El Textbox TCIUDAD en el que se escribirá el nombre de
la ciudad del proveedor que se desea encontrar.
 El Textbox TTELEFONO en el que se escribirá el número
del teléfono del proveedor que se desea encontrar.
 El botón AGREGAR para insertar nuevos proveedores
 El botón MODIFICAR para hacer cambios a los datos de
los proveedores.
 El botón ELIMINAR que nos permitirá borrar un proveedor.

10. Ahora vuelva al diseño del formulario FPROVEEDORES.


11. Añada los controles indicados arriba.

EL FORMULARIO QUEDARÁ ASÍ:

112
VISUAL C# APLICACIÓN Y DESARROLLO

DISEÑO DE LA INTERFAZ GRÁFICA DEL FORMULARIO DE


ADICIÓN DE PROVEEDORES

12. Vaya el diseño del formulario FAGREGARPROV.

La figura anterior muestra el formulario que se usará para


insertar nuevos proveedores y contendrá los siguientes
controles:

 El botón AGREGAR para añadir el proveedor y cerrar


volver al formulario FRPVEEDORES con la actualización.
 Seis etiquetas (Label) con los siguientes textos:
 CÓDIGO
 NOMBRES
 APELLIDOS
 DIRECCIÓN
 CIUDAD
 TELÉFONO
 Seis TEXTBOX O CAJAS DE TEXTO con los siguientes
nombres:
 TCODIGO
 TNOMBRES
 TAPELLIDOS
 TDIRECCION

113
VISUAL C# APLICACIÓN Y DESARROLLO

 TCIUDAD
 TTELÉFONO
13. Añada los controles arriba indicados.
EL FORMULARIO QUEDARÁ ASÍ:

14. Seleccione cada TextBoxs y cambie el tamaño en la propiedad


MaxLength como sigue:
 TCODIGO :7
 TNOMBRES:25
 TAPELLIDOS:25
 TDIRECCIÓN:35
 TCIUDAD :25
 TTELEFONO :13

Hemos modificado el tamaño de la propiedad MaxLength de cada


caja de texto de acuerdo al tamaño que tienen los campos
equivalentes en la tabla PROVEEDORES base de datos. De esta
forma, al momento de escribir los valores no se permitirá la
inserción de más caracteres sin necesidad de programarlos
mediante código.
DISEÑO DE LA INTERFAZ GRÁFICA DEL FORMULARIO DE
MODIFICACIÓN DE PROVEEDORES
15. Vaya al formulario FMODIFICARPROV.

114
VISUAL C# APLICACIÓN Y DESARROLLO

La figura anterior muestra el formulario que se usará para


modificar proveedores contendrá los siguientes controles:

 El botón ACTUALIZAR para hacer la búsqueda de


proveedores.
 Seis etiquetas (Label) con los siguientes textos:
 CÓDIGO
 NOMBRES
 APELLIDOS
 DIRECCIÓN
 CIUDAD
 TELÉFONO
 Seis TEXTBOX O CAJAS DE TEXTO con los siguientes
nombres:
 TCODIGO
 TNOMBRES
 TAPELLIDOS
 TDIRECCION
 TCIUDAD
 TTELÉFONO
16. Añada los controles arriba indicados.

EL FORMULARIO QUEDARÁ ASÍ:

115
VISUAL C# APLICACIÓN Y DESARROLLO

17. Seleccione cada TextBoxs y cambie el tamaño en la propiedad


MaxLength como sigue:
 TCODIGO :7
 TNOMBRES:25
 TAPELLIDOS:25
 TDIRECCIÓN:35
 TCIUDAD :25
 TTELEFONO :13
Hemos modificado el tamaño de la propiedad MaxLength de cada
caja de texto de acuerdo a la longitud que tienen los campos
equivalentes en la tabla PROVEEDORES base de datos. De esta
forma, al momento de escribir los valores no se permitirá la
inserción de más caracteres sin necesidad de programarlos
mediante código.

CREACIÓN DEL MODELO CONCEPTUAL DE LA BASE DE DATOS


18. En el Explorador de Soluciones haga clic derecho sobre el nombre
del proyecto CUENTAS POR PAGAR, seleccione Add y escoja New
Item como muestra la siguiente figura:

116
VISUAL C# APLICACIÓN Y DESARROLLO

19. En el cuadro de texto Add New Item-CUENTAS POR PAGAR,


escoja ADO.NET Entity Data Model y en el cuadro de texto
Name escriba CXPModel y haga clic sobre el botón Add.

117
VISUAL C# APLICACIÓN Y DESARROLLO

20. En el cuadro de diálogo Entity Data Model Wizard, escoja


Generate From Database y haga clic sobre el botón NEXT O
SIGUIENTE.

ESTO ES PARA GENERAR MODELO DE DATOS DESDE LA BASE


DE DATOS DE SQL SERVER QUE SE ESCOGEREMOS MAS
ADELANTE.

21. En el cuadro de diálogo Connection Properties haga clic sobre el


botón New Connection, luego sobre el botón Change y escoja
Microsoft SQL Server (SqlClient).

118
VISUAL C# APLICACIÓN Y DESARROLLO

119
VISUAL C# APLICACIÓN Y DESARROLLO

22. En el cuadro de lista desplegable Server Name escriba o escoja el


nombre del servidor o simplemente ponga punto (.) para que
asuma el nombre del servidor local.
23. En el cuadro de lista desplegable Selecto enter a database
name escoja la base de datos SCXP.
24. Haga clic sobre el botón Test Connection.

El siguiente mensaje indica que la conexión a la base de datos es


exitosa:

25. Haga clic sobre el botón OK.

26. En el siguiente cuadro de diálogo asegúrese que la opción Save


entity connection settings in App.Config as: esta marcada.
Esto es para que guarde la cadena de conexión con el nombre
indicado en el cuadro de texto que sigue a esta opción en un
archivo llamado App.Config.

27. Haga clic sobre el botón Next o siguiente.

120
VISUAL C# APLICACIÓN Y DESARROLLO

28. Seleccione la opción Pluralize or Singularize generate objetc


names para que los nombres en plural estén en singular y
viceversa.
29. Seleccione todas las tablas, vistas y los procedimientos
almacenados de la base de datos, luego haga clic sobre el botón
Finish.

ESTE ES EL MODELO CREADO CON CADA TABLA COMO UNA


ENTIDAD:

121
VISUAL C# APLICACIÓN Y DESARROLLO

CREACION DE LAS CLASES

30. Añada tres clases al proyecto con los siguientes nombres:


a. DATOSPROVEEDORES
b. DATOSFACTURAS
c. DATOSCHEQUES
d. DATOSUSUARIOS
e. DATOSESTADOSDECUENTAS

Para lograrlo hacemos clic derecho sobre el nombre del


proyecto (CUENTAS POR PAGAR), seleccionamos Add y
escogemos Class como muestra la siguiente figura:

122
VISUAL C# APLICACIÓN Y DESARROLLO

ASÍ SE VE EL EXPLORADOR DE SOLUCIONES AHORA:

PROGRAMACIÓN DE LA CLASE DATOSDEUSUARIOS


31. Haga doble clic sobre la clase DATOSUSUARIOS.

APARECE LA ESTRUCTURA DE LA CLASE

123
VISUAL C# APLICACIÓN Y DESARROLLO

32. Escriba el siguiente código:


public static List<USUARIOS> MOSTRAR()
{
/*USAMOS LINQ. PARA BUSCAR UN USUARIO POR EL NOMBRE
EMPEZANDO CON CUALQUIER LETRA*/
using (SCXPEntities BD = new SCXPEntities())
{
var INFO = (from U in BD.USUARIOS
select U).ToList();
return INFO;
}
}

public static List<USUARIOS> BUSCARPORUSUARIO(string usuario)


{
/*USAMOS LINQ. PARA BUSCAR UN USUARIO POR EL NOMBRE
EMPEZANDO CON CUALQUIER LETRA*/
using (SCXPEntities BD = new SCXPEntities())
{
var INFO = (from U in BD.USUARIOS
where U.USUARIO.StartsWith(usuario)
select U).ToList();
return INFO;
}
}
public static List<USUARIOS> BUSCARPORCLAVE(string clave)
{
/*USAMOS LINQ. PARA BUSCAR UN USUARIO POR EL NOMBRE
EMPEZANDO CON CUALQUIER LETRA*/
using (SCXPEntities BD = new SCXPEntities())
{
var INFO = (from U in BD.USUARIOS
where U.CLAVE.StartsWith(clave)
select U).ToList();
return INFO;
}
}
}

LA CLASE DEBE VERSE ASÍ:

124
VISUAL C# APLICACIÓN Y DESARROLLO

33. Vuelva al diseño del formulario FINICIO.


34. Haga clic derecho en un área desocupada del formulario y declare
dos variables debajo del nombre de la clase como ilustra la
siguiente figura:

35. Vuelva al diseño del formulario y haga doble clic en un área


desocupada del formulario para abrir el evento Load.
36. Escriba el siguiente código:
//Para mostrar los datos de los usuarios

125
VISUAL C# APLICACIÓN Y DESARROLLO

DGVUSUARIOS.DataSource = DATOSUSUARIOS.MOSTRAR();
//Para ocultar la clave.
DGVUSUARIOS.Columns[1].Visible = false;
//Disfrazar los caracteres escritos en el TextBox TCLAVE
TCLAVE.PasswordChar = '*';

EL EVENTO DEBE VERSE ASÍ:

37. Vuelva al diseño del formulario y haga doble clic sobre el botón
ENTRAR.
38. Escriba el siguiente código:
try
{
DataGridViewRow FILA= DGVUSUARIOS.CurrentRow;
//Para copiar los valores de las columnas en las variables US y CL
string US=Convert.ToString(FILA.Cells[0].Value);
string CL = Convert.ToString(FILA.Cells[1].Value);
//Para validar el usuario y la contraseña
if (TUSUARIO.Text == US & TCLAVE.Text == CL)
{
FMENUPRI FP =new FMENUPRI();
FP.Show();
}
else
{
//Si dejó los campos en blanco.
MessageBox.Show("DEBE ESCRIBIR EL NOMBRE DEL USUARIO Y CONTRASEÑA
INVÁLIDOS");
}
}
catch
{
//Si el usuario o la contraseña no coinciden o son incorrectos
MessageBox.Show("USUARIO O CONTRASEÑA INVÁLIDOS");
TUSUARIO.Focus();

126
VISUAL C# APLICACIÓN Y DESARROLLO

}
EL EVENTO DEBE VERSE ASÍ:

39. Vuelva al diseño del formulario y haga doble clic sobre el TextBox
Tusuario.
40. Escriba el siguiente código:
//Para invocar el método BUSCAR USUARIO
DGVUSUARIOS.DataSource = DATOSUSUARIOS.BUSCARPORUSUARIO(TUSUARIO.Text);

EL EVENTO DEBE VERSE ASÍ:

41. Vuelva al diseño del formulario y haga doble clic sobre el TextBox
Tclave.
42. Escriba el siguiente código:
//Para invocar el método BUSCAR CLAVE
DGVUSUARIOS.DataSource = DATOSUSUARIOS.BUSCARPORCLAVE(TUSUARIO.Text);

EL EVENTO DEBE VERSE ASÍ:

127
VISUAL C# APLICACIÓN Y DESARROLLO

43. Pulse la tecla F5 para ver probar la validación del usuario y la


contraseña.

SI DIÓ CLIC SOBRE EL BOTÓN ACEPTAR SIN ESCRIBIR


USUARIO O CONTRASEÑA:

SI EL NOMBRE DE USUARIO O LA CONTRASEÑA SON


INCORRECTOS:

SI AMBOS SON CORRECTOS APARECE EL MENÚ PRINCIPAL:

128
VISUAL C# APLICACIÓN Y DESARROLLO

PROGRAMACIÓN DE LA CLASE DATOSPROVEERORES

Dentro de esta clase haremos lo siguiente:


 Crear un método que nos devuelva una lista de
tipo PROVEEDORES.
 Dentro del método crearemos una instancia de nuestro
modelo
 Crear la consulta usando linq la cual nos mostrará
todos los registros existentes en la tabla
PROVEEDORES.
 Crear un segundo método que nos permita buscar un
proveedor por el nombre.
44. Haga doble clic sobre la clase DATOSPROVEEDORES.
45. Ponga Public antes de la palabra reservada class para que la clase
sea pública y sus métodos puedan ser invocados desde otras clases
del proyecto.

ESTA ES LA ESTURCTURA DE LA CLASE QUE ESTA VACÍA:

129
VISUAL C# APLICACIÓN Y DESARROLLO

CREACION DE MÉDOTOS DE RECUPERACIÓN Y BUSQUEDA


46. Escriba el siguiente código:
// EL SIGUIENTE MÉDOTO MUESTRA TODOS LOS PROVEEDORES
public static List<PROVEEDORES> MOSTRARDATOS()
{
//ESTA ES UNA INSTANCIA DE NUESTRO MODELO DE LA BASE DE DATOS
using (SCXPEntities BD = new SCXPEntities())
{
var INFO = (from P in BD.PROVEEDORES
select P).ToList();

return INFO;
}
}
public static List<PROVEEDORES> BUSCARPORCODIGO(string codigo)
{
using (SCXPEntities BD = new SCXPEntities())
{
/*USAMOS LINQ. PARA BUSCAR UN PROVEEDOR POR LA DIRECCIÓN
EMPEZANDO CON CUALQUIER LETRA*/
var INFO = (from P in BD.PROVEEDORES
where P.CODIGO.StartsWith(codigo)
select P).ToList();
/*StartsWith HACE QUE VAYA MOSTRANDO LOS PROVEEDORES QUE
EMPIEZEN CON LAS LETRAS QUE VAMOS ESCRIBIENDO*/
return INFO;
}
}
public static List<PROVEEDORES> BUSCARNOMBRES(string nombres)
{
using (SCXPEntities BD = new SCXPEntities())
{
var INFO = (from P in BD.PROVEEDORES
where P.NOMBRES.StartsWith(nombres)
select P).ToList();
return INFO;
}
}
public static List<PROVEEDORES> BUSCARPORAPELLIDOS(string apellidos)
{
using (SCXPEntities BD = new SCXPEntities())
{
var INFO = (from P in BD.PROVEEDORES
where P.APELLIDOS.StartsWith(apellidos)
select P).ToList();
return INFO;
}
}
public static List<PROVEEDORES> BUSCARPORDIRECCION(string direccion)
{
using (SCXPEntities BD = new SCXPEntities())
{
var INFO = (from P in BD.PROVEEDORES

130
VISUAL C# APLICACIÓN Y DESARROLLO

where P.DIRECCION.StartsWith(direccion)
select P).ToList();
return INFO;
}
}
public static List<PROVEEDORES> BUSCARPORCIUDAD(string ciudad)
{
using (SCXPEntities BD = new SCXPEntities())
{
var INFO = (from P in BD.PROVEEDORES
where P.CIUDAD.StartsWith(ciudad)
select P).ToList();
return INFO;
}
}

Los dos métodos anteriores se usan, el primero para mostrar todos


los proveedores y los que siguen para buscar un proveedor por
cualquier campo e ir mostrando los proveedores que empiezan con
la letra que escribimos.

Aún faltan los métodos que nos permitirán agregar, eliminar y


modificar proveedores.

CREACIÓN DEL MÉDOTO INSERTAR UN NUEVO PROVEEDOR

El siguiente código crea un método que recibe los parámetros acorde a


los campos de la tabla PROVEEDORES para agregar registros.

Dentro del método creamos una instancia del modelo de la base de


datos y luego usamos el método AddObject para agregar un nuevo
objeto, que en este caso es un registro, de tipo PROVEEDORES y
guardamos los datos en nuestra base de datos (BD)con el método
SaveChanges o guardar cambios.
Escriba el siguiente código:
//EL SIGUIENTE MÉTODO AÑADE UN NUEVO REGISTRO
public static void INSERTARPROVEEDOR
(
string codigo,
string nombres,
string apellidos,
string direccion,
string ciudad,
string telefono
)
{
using (SCXPEntities BD = new SCXPEntities())
{
/*PARA INSERTAR UN NUEVO OBJETO O PROVEEDOR ASIGNANDO LOS
VALORES
DE LOS PARÁMETROS A LOS CAMPOS DE LA TABLA.*/

131
VISUAL C# APLICACIÓN Y DESARROLLO

BD.PROVEEDORES.AddObject(new PROVEEDORES
{
CODIGO = codigo,
NOMBRES=nombres,
APELLIDOS =apellidos,
DIRECCION=direccion,
CIUDAD =ciudad
});
BD.SaveChanges();
}
}

CREACIÓN DEL MÉDOTO PARA MODIFICAR UN PROVEEDOR

Este método difiere poco del anterior creamos con la diferencia


de que hay que consultar el registro o proveedor que se va a
modificar.

47. Escriba el siguiente código:


'ESTE ES EL MÉTODO QUE SE LLAMA MODIFICARRPROVEEDORES. ESTE MÉDOTO TIENE UN
PARÁMETRO POR CADA CAMPO DE LA TABLA
Public Shared Sub MODIFICARPROVEEDOR(ByVal codigo As String, ByVal nombres As
String, ByVal apellidos As String, ByVal direccion As String, ByVal ciudad As
String, ByVal telefono As String)
'ESTA ES UNA INSTANCIA DE NUESTRO MODELO DE LA BASE DE DATOS
Using BD As New SCXPEntities
'SE HACE UNA CONSULTA USANDO LIQ PARA BUSCAR EL PROVEEDOR QUE DESEAMOS MODIFICAR
Dim MODIFICA = (From P In BD.PROVEEDORES
Where P.CODIGO = codigo
Select P).Single()
'Se asignan los valores de los parametros a los campos de la base de datos.
MODIFICA.NOMBRES = nombres
MODIFICA.APELLIDOS = apellidos
MODIFICA.DIRECCION = direccion
MODIFICA.CIUDAD = ciudad
MODIFICA.TELEFONO = telefono
'PARA GUARDAR LOS CAMBIOS.
BD.SaveChanges()
End Using
End Sub

132
VISUAL C# APLICACIÓN Y DESARROLLO

CREACIÓN DEL MÉTODO PARA ELIMINAR UN REGISTRO

Este método recibirá un parámetro que llamado código que servirá


para buscar y eliminar el proveedor. Aquí también haremos uso de Linq
y una vez visualizado el registro procedemos a eliminarlo usando el
método DeleteObject y por último guardamos los cambios con el
método SaveChanges.
48. Escriba el siguiente código:
'ESTE ES EL MÉTODO QUE SE LLAMA ELIMINARPROVEEDORES. TIENE EL PARÁMETRO código QUE
'USAREMOS PARA BUSCAR Y ELIMINAR
public static void ELIMINARPROVEEDOR(string codigo)
{
using (SCXPEntities BD = new SCXPEntities())
{
var ELIMINA = (from P in BD.PROVEEDORES
where P.CODIGO==codigo
select P).Single();

BD.DeleteObject(ELIMINA);
BD.SaveChanges();
}
}

CREACIÓN DEL MÉTODO QUE CARGA LOS DATOS DEL


PROVEEDOR QUE SE DESEA MODIFICAR.

El siguiente método de tipo PROVEEDORES recibe el parámetro


código que usaremos en una consulta que crearemos usando Linq
para recuperar. Una vez consultado el proveedor le asignamos a cada
propiedad o campo de nuestra clase PROVEEDORES los datos
resultantes por medio de la consulta y luego devolvemos los datos
modificados.

49. Escriba el siguiente código:


public static PROVEEDORES CARGAR(string codigo)
{
PROVEEDORES proveedores = new PROVEEDORES();
using (SCXPEntities BD = new SCXPEntities())
{
var INFO = (from P in BD.PROVEEDORES
where P.CODIGO==codigo
select P).Single();

proveedores.CODIGO = INFO.CODIGO;
proveedores.NOMBRES = INFO.NOMBRES;
proveedores.APELLIDOS = INFO.APELLIDOS;
proveedores.DIRECCION = INFO.DIRECCION;

133
VISUAL C# APLICACIÓN Y DESARROLLO

proveedores.CIUDAD=INFO.CIUDAD;
proveedores.TELEFONO=INFO.TELEFONO;

return proveedores;
}
}

ESTE ES EL CÓDIGO COMPLETO DE LA CLASE DATOS


PROVEEDORES:

public class DATOSPROVEEDORES


{
public static List<PROVEEDORES> MOSTRARDATOS()
{
//ESTA ES UNA INSTANCIA DE NUESTRO MODELO DE LA BASE DE DATOS
using (SCXPEntities BD = new SCXPEntities())
{
//MUESTRA TODOS LOS PROVEEDORES

var INFO = (from P in BD.PROVEEDORES


select P).ToList();

return INFO;
}
}
public static List<PROVEEDORES> BUSCARPORCODIGO(string codigo)
{
using (SCXPEntities BD = new SCXPEntities())
{
/*USAMOS LINQ. PARA BUSCAR UN PROVEEDOR POR LA DIRECCIÓN
EMPEZANDO CON CUALQUIER LETRA*/
var INFO = (from P in BD.PROVEEDORES
where P.CODIGO.StartsWith(codigo)
select P).ToList();
/*StartsWith HACE QUE VAYA MOSTRANDO LOS PROVEEDORES QUE
EMPIEZEN CON LAS LETRAS QUE VAMOS ESCRIBIENDO*/

return INFO;
}

}
public static List<PROVEEDORES> BUSCARNOMBRES(string nombres)
{
using (SCXPEntities BD = new SCXPEntities())
{
var INFO = (from P in BD.PROVEEDORES
where P.NOMBRES.StartsWith(nombres)
select P).ToList();
return INFO;
}
}
public static List<PROVEEDORES> BUSCARPORAPELLIDOS(string apellidos)
{
using (SCXPEntities BD = new SCXPEntities())
{
var INFO = (from P in BD.PROVEEDORES

134
VISUAL C# APLICACIÓN Y DESARROLLO

where P.APELLIDOS.StartsWith(apellidos)
select P).ToList();
return INFO;
}
}
public static List<PROVEEDORES> BUSCARPORDIRECCION(string direccion)
{
using (SCXPEntities BD = new SCXPEntities())
{
var INFO = (from P in BD.PROVEEDORES
where P.DIRECCION.StartsWith(direccion)
select P).ToList();
return INFO;
}

}
public static List<PROVEEDORES> BUSCARPORCIUDAD(string ciudad)
{
using (SCXPEntities BD = new SCXPEntities())
{
var INFO = (from P in BD.PROVEEDORES
where P.CIUDAD.StartsWith(ciudad)
select P).ToList();
return INFO;
}

}
//EL SIGUIENTE MÉTODO AÑADE UN NUEVO REGISTRO
public static void INSERTARPROVEEDOR
(
string codigo,
string nombres,
string apellidos,
string direccion,
string ciudad,
string telefono
)
{
using (SCXPEntities BD = new SCXPEntities())
{

/*PARA INSERTAR UN NUEVO OBJETO O PROVEEDOR ASIGNANDO LOS VALORES DE LOS


PARÁMETROS A LOS CAMPOS DE LA TABLA.*/

BD.PROVEEDORES.AddObject(new PROVEEDORES
{
CODIGO = codigo,
NOMBRES=nombres,
APELLIDOS =apellidos,
DIRECCION=direccion,
CIUDAD =ciudad
});
BD.SaveChanges();
}
}
//EL SIGUIENTE MÉTODO AÑADE UN NUEVO REGISTRO

135
VISUAL C# APLICACIÓN Y DESARROLLO

public static void MODIFICARPEOVEEDOR


(
string codigo,
string nombres,
string apellidos,
string direccion,
string ciudad,
string telefono
)
{
using (SCXPEntities BD = new SCXPEntities())
{
var MODIFICAR = (from P in BD.PROVEEDORES
where P.CODIGO==codigo
select P).Single();
MODIFICAR.CODIGO = codigo;
MODIFICAR.NOMBRES=nombres;
MODIFICAR.APELLIDOS =apellidos;
MODIFICAR.DIRECCION=direccion;
MODIFICAR.CIUDAD = ciudad;

BD.SaveChanges();
}
}
public static void ELIMINARPROVEEDOR(string codigo)
{
using (SCXPEntities BD = new SCXPEntities())
{
var ELIMINA = (from P in BD.PROVEEDORES
where P.CODIGO==codigo
select P).Single();

BD.DeleteObject(ELIMINA);
BD.SaveChanges();
}
}
public static PROVEEDORES CARGAR(string codigo)
{
PROVEEDORES proveedores = new PROVEEDORES();
using (SCXPEntities BD = new SCXPEntities())
{
var INFO = (from P in BD.PROVEEDORES
where P.CODIGO==codigo
select P).Single();

proveedores.CODIGO = INFO.CODIGO;
proveedores.NOMBRES = INFO.NOMBRES;
proveedores.APELLIDOS = INFO.APELLIDOS;
proveedores.DIRECCION = INFO.DIRECCION;
proveedores.CIUDAD=INFO.CIUDAD;
proveedores.TELEFONO=INFO.TELEFONO;

return proveedores;
}
}

136
VISUAL C# APLICACIÓN Y DESARROLLO

PROGRAMACION DEL FORMULARIO DE MANTENIMIENTO DE


PROVEEDORES
50. Vaya el diseño del formulario FPROVEEDORES.

INVOCAR EL MÉDOTO MOSTRARRPROVEEDORES DESDE EL


EVENTO LOAD DEL FORMULARIO
51. Haga doble clic en un área no ocupada.

Escriba el siguiente código:


//INVOCAMOS EL MÉTODO MÉTODO MOSTRARPROVEEDORES DE LA CLASE DATOSPROVEEDORES
DGVPROVEEDORES.DataSource = DATOSPROVEEDORES.MOSTRARDATOS();
//OCULTAMOS LA COLUMNA FACTURAS PARA QUE NO APAREZCA EN EL DATAGRID VIEW.
DGVPROVEEDORES.Columns["FACTURAS"].Visible = false;

NOTE QUE MANTDAMOS A OCULTAR LA COLUMNA FACTURAS QUE NO


HACERLO APARECERÁ EN DATAGRID VIEW ASÍ:

ESTO ES DEBIDO A LA RELACIÓN QUE EXISTE ENTRE LAS TABLAS


PROVEEDORES Y FACTURAS COMO MUESTRA LA ENTIDAD
PROVEEDORES EN EL DISEÑO DEL DATA MODEL:

137
VISUAL C# APLICACIÓN Y DESARROLLO

52. Ahora la ventana de la clase se ve así:

53. Pulse la tecla F5 para ver los resultados de los que hemos hecho
hasta ahora.
ESTA ES LA VENTANA DE RESULTADO:

138
VISUAL C# APLICACIÓN Y DESARROLLO

BÚSQUEDA DINÁMICA DE REGISTROS

Ya creamos varios métodos de búsqueda, uno por cada campo, en la


clase DATOSPROVEEDORES programando los mismos para que
empiece la búsqueda los proveedores que cumplen con el criterio al
momento al momento de escribir la primera letra (StarWith). Pero
para que la búsqueda sea dinámica e interactiva usaremos el evento
TextChanged de cada TextBox.
54. Haga doble clic sobre el TextBox TCODIGO y escriba lo siguiente:
DGVPROVEEDORES.DataSource = DATOSPROVEEDORES.BUSCARPOCODIGO(TCODIGO.Text);

EL EVENTO AHORA DEBE VERSE ASÍ:

55. Haga doble clic sobre el TextBox TNOMBRE y escriba lo siguiente:


DGVPROVEEDORES.DataSource = DATOSPROVEEDORES.BUSCARPORNOMBRES(TNOMBRE.Text);

EL EVENTO AHORA DEBE VERSE ASÍ:

56. Haga doble clic sobre el TextBox TAPELLIDO y escriba lo siguiente:


DGVPROVEEDORES.DataSource = DATOSPROVEEDORES.BUSCARPOAPELLIDOS(TAPELLIDO.Text);

EL EVENTO AHORA DEBE VERSE ASÍ:

57. Haga doble clic sobre el TextBox TDIRECCION y escriba lo siguiente:


DGVPROVEEDORES.DataSource = DATOSPROVEEDORES.BUSCARPORDIRECCION(TDIRECCION.Text);

EL EVENTO AHORA DEBE VERSE ASÍ:

58. Haga doble clic sobre el TextBox TCIUDAD y escriba lo siguiente:


DGVPROVEEDORES.DataSource = DATOSPROVEEDORES.BUSCARPORCIUDAD(TCIUDAD.Text);

EL EVENTO AHORA DEBE VERSE ASÍ:

139
VISUAL C# APLICACIÓN Y DESARROLLO

ADICIÓN DE PROVEEDORES
Ya hemos visto como se cargan los datos de los proveedores en el
DataGridView. Ahora veremos cómo se añaden registros a la tabla
Proveedores.
59. Vaya al código del formulario FPROVEEDORES.

Es necesario crear un método que detecte el cierre de los


formularios FAGREGARPROV y FMODIFICARPROV con el
objetivo de guardar los datos de los nuevos proveedores así
como actualizar los datos cuando se ha hecho una modificación.
60. Debajo de Public partial class FPROVEEDORES : Form escriba el
siguiente código
FAGREGARPROV FAP = new FAGREGARPROV();
Para crear una instancias del formulario FAGREGARPRO.
61. Digite el siguiente código para crear los dos métodos que permitan
detectar el cierre de los formularios FAGREGARPROF y
FMODIFICARPROV:
private void FAGREGARPROV_FormClosed(object sender, FormClosedEventArgs e)
{
DATOSPROVEEDORES.MOSTRARDATOS();
}

private void FMODIFICARARPROV_FormClosed(object sender,


FormClosedEventArgs e)
{
DATOSPROVEEDORES.MOSTRARDATOS();
}

62. Haga doble clic dentro de la caja de texto del evento FormClosed
para crear el método correspondiente.
63. Escriba el siguiente código:
‘Cargamos los datos después de cerrar los formularios FAGREGARPROV y/o FMODIFICAR
DGVPROVEEDORES.DataSource = DATOSPROVEEDORES.MOSTRARDATOS();

EL EVENTO SE VE ASÍ:

64. Vuelva al diseño del formulario y haga doble clic sobre el botón
AGREGAR.
APARECE EL CUERPO DEL EVENTO CLICK DEL BOTON BAGREGAR:

140
VISUAL C# APLICACIÓN Y DESARROLLO

65. Escriba el siguiente código:


//Creamos una instancia tipo FMODIFICARPROV
FMODIFICARPROV FMP = new FMODIFICARPROV();
/*Abrimos el formulario y actualizamos DataGrid View DGVPROVEEDORES
después de cerrarlo */
FMP.FormClosed+=new
System.Windows.Forms.FormClosedEventHandler(FPROVEEDORES_FormClosed);
FMP.Show();

EL EVENTO AHORA SE VE ASÍ:

PARA PASAR AL SIGUIENTE TEXTBOX CON LA TECLA ENTER


En esta ocasión tenemos como objetivo que al pulsar la tecla ENTER el
punto de inserción pase a la siguiente caja de texto.
66. Vaya al diseño del formulario FAGREGARPROV.
67. Seleccione la caja de texto TCODIGO.
68. En la ventana de EVENTOS haga doble clic en la caja de texto del
evento KeyPress.

69. Escriba el siguiente código:


private void TCODIGO_KeyPress(object sender, KeyPressEventArgs e)
{
if ((int)e.KeyChar == (int)Keys.Enter)
{
TNOMBRES.Focus();
}

141
VISUAL C# APLICACIÓN Y DESARROLLO

}
EL EVENTO AHORA SE VERÁ ASÍ:

70. Repita los pasos 47, 48 y 49 con los TextBox TNOMBRE,


TAPELLIDO, TDIRECCION, TCIUDAD Y TTELEFONO cuyo evento
KeyPress debe verse así:
private void TNOMBRES_KeyPress(object sender, KeyPressEventArgs e)
{
if ((int)e.KeyChar == (int)Keys.Enter)
{
TAPELLIDOS.Focus();
}
}

private void TAPELLIDOS_KeyPress(object sender, KeyPressEventArgs e)


{
if ((int)e.KeyChar == (int)Keys.Enter)
{
TDIRECCION.Focus();
}
}

private void TDIRECCION_KeyPress(object sender, KeyPressEventArgs e)


{
if ((int)e.KeyChar == (int)Keys.Enter)
{
TCIUDAD.Focus();
}
}

private void TCIUDAD_KeyPress(object sender, KeyPressEventArgs e)


{
if ((int)e.KeyChar == (int)Keys.Enter)
{
TTELEFONO.Focus();
}

71. Vaya al diseño del formulario FAGREGARPROV y haga doble clic


sobre el botón AGREGAR.
72. Escriba el siguiente código:
DATOSPROVEEDORES.INSERTARPROVEEDOR(
TCODIGO.Text,
TNOMBRES.Text,
TAPELLIDOS.Text,
TDIRECCION.Text,
TCIUDAD.Text,

142
VISUAL C# APLICACIÓN Y DESARROLLO

TTELEFONO.Text);
MessageBox.Show("EL PROVEEDOR"+" "+TNOMBRES.Text+" "+TAPELLIDOS.Text+" "+"HA
SIDO AGREGADO", "AGREGAR PROVEEDOR");
this.Close();

73. Pulse la tecla F5 para probar lo que hemos hecho.


74. Haga clic sobre el botón agregar.
APARECE EL FORMULARIO AGREGAR PROVEEDORES:

75. Escriba los datos del nuevo proveedor según muestra la siguiente
figura pulsando la techa ENTER para pasar siempre al próximo
TextBox:

76. Haga clic sobre el botón AGREGRAR para guardar el registro.


APARECE EST MENSAJE:

143
VISUAL C# APLICACIÓN Y DESARROLLO

77. Haga clic para cerrar el formulario actual y volver al formulario de


mantenimiento de proveedores con la actualización.
OBSERVE EL NUEVO REGISTRO EN LA PRIMERA FILA DEL
DATAGRIDVIEW DGVPROVEEDORES según muestra la siguiente
figura:

MODIFICAR REGISTROS
Ya hemos programado la adición de registros a la tabla proveedores.
Ahora veremos cómo modificaremos registros. Desde el evento
Click del botón BMODIFICAR abriremos el formulario
FMODIFICARPROV donde modificaremos los registros de los proveedores y
actualizaremos los datos cuando lo cerremos.

CREACION DE UN METODO PARA OBTENER EL CODIGO DEL PROVEEDOR


A MODIFICAR
El siguiente método servirá para cargar el registro que vamos a
modificar en el formulario FMODIFICARPROV que es donde se va a
hacer cambios a los registros.

78. Vaya al diseño del formulario FPROVEEDORES y haga doble clic


sobre el botón MODIFICAR.
79. Escriba el siguiente código:
DataGridViewRow FILA = DGVPROVEEDORES.CurrentRow;
string codigo =Convert.ToString(FILA.Cells[0].Value);

144
VISUAL C# APLICACIÓN Y DESARROLLO

FMODIFICARPROV FMP = new FMODIFICARPROV();

FMP.FormClosed += new
System.Windows.Forms.FormClosedEventHandler(FPROVEEDORES_FormClosed);
FMP.Show();

AHORA EL EVENTO SE VE ASÍ:

80. Vaya al diseño del formulario FMODIFICARPROV, luego haga clic


derecho en un área desocupada y escoja la opción View Code
como ilustra la siguiente figura:

81. Modifique esta parte de la clase para que quede así:

145
VISUAL C# APLICACIÓN Y DESARROLLO

82. Vuelva al diseño del formulario y haga doble clic sobre un área no
ocupada para abrir el evento Load del formulario que debe verse
así:

En este evento load obtenemos los datos del proveedor que vamos
a modificar usando el método OBTENERCODIGO y le enviamos
como parámetro el dato recibido del formulario FPROVEEDOR.

Escriba el siguiente código:


PROVEEDORES prov = DATOSPROVEEDORES.CARGAR(CODIGO);
CODIGO = prov.CODIGO;
TAPELLIDOS.Text = prov.APELLIDOS;
TDIRECCION.Text = prov.DIRECCION;
TCIUDAD.Text = prov.CIUDAD;
TTELEFONO.Text = prov.TELEFONO;

EL EVENTO DEBE VERSE ASÍ:

83. Vuelva al diseño del formulario y haga doble clic sobre el botón
ACTUALIZAR.
84. Escriba el siguiente código:
//Invocamos el método MODIFICARPROVEEDOR.
DATOSPROVEEDORES.MODIFICARPEOVEEDOR
(CODIGO, TNOMBRES.Text,
TAPELLIDOS.Text,
TDIRECCION.Text,
TCIUDAD.Text,
TTELEFONO.Text);

MessageBox.Show("EL REGISTRO SE MODIFICÓ EXITOSAMENTE.", "MODIFICACIÓN");


Close();

EL EVENTO DEBE VERSE ASÍ:

146
VISUAL C# APLICACIÓN Y DESARROLLO

85. Pulse la tecla F5 para ver lo que hemos hecho.


Seleccionamos el proveedor FFF 444 como ilustra la siguiente
figura:

86. Haga clic sobre el botón MODIFICAR para abrir el formulario


FMODIFICARPROV que es el formulario donde se cargan los datos
del proveedor seleccionado para fines de modificación.

147
VISUAL C# APLICACIÓN Y DESARROLLO

87. Hag los cambios deseados:


88. Haga clic sobre el botón ACTUALIZAR.
APARECE EL SIGUIENTE MENSAJE:

89. Haga clic sobre el botón ACEPTAR para cerrar el formulario actual
y volver al formulario de MANTENIMIENTO DE PROVEEDORES.

LA SIGUIENTE FIGURA ILUSTRA LOS CAMBIOS EFECTUADOS:

148
VISUAL C# APLICACIÓN Y DESARROLLO

ELIMINACION DE REGISTROS
En el evento Click del botón ELIMINAR eliminaremos el registro correspondiente
al proveedor seleccionado en el en el ADATAGRIDVIEW DGVPROVEEDORES y
le enviamos como parámetro el código del proveedor seleccionado al método
ELIMINARPROVEEDOR.

90. Vaya al diseño del formulario FPROVEEDORES y haga doble clic


sobre el botón ELIMINAR.
91. Escriba el siguiente código:
92. Haga doble clic sobre el botón ELIMINAR.
93. Escriba el siguiente código:
if (respuesta == DialogResult.Yes)
{
DataGridViewRow FILA = DGVPROVEEDORES.CurrentRow;
string codigo = Convert.ToString(FILA.Cells[0].Value);
DATOSPROVEEDORES.ELIMINARPROVEEDOR(codigo);
MessageBox.Show("SE HA BORRADO EL PROVEEDOR" + TNOMBRE.Text
+"
"+ TAPELLIDO.Text, "REGISTRO ELIMINADO");
DATOSPROVEEDORES.MOSTRARDATOS();
}

EL EVENTO DEBE VERSE ASÍ:

94. Pulse la tecla F5 para ver los resultados.


95. Escriba el código o cualquier otro dato del proveedor que desea
eliminar como muestra la siguiente figura figura:

149
VISUAL C# APLICACIÓN Y DESARROLLO

96. Haga clic sobre el botón ELIMINAR.


APARECE EL SIGUIENTE MENSAJE:

97. Haga clic sobre el botón Sí.


APARECE EL SIGUIENTE MENSAJE:

98. Haga clic sobre el botón Aceptar.

150
VISUAL C# APLICACIÓN Y DESARROLLO

99. Añada un formulario llamado FFACTURAS.


100. En la propiedad Text del formulario ponga MANTENIMIENTO DE
FACTURAS.
101. Añada dos formularios más uno llamado FAGREGARFACT y otro
FMODIFICARFACT y en la propiedad Text le pondrá REGISTRAR
DATOS DE FACTURAS POR PAGAR y MODIFICAR DATOS DE
FACTURAS POR PAGAR respectivamente.

DISEÑO DE LA INTERFAZ GRÁFICA DEL FORMULARIO DE


MANTENIMIENTO DE FACTURAS

La figura anterior muestra el formulario maestro de control con


respecto a las facturas y contendrá los siguientes controles:

151
VISUAL C# APLICACIÓN Y DESARROLLO

 El DATAGRIDVIEW DGVFACTURAS donde se


 mostrarán los datos de las facturas existentes.
 Una Etiqueta o Label con el texto BUSCAR FACTURAS
POR:
 Un Panel dentro del cual colocaremos todas las cajas de
texto o Texboxs y etiquetas o Labels.
 Un Label con el texto NUMERO FACTURA.
 El Textbox TNUMFACT en el que se escribirá el número
de la FACTURA que se desea encontrar.
 Un Label con el texto CODIGO PROVEEDOR.
 El Textbox TCODIGO en el que se escribirá el nombre de
la FACTURA que se desea encontrar.
 Un Label con el texto MOSTRAR TODAS y con el nombre
LBMOSTRARTODAS
 El botón AGREGAR para insertar nuevas facturas
 El botón MODIFICAR para hacer cambios a los datos de
las facturas.
 El botón ELIMINAR que nos permitirá borrar una
FACTURA.
102. Ahora vuelva al diseño del formulario FFACTURAS.
103. Añada los controles indicados arriba.

EL FORMULARIO QUEDARÁ ASÍ:

152
VISUAL C# APLICACIÓN Y DESARROLLO

DISEÑO DE LA INTERFAZ GRÁFICA DEL FORMULARIO DE


ADICIÓN DE FACTURAS
104. Vaya el diseño del formulario FAGREGARFACT.

La figura anterior muestra el formulario que se usará para


insertar nuevos facturas y contendrá los siguientes controles:
 El botón AGREGAR para añadir la FACTURA y cerrar
volver al formulario FFACTURAS con la actualización.
 Cinco etiquetas (Labels) con los siguientes textos:
 NUMERO FACTURA

153
VISUAL C# APLICACIÓN Y DESARROLLO

 CODIGO CLIENTE
 VALOR FACTURA
 FECHA FACTURA
 FECHA VENCIMIENTO
 Cinco TEXTBOXs O CAJAS DE TEXTO con los
siguientes nombres:
 TNUMFACT
 TCODIGO
 TVALFACT
 TFECHAFACT
 TFECHAVENC
105. Añada los controles arriba indicados.
EL FORMULARIO QUEDARÁ ASÍ:

DISEÑO DE LA INTERFAZ GRÁFICA DEL FORMULARIO DE


MODIFICACIÓN DE FACTURAS
106. Vaya al formulario FMODIFICARFACT.

154
VISUAL C# APLICACIÓN Y DESARROLLO

La figura anterior muestra el formulario que se usará para


modificar facturas contendrá los siguientes controles:

 El botón ACTUALIZAR para hacer la búsqueda de


facturas.
 El botón AGREGAR para añadir la FACTURA y cerrar
volver al formulario FFACTURAS con la actualización.
 Cinco etiquetas (Labels) con los siguientes textos:
 NUMERO FACTURA
 CODIGO CLIENTE
 VALOR FACTURA
 FECHA FACTURA
 FECHA VENCIMIENTO
 Cinco TEXTBOXs O CAJAS DE TEXTO con los
siguientes nombres:
 TNUMFACT
 TCODIGO
 TVALFACT
 TFECHAFACT
 TFECHAVENC
107. Añada los controles arriba indicados.
EL FORMULARIO QUEDARÁ ASÍ:

155
VISUAL C# APLICACIÓN Y DESARROLLO

PROGRAMACIÓN DE LA CLASE DATOSFACTURAS


Dentro de esta clase haremos lo siguiente:
 Crear un método que nos devuelva una lista de
tipo FACTURAS.
 Dentro del método crearemos una instancia de nuestro
modelo
 Crear la consulta usando linq la cual nos mostrará
todos los registros existentes en la tabla FACTURAS.
 Crear dos métodos más que nos permitan buscar
facturas por el número y por el código del cliente.
108. Haga doble clic sobre la clase DATOSFACTURAS.

ESTA ES LA ESTURCTURA DE LA CLASE QUE ESTA VACÍA:

CREACIÓN DE MÉDOTOS DE RECUPERACIÓN Y BÚSQUEDA


109. Escriba el siguiente código:
//ESTA ES UNA INSTANCIA DE NUESTRO MODELO DE LA BASE DE DATOS
using (SCXPEntities BD = new SCXPEntities())
{
//MUESTRA TODOS LAS FACTURAS

var INFO = (from F in BD.FACTURAS


select F).ToList();

156
VISUAL C# APLICACIÓN Y DESARROLLO

return INFO;
}
//ESTE MÉTODO BUSCA UNA FACTURA POR EL NÚMERO

public static List<FACTURAS> BUSCARELNUMERO(int numerofactura)


{
using (SCXPEntities BD = new SCXPEntities())
{
//USAMOS LINQ. PARA BUSCAR UN FACTURA POR EL NUMERO

var INFO = (from F in BD.FACTURAS


where F.NUMERO_FACTURA ==numerofactura
select F).ToList();
/*StartsWith HACE QUE VAYA MOSTRANDO LOS PROVEEDORES QUE
EMPIEZEN CON LAS LETRAS QUE VAMOS ESCRIBIENDO*/

return INFO;
}

}
public static List<FACTURAS> BUSCARECODIGO(string codigo)
{
using (SCXPEntities BD = new SCXPEntities())
{
//USAMOS LINQ. PARA BUSCAR FACTURAS POR EL CODIGO DEL PROEEDOR

var INFO = (from F in BD.FACTURAS


where F.CODIGO == codigo
select F).ToList();
/*StartsWith HACE QUE VAYA MOSTRANDO LOS PROVEEDORES QUE
EMPIEZEN CON LAS LETRAS QUE VAMOS ESCRIBIENDO*/

return INFO;
}

Los tres métodos anteriores se usan, el primero para mostrar todas


las facturas y los que siguen para buscar las FACTURA por los
campos NUMEROFACTURA y CODIGO y mediante este último ir
mostrando los facturas de los proveedores cuyos códigos
empiezan con la letra que vamos escribiendo.

CREACIÓN DEL MÉDOTO INSERTAR UNA NUEVA FACTURA


El siguiente código crea un método que recibe los parámetros acorde a
los campos de la tabla FACTURAS para agregar registros.

Dentro del método creamos una instancia del modelo de la base de


datos y luego usamos el método AddObject para agregar un nuevo
objeto, que en este caso es un registro, de tipo FACTURAS y
guardamos los datos en nuestra base de datos (BD) con el método
SaveChanges o Guardar Cambios.

157
VISUAL C# APLICACIÓN Y DESARROLLO

Escriba el siguiente código:


'ESTE ES EL MÉTODO QUE SE LLAMA AGREGARFACTURAS. ESTE MÉDOTO TIENE UN PARÁMETRO POR
'CADA CAMPO DE LA TABLA
public static void INSERTARFACTURA
(
int numerofactura,
string codigoproveedor,
decimal valorfactura,
DateTime fechafactura,
DateTime fechavencimiento
)
{
using (SCXPEntities BD = new SCXPEntities())
{
/*PARA INSERTAR UN NUEVO OBJETO O PROVEEDOR ASIGNANDO LOS VALORES DE
LOS PARÁMETROS A LOS CAMPOS DE LA TABLA.*/

BD.PROVEEDORES.AddObject(new FACTURAS
{
NUMERO_FACTURA = numerofactura,
CODIGO=codigoproveedor,
VALOR_FACTURA=valorfactura,
FECHA_FACTURA=fechafactura,
FECHA_VENCIMIENTO=fechavencimiento,
});
BD.SaveChanges();
}
}

CREACIÓN DEL MÉDOTO PARA MODIFICAR UNA FACTURA

Este método difiere poco del anterior creamos con la diferencia


de que hay que consultar el registro o FACTURA que se va a
modificar.

110. Escriba el siguiente código:


'ESTE ES EL MÉTODO QUE SE LLAMA MODIFICARFACTURA. ESTE MÉDOTO TIENE UN PARÁMETRO
'POR CADA CAMPO DE LA TABLA
//EL SIGUIENTE MÉTODO MODIFICA UN REGISTRO
public static void MODIFICARFACTURA
(
int numerofactura,
string codigoproveedor,
decimal valorfactura,
DateTime fechafactura,
DateTime fechavencimiento
)
{
using (SCXPEntities BD = new SCXPEntities())
{
var MODIFICAR = (from F in BD.FACTURAS
where F.NUMERO_FACTURA == numerofactura
select F).Single();
MODIFICAR.NUMERO_FACTURA = numerofactura;

158
VISUAL C# APLICACIÓN Y DESARROLLO

MODIFICAR.CODIGO = codigoproveedor;
MODIFICAR.VALOR_FACTURA = valorfactura;
MODIFICAR.FECHA_FACTURA = fechafactura;
MODIFICAR.FECHA_VENCIMIENTO = fechavencimiento;

BD.SaveChanges();
}
}

CREACIÓN DEL MÉTODO PARA ELIMINAR UNA FACTURA

Este método recibirá un parámetro que llamado código que servirá


para buscar y eliminar el FACTURA. Aquí también haremos uso de Linq y
una vez visualizado el registro procedemos a eliminarlo usando el
método DeleteObject y por último guardamos los cambios con el
método SaveChanges.
111. Escriba el siguiente código:
'ESTE ES EL MÉTODO QUE SE LLAMA ELIMINAR. TIENE EL PARÁMETRO numerofactura QUE
USAREMOS PARA BUSCAR Y ELIMINAR
public static void ELIMINARFACTURA(int numerofactura)
{
using (SCXPEntities BD = new SCXPEntities())
{
var ELIMINA = (from F in BD.FACTURAS
where F.NUMERO_FACTURA == numerofactura
select F).Single();

BD.DeleteObject(ELIMINA);
BD.SaveChanges();
}
}

CREACIÓN DEL MÉTODO QUE CARGA LOS DATOS DE LA


FACTURA QUE SE DESEA MODIFICAR.

El siguiente método de tipo FACTURAS recibe el parámetro numfact


que usaremos en una consulta que crearemos usando Linq para
recuperar. Una vez consultado el FACTURA le asignamos a cada
propiedad o campo de nuestra clase FACTURAS los datos
resultantes por medio de la consulta y luego devolvemos los datos
modificados.

112. Escriba el siguiente código:


public static FACTURAS CARGAR(int numerofactura)
{
FACTURAS facturas = new FACTURAS();

159
VISUAL C# APLICACIÓN Y DESARROLLO

using (SCXPEntities BD = new SCXPEntities())


{
var INFO = (from F in BD.FACTURAS
where F.NUMERO_FACTURA==numerofactura
select F).Single();

facturas.NUMERO_FACTURA = INFO.NUMERO_FACTURA;
facturas.CODIGO = INFO.CODIGO;
facturas.VALOR_FACTURA = INFO.VALOR_FACTURA;
facturas.FECHA_FACTURA = INFO.FECHA_FACTURA;
facturas.FECHA_VENCIMIENTO = INFO.FECHA_VENCIMIENTO;
return facturas;
}
}
ESTE ES EL CÓDIGO COMPLETO DE LA CLASE DATOS FACTURAS:

public class DATOSFACTURAS


{
public static List<FACTURAS> MOSTRARFACTURAS()
{
//ESTA ES UNA INSTANCIA DE NUESTRO MODELO DE LA BASE DE DATOS
using (SCXPEntities BD = new SCXPEntities())
{
//MUESTRA TODOS LAS FACTURAS

var INFO = (from F in BD.FACTURAS


select F).ToList();

return INFO;
}

}
public static List<FACTURAS> BUSCARELNUMERO(int numerofactura)
{
using (SCXPEntities BD = new SCXPEntities())
{
//USAMOS LINQ. PARA BUSCAR UN FACTURA POR EL NUMERO

var INFO = (from F in BD.FACTURAS


where F.NUMERO_FACTURA ==numerofactura
select F).ToList();
/*StartsWith HACE QUE VAYA MOSTRANDO LOS PROVEEDORES QUE
EMPIEZEN CON LAS LETRAS QUE VAMOS ESCRIBIENDO*/

return INFO;
}
}
//ESTE MÉTODO BUSCA LAS FACTURAS DE UN PROVEEDOR POR EL CÓDIGO
public static List<FACTURAS> BUSCARECODIGO(string codigo)
{
using (SCXPEntities BD = new SCXPEntities())
{
//USAMOS LINQ. PARA BUSCAR FACTURAS POR EL CODIGO DEL PROEEDOR

var INFO = (from F in BD.FACTURAS


where F.CODIGO == codigo

160
VISUAL C# APLICACIÓN Y DESARROLLO

select F).ToList();
/*StartsWith HACE QUE VAYA MOSTRANDO LOS PROVEEDORES QUE
EMPIEZEN CON LAS LETRAS QUE VAMOS ESCRIBIENDO*/

return INFO;
}

}
//EL SIGUIENTE MÉTODO AÑADE UN NUEVO REGISTRO
public static void INSERTARFACTURA
(
int numerofactura,
string codigoproveedor,
decimal valorfactura,
DateTime fechafactura,
DateTime fechavencimiento
)
{
using (SCXPEntities BD = new SCXPEntities())
{
/*PARA INSERTAR UN NUEVO OBJETO O PROVEEDOR ASIGNANDO LOS VALORES DE
LOS PARÁMETROS A LOS CAMPOS DE LA TABLA.*/

BD.FACTURAS.AddObject(new FACTURAS
{
NUMERO_FACTURA = numerofactura,
CODIGO=codigoproveedor,
VALOR_FACTURA=valorfactura,
FECHA_FACTURA=fechafactura,
FECHA_VENCIMIENTO=fechavencimiento,
});
BD.SaveChanges();
}
}
//EL SIGUIENTE MÉTODO MODIFICA UN REGISTRO
public static void MODIFICARFACTURA
(
int numerofactura,
string codigoproveedor,
decimal valorfactura,
DateTime fechafactura,
DateTime fechavencimiento
)
{
using (SCXPEntities BD = new SCXPEntities())
{
var MODIFICAR = (from F in BD.FACTURAS
where F.NUMERO_FACTURA == numerofactura
select F).Single();
MODIFICAR.NUMERO_FACTURA = numerofactura;
MODIFICAR.CODIGO = codigoproveedor;
MODIFICAR.VALOR_FACTURA = valorfactura;
MODIFICAR.FECHA_FACTURA = fechafactura;
MODIFICAR.FECHA_VENCIMIENTO = fechavencimiento;

BD.SaveChanges();
}
}

161
VISUAL C# APLICACIÓN Y DESARROLLO

public static void ELIMINARFACTURA(int numerofactura)


{
using (SCXPEntities BD = new SCXPEntities())
{
var ELIMINA = (from F in BD.FACTURAS
where F.NUMERO_FACTURA == numerofactura
select F).Single();

BD.DeleteObject(ELIMINA);
BD.SaveChanges();
}
}
public static FACTURAS CARGAR(int numerofactura)
{
FACTURAS facturas = new FACTURAS();
using (SCXPEntities BD = new SCXPEntities())
{
var INFO = (from F in BD.FACTURAS
where F.NUMERO_FACTURA==numerofactura
select F).Single();

facturas.NUMERO_FACTURA = INFO.NUMERO_FACTURA;
facturas.CODIGO = INFO.CODIGO;
facturas.VALOR_FACTURA = INFO.VALOR_FACTURA;
facturas.FECHA_FACTURA = INFO.FECHA_FACTURA;
facturas.FECHA_VENCIMIENTO = INFO.FECHA_VENCIMIENTO;
return facturas;
}
}
}

PROGRAMACIÓN DEL FORMULARIO DE MANTENIMIENTO DE


FACTURAS
113. Vaya el diseño del formulario FFACTURAS.

INVOCAR EL MÉDOTO MOSTRARFACTURAS DESDE EL EVENTO


LOAD DEL FORMULARIO
114. Haga doble clic en un área no ocupada.

Escriba el siguiente código:


'INVOCAMOS EL MÉTODO MÉTODO MOSTRARFACTURAS DE LA CLASE DATOSFACTURAS
DGVFACTURAS.DataSource = DATOSFACTURAS.MOSTRARFACTURAS();
'OCULTAMOS LA COLUMNA PROVEEDORE Y CHEQUES PARA QUE NO APAREZCA EN EL DATAGRID VIEW.
DGVFACTURAS.Columns["PROVEEDORES"].Visible = false;
'OCULTAMOS LA COLUMNA PROVEEDORE Y CHEQUES PARA QUE NO APAREZCA EN EL DATAGRID VIEW.

DGVFACTURAS.Columns["CHEQUES"].Visible = false;

ESTO ES DEBIDO A LA RELACIÓN QUE EXISTE ENTRE LAS TABLAS


FACTURAS Y FACTURAS COMO MUESTRA LA ENTIDAD FACTURAS EN EL
DISEÑO DEL DATA MODEL:

162
VISUAL C# APLICACIÓN Y DESARROLLO

115. Ahora la ventana de la clase se ve así:

116. Pulse la tecla F5 para ver los resultados de los que hemos hecho
hasta ahora.
ESTA ES LA VENTANA DE RESULTADO:

BÚSQUEDA DINÁMICA DE FACTURAS

Ya creamos varios métodos de búsqueda, uno por cada campo, en la


clase DATOSFACTURAS programando los mismos para que empiece la
búsqueda los facturas que cumplen con el criterio al momento al

163
VISUAL C# APLICACIÓN Y DESARROLLO

momento de escribir la primera letra (StarWith) en buscar por el código


del cliente. Pero para que la búsqueda sea dinámica e interactiva
usaremos el evento TextChanged de cada TextBox.
117. Haga doble clic sobre el TextBox TNUMEROFACTURA y escriba lo
siguiente:
try
{
DGVFACTURAS.DataSource = DATOSFACTURAS.BUSCARELNUMERO(
Convert.ToUInt16(TNUMFACT.Text));
}
catch
{
MessageBox.Show("DEBE INTRODUCIR UN VALOR NUMÉRICO");
TNUMFACT.Focus();
}

EL EVENTO AHORA DEBE VERSE ASÍ:

118. Pulse la tecla F5 para ver el resultado.

OBSERVE QUE AL ESCRIR EL NÚMERO DE FACTURA 7 SE MUESTRAN LOS


DATOS DE LA FACTURA.
119. Haga doble clic sobre el TextBox TCODIGO y escriba lo siguiente:

164
VISUAL C# APLICACIÓN Y DESARROLLO

DGVFACTURAS.DataSource = DATOSFACTURAS.BUSCARECODIGO(TCODIGO.Text);

EL EVENTO AHORA DEBE VERSE ASÍ:

OBSERVE QUE AL ESCRIR EL CÓDIGO 002 SE MUESTRAN TODAS LAS FACTURAS


DE ESE PROVEEDOR.

ADICIÓN DE FACTURAS
Ya hemos visto cómo se cargan los datos de los facturas en el
DataGridView. Ahora veremos cómo se añaden registros a la tabla
Proveedores.
120. Vuelva a la ventana del editor de código del formulario FFACTURAS.

Es necesario crear un método que detecte el cierre de los


formularios FAGREGARFACT y FMODIFICARFACT con el
objetivo de guardar los datos de las nuevas facturas así
como actualizar los datos cuando se ha hecho una modificación.
121. En la ventana Propiedades haga clic sobre el botón Event (Eventos)
para mostrar todos los eventos del formulario se ilustra en la
siguiente figura:

165
VISUAL C# APLICACIÓN Y DESARROLLO

122. Haga doble clic dentro de la caja de texto del evento FormClosed
para crear el método correspondiente.
123. Escriba el siguiente código:
‘Cargamos los datos después de cerrar los formularios FAGREGARFACT y/o FMODIFICAR
DGVFACTURAS.DataSource = DATOSFACTURAS.MOSTRARFACTURAS();

EL EVENTO SE VE ASÍ:

124. Vuelva al diseño del formulario y haga doble clic sobre el botón
AGREGAR.
APARECE EL CUERPO DEL EVENTO CLICK DEL BOTON BAGREGAR:

166
VISUAL C# APLICACIÓN Y DESARROLLO

125. Escriba el siguiente código:


'Creamos una instancia tipo FAGREGARFACTURAS
FAGREGARFACTURAS FAF = new FAGREGARFACTURAS();
/* Abrimos el formulario y actualizamos DataGrid View DGVFACTURAS
después de cerrarlo */
FAF.FormClosed += new
System.Windows.Forms.FormClosedEventHandler(FFACTURAS_FormClosed
);
FAF.Show();

EL EVENTO AHORA SE VE ASÍ:

PARA PASAR AL SIGUIENTE TEXTBOX CON LA TECLA ENTER


En esta ocasión tenemos como objetivo que al pulsar la tecla ENTER el
punto de inserción pase a la siguiente caja de texto.
126. Vaya al diseño del formulario FAGREGARFACT
127. Seleccione la caja de texto TNUMFACT

128. Escriba el siguiente código:


129. if ((int)e.KeyChar == (int)Keys.Enter)
{
TCODIGO.Focus();
}

167
VISUAL C# APLICACIÓN Y DESARROLLO

EL EVENTO SE VERÁ ASÍ:

130. Seleccione la caja de texto TCODIGO.


131. En la ventana de EVENTOS haga doble clic en la caja de texto del
evento KeyPress.

132. Escriba el siguiente código:


if ((int)e.KeyChar == (int)Keys.Enter)
{
TVALFACT.Focus();
}
133. EL EVENTO AHORA SE VERÁ ASÍ:

134. Repita los pasos 47, 48 y 49 con los TextBox TVALFACT,


TFECHAFACT.
135. Debe verse así:

136. Vuelva al diseño del formulario FAGREGARFACTURAS.


137. Haga doble clic sobre el botón AGREGAR

168
VISUAL C# APLICACIÓN Y DESARROLLO

138. Escriba el siguiente código:


DATOSFACTURAS.INSERTARFACTURA(
Convert.ToInt16(TNUMFACT.Text),
TCODIGO.Text,
Convert.ToDecimal(TVALFACT.Text),
Convert.ToDateTime(TFECHAFACT.Text),
Convert.ToDateTime(TFECHAVEN.Text));

MessageBox.Show("LA FACTURA SE AGREGÓ SATISFACTORIAMENTE", "AGREGAR FACTURA");


Close();

139. Pulse la tecla F5 para probar lo que hemos hecho.


140. Haga clic sobre el botón agregar.
APARECE EL FORMULARIO AGREGAR FACTURAS:

141. Escriba los datos del nuevo FACTURA según muestra la siguiente
figura pulsando la techa ENTER para pasar siempre al próximo
TextBox:

142. Haga clic sobre el botón AGREGRAR para guardar el registro.


APARECE EST MENSAJE:

169
VISUAL C# APLICACIÓN Y DESARROLLO

143. Haga clic para cerrar el formulario actual y volver al formulario de


mantenimiento de facturas con la actualización.
OBSERVE EL NUEVO REGISTRO EN LA PRIMERA FILA DEL
DATAGRIDVIEW DGVPROVEEDORES según muestra la
siguiente figura:

MODIFICAR FACTURAS
Ya hemos programado la adición de registros a la tabla facturas. Ahora
veremos cómo modificaremos registros. Desde el evento
Click del botón BMODIFICAR abriremos el formulario FMODIFICARFACT donde
modificaremos los registros de los facturas y actualizaremos los datos cuando lo
cerremos.

CREACIÓN DE UN MÉTODO PARA OBTENER EL NÚMERO DE LA FACTURA


A MODIFICAR
El siguiente método servirá para cargar el registro que vamos a
modificar en el formulario FMODIFICARFACT que es donde se va a
hacer cambios a los registros.

144. Vaya al diseño del formulario FFACTURAS y haga doble clic sobre el
botón MODIFICAR.
145. Escriba el siguiente código:
DataGridViewRow FILA = DGVFACTURAS.CurrentRow;

170
VISUAL C# APLICACIÓN Y DESARROLLO

int numerofactura = Convert.ToInt16(FILA.Cells[0].Value);


FMODIFICARFACTURA FMF = new FMODIFICARFACTURA();
FMF.Show();
FMF.FormClosed += new
System.Windows.Forms.FormClosedEventHandler(FFACTURAS_FormClosed);

AHORA EL EVENTO SE VE ASÍ:

146. Vaya al diseño del formulario FMODIFICARFACTURA, luego haga clic


derecho en un área desocupada y escoja la opción View Code como
ilustra la siguiente figura:

147. Escriba el siguiente código:


private int numero;
public FMODIFICARFACTURA(int numerofactura)
{
InitializeComponent();
numero = numerofactura;
}

171
VISUAL C# APLICACIÓN Y DESARROLLO

LA CLASE AHORA SE VE ASÍ:

148. Vuelva al diseño del formulario y haga doble clic sobre un área no
ocupada para abrir el evento Load del formulario que debe verse así:

En este evento load obtenemos los datos de la FACTURA que vamos a modificar
usando el método CARGAR y le enviamos como parámetro el dato recibido del
formulario FFACTURAS.
Escriba el siguiente código:
FACTURAS fact = DATOSFACTURAS.CARGAR(numero);
numero = fact.NUMERO_FACTURA;
TCODIGO.Text = fact.CODIGO;
TVALFACT.Text = Convert.ToString(fact.VALOR_FACTURA);
TFECHAFACT.Text = Convert.ToString(fact.FECHA_FACTURA);
TFECHAVEN.Text = Convert.ToString(fact.FECHA_VENCIMIENTO);

EL EVENTO DEBE VERSE ASÍ:

149. Vuelva al diseño del formulario y haga doble clic sobre el botón
ACTUALIZAR.
150. Escriba el siguiente código:
'Invocamos el método MODIFICARFACTURA.
DATOSFACTURAS.MODIFICARFACTURA(
Convert.ToInt16(TNUMFACT.Text),
TCODIGO.Text,
Convert.ToDecimal(TVALFACT.Text),
Convert.ToDateTime(TFECHAFACT.Text),
Convert.ToDateTime(TFECHAVEN.Text));

172
VISUAL C# APLICACIÓN Y DESARROLLO

MessageBox.Show("LA FACTURA SE MODIFICÓ SATISFACTORIAMENTE", "AGREGAR FACTURA");


Close();

EL EVENTO SE VERÁ ASÍ:

Al igual que en el formulario de ADICIÓN DE DATOS


FAGREGARFACTURAS tenemos como objetivo que al pulsar la tecla
ENTER el punto de inserción pase a la siguiente caja de texto.
151. Haga que el punto de inserción pase de una caja de texto a otra al

152. Pulse la tecla F5 para ver lo que hemos hecho.


Seleccionamos el registro correspondiente a la FACTURA No. 15
como ilustra la siguiente figura:

153. Haga clic sobre el botón MODIFICAR para abrir el formulario


FMODIFICARFACT que es el formulario donde se cargan los datos
de la FACTURA seleccionado para fines de modificación. Vea la
siguiente figura:

173
VISUAL C# APLICACIÓN Y DESARROLLO

En la figura anterior vemos como los datos de la FACTURA No. 15


se cargan en el formulario.
154. Cambie el código a 003 y la fecha de vencimiento a 03/03/14:

155. Haga clic sobre el botón ACTUALIZAR.


APARECE EL SIGUIENTE MENSAJE:

156. Haga clic sobre el botón ACEPTAR para cerrar el formulario actual y
volver al formulario de MANTENIMIENTO DE FACTURAS.

LA SIGUIENTE FIGURA ILUSTRA LOS CAMBIOS EFECTUADOS:

174
VISUAL C# APLICACIÓN Y DESARROLLO

ELIMINACIÓN DE REGISTROS

En el evento Click del botón ELIMINAR eliminaremos el registro


correspondiente al FACTURA seleccionado en el en el ADATAGRIDVIEW
DGVFACTURAS y le enviamos como parámetro el código de la FACTURA
seleccionado al método ELIMINARFACTURA.
157. Vaya al diseño del formulario FFACTURAS y haga doble clic sobre el
botón ELIMINAR.
158. Escriba el siguiente código:
DialogResult respuesta = MessageBox.Show(
"DESEA ELIMINAR ESTA FACTURA?", "ADVERTENCIA DE ELIMINACION",
MessageBoxButtons.YesNo);
if (respuesta == DialogResult.Yes)
{
DataGridViewRow FILA = DGVFACTURAS.CurrentRow;
int numerofactura = Convert.ToUInt16(FILA.Cells[0].Value);
DATOSFACTURAS.ELIMINARFACTURA(numerofactura);
MessageBox.Show(
"SE HA BORRADO LA FACTURA" + numerofactura,"REGISTRO
ELIMINADO");
DGVFACTURAS.DataSource = DATOSPROVEEDORES.MOSTRARDATOS();
}

EL EVENTO DEBE VERSE ASÍ:

175
VISUAL C# APLICACIÓN Y DESARROLLO

159. Pulse la tecla F5 para ver los resultados.


160. Seleccione la FACTURA No. 17 como muestra la siguiente figura:

161. Haga clic sobre el botón ELIMINAR.


APARECE EL SIGUIENTE MENSAJE:

162. Haga clic sobre el botón Sí.


APARECE EL SIGUIENTE MENSAJE:

176
VISUAL C# APLICACIÓN Y DESARROLLO

163. Haga clic sobre el botón Aceptar.

EL LA FIGURA SIGUIENTE YA NO EXISTE LA FACTURA No.


17.

164. Añada un formulario llamado FCHEQUES.


165. En la propiedad Text del formulario ponga MANTENIMIENTO DE
CHEQUES.
166. Añada dos formularios más uno llamado FAGREGARCHEQUES y
otro FMODIFICARCHEQUES y en la propiedad Text le pondrá
REGISTRAR DATOS DE CHEQUES y MODIFICAR DATOS DE
CHEQUES respectivamente.

DISEÑO DE LA INTERFAZ GRÁFICA DEL FORMULARIO DE


MANTENIMIENTO DE CHEQUES

177
VISUAL C# APLICACIÓN Y DESARROLLO

La figura anterior muestra el formulario maestro de control con


respecto a las FCHEQUES y contendrá los siguientes controles:

 El DATAGRIDVIEW DGVFCHEQUES donde se


 mostrarán los datos de los CHEQUES existentes.
 Una Etiqueta o Label con el texto BUSCAR CHEQUES
POR:
 Un Panel dentro del cual colocaremos todas las cajas de
texto o Texboxs y etiquetas o Labels.
 Un Label con el texto NÚMERO CHEQUE.
 El Textbox TNUMCHE en el que se escribirá el número
del CHEQUE que se desea encontrar.
 Un Label con el texto NÚMERO CHEQUE.
 El Textbox TNUMEROFACTURA en el que se escribirá el
número de la factura cuyos CHEQUE se desean
encontrar.
 El botón AGREGAR para insertar nuevos FCHEQUES
 El botón MODIFICAR para hacer cambios a los datos de
los CHEQUES.
 El botón ELIMINAR que nos permitirá borrar un CHEQUE.
167. Ahora vuelva al diseño del formulario FCHEQUES.
168. Añada los controles indicados arriba.

EL FORMULARIO QUEDARÁ ASÍ:

178
VISUAL C# APLICACIÓN Y DESARROLLO

DISEÑO DE LA INTERFAZ GRÁFICA DEL FORMULARIO DE


ADICIÓN DE FCHEQUES

169. Vaya el diseño del formulario FAGREGARCHEQUES.

La figura anterior muestra el formulario que se usará para


insertar nuevos FCHEQUES y contendrá los siguientes
controles:

179
VISUAL C# APLICACIÓN Y DESARROLLO

 El botón AGREGAR para añadir el CHEQUE y cerrar


volver al formulario FCHEQUES con la actualización.
 Cuatro etiquetas (Labels) con los siguientes textos:
 NÚMERO CHEQUE
 NÚMERO CHEQUE
 VALOR CHEQUE
 FECHA CHEQUE
 Cuatro TEXTBOXs O CAJAS DE TEXTO con los
siguientes nombres:
 TNUMCHEQ
 TNUMFACT
 TVALCHEQ
 TFECHACHEQ
170. Añada los controles arriba indicados.
EL FORMULARIO QUEDARÁ ASÍ:

DISEÑO DE LA INTERFAZ GRÁFICA DEL FORMULARIO DE


MODIFICACIÓN DE CHEQUES
171. Vaya al formulario FMODIFICARCHEQUES.

180
VISUAL C# APLICACIÓN Y DESARROLLO

La figura anterior muestra el formulario que se usará para


modificar CHEQUES contendrá los siguientes controles:

 El botón ACTUALIZAR para modificar el cheque y cerrar


volver al formulario FCHEQUES con la actualización.
 Cuatro etiquetas (Labels) con los siguientes textos:
 NÚMERO CHEQUE
 NÚMERO CHEQUE
 VALOR CHEQUE
 FECHA CHEQUE
 Cuatro TEXTBOXs O CAJAS DE TEXTO con los
siguientes nombres:
 TNUMCHEQ
 TNUMFACT
 TVALCHEQ
 TFECHACHEQ
172. Añada los controles arriba indicados.
EL FORMULARIO QUEDARÁ ASÍ:

181
VISUAL C# APLICACIÓN Y DESARROLLO

PROGRAMACIÓN DE LA CLASE DATOSCHEQUES


Dentro de esta clase haremos lo siguiente:
 Crear un método que nos devuelva una lista de tipo CHEQUES.
 Dentro del método crearemos una instancia de nuestro modelo
 Crear la consulta usando linq la cual nos mostrará todos los
registros existentes en la tabla FCHEQUES.
 Crear dos métodos más que nos permitan buscar FCHEQUES por
el número y por el código del cliente.

173. Haga doble clic sobre la clase DATOSFCHEQUES.

ESTA ES LA ESTURCTURA DE LA CLASE QUE ESTA VACÍA:

182
VISUAL C# APLICACIÓN Y DESARROLLO

CREACIÓN DE MÉDOTOS DE RECUPERACIÓN Y BÚSQUEDA


174. Escriba el siguiente código:
public static List<CHEQUES> MOSTRARCHEQUES()
{
//ESTA ES UNA INSTANCIA DE NUESTRO MODELO DE LA BASE DE DATOS
using (SCXPEntities BD = new SCXPEntities())
{
//MUESTRA TODOS LAS CHEQUES

var INFO = (from C in BD.CHEQUES


select C).ToList();

return INFO;
}

}
public static List<CHEQUES> BUSCARELNUMERO(int numerocheque)
{
using (SCXPEntities BD = new SCXPEntities())
{
//USAMOS LINQ. PARA BUSCAR UN CHEQUE POR EL NÚMERO

var INFO = (from C in BD.CHEQUES


where C.NUMERO_CHEQUE == numerocheque
select C).ToList();
/*StartsWith HACE QUE VAYA MOSTRANDO LOS CHEQUES QUE
EMPIEZEN CON EL NÚMERO QUE VAMOS ESCRIBIENDO*/

return INFO;
}
}
//ESTE MÉTODO BUSCA LOS CHEQUES DE UNA FACTURA POR EL NÚMERO DE LA FACTURA
public static List<CHEQUES> BUSCARNUMERO_FACTURA(int NUMERO_FACTURA)
{
using (SCXPEntities BD = new SCXPEntities())
{
//USAMOS LINQ. PARA BUSCAR CHEQUES POR EL NUMERO_FACTURA

var INFO = (from C in BD.CHEQUES


where C.NUMERO_FACTURA == NUMERO_FACTURA
select C).ToList();
/*StartsWith HACE QUE VAYA MOSTRANDO LOS CHEQUES HECHOS A LAS FACTURAS
* QUE EMPIEZEN CON EL NÚMERO QUE VAMOS ESCRIBIENDO*/

return INFO;
}

}
Los dos métodos anteriores se usan, el primero para mostrar todos los
CHEQUES y los otros dos para buscar los cheques por los campos
NUMEROCHEQUE.

Aún faltan los métodos que nos permitirán agregar, eliminar y modificar
CHEQUES.

183
VISUAL C# APLICACIÓN Y DESARROLLO

CREACIÓN DEL MÉDOTO INSERTAR UN NUEVO CHEQUE


El siguiente código crea un método que recibe los parámetros acorde a
los campos de la tabla CHEQUES para agregar registros.

Dentro del método creamos una instancia del modelo de la base de


datos y luego usamos el método AddObject para agregar un nuevo
objeto, que en este caso es un registro, de tipo CHEQUES y guardamos
los datos en nuestra base de datos (BD) con el método SaveChanges o
Guardar Cambios.
Escriba el siguiente código:
//EL SIGUIENTE MÉTODO AÑADE UN NUEVO REGISTRO
public static void INSERTARCHEQUE
(
int numerocheque,
int numero_factura,
decimal valor_cheque,
DateTime fecha_cheque
)
{
using (SCXPEntities BD = new SCXPEntities())
{
/*PARA INSERTAR UN NUEVO OBJETO O CHEQUE ASIGNANDO LOS VALORES DE LOS
PARÁMETROS A LOS CAMPOS DE LA TABLA.*/

BD.CHEQUES.AddObject(new CHEQUES
{
NUMERO_CHEQUE = numerocheque,
NUMERO_FACTURA = numero_factura,
VALOR_CHEQUE = valor_cheque,
FECHA_CHEQUE = fecha_cheque
});
BD.SaveChanges();
}
}

CREACIÓN DEL MÉDOTO PARA MODIFICAR UNA CHEQUE

Este método difiere poco del anterior creamos con la diferencia


de que hay que consultar el registro o CHEQUE que se va a
modificar.

175. Escriba el siguiente código:


//EL SIGUIENTE MÉTODO MODIFICA UN REGISTRO
public static void MODIFICARCHEQUE
(
int numerocheque,
int numero_factura,
decimal valor_cheque,
DateTime fecha_cheque
)

184
VISUAL C# APLICACIÓN Y DESARROLLO

{
using (SCXPEntities BD = new SCXPEntities())
{
var MODIFICAR = (from F in BD.CHEQUES
where F.NUMERO_CHEQUE == numerocheque
select F).Single();
MODIFICAR.NUMERO_CHEQUE = numerocheque;
MODIFICAR.NUMERO_FACTURA =numero_factura;
MODIFICAR.VALOR_CHEQUE = valor_cheque;
MODIFICAR.FECHA_CHEQUE = fecha_cheque;
BD.SaveChanges();
}
}

CREACIÓN DEL MÉTODO PARA ELIMINAR UN CHEQUE

Este método recibirá un parámetro que llamado código que servirá


para buscar y eliminar el CHEQUE. Aquí también haremos uso de Linq y
una vez visualizado el registro procedemos a eliminarlo usando el
método DeleteObject y por último guardamos los cambios con el
método SaveChanges.
176. Escriba el siguiente código:
public static void ELIMINARCHEQUE(int numerocheque)
{
using (SCXPEntities BD = new SCXPEntities())
{
var ELIMINA = (from F in BD.CHEQUES
where F.NUMERO_CHEQUE == numerocheque
select F).Single();

BD.DeleteObject(ELIMINA);
BD.SaveChanges();
}
}
public static CHEQUES CARGAR(int numerocheque)
{
CHEQUES CHEQUES = new CHEQUES();
using (SCXPEntities BD = new SCXPEntities())
{
var INFO = (from F in BD.CHEQUES
where F.NUMERO_CHEQUE == numerocheque
select F).Single();

CHEQUES.NUMERO_CHEQUE = INFO.NUMERO_CHEQUE;
CHEQUES.NUMERO_FACTURA = INFO.NUMERO_FACTURA;
CHEQUES.VALOR_CHEQUE = INFO.VALOR_CHEQUE;
CHEQUES.FECHA_CHEQUE = INFO.FECHA_CHEQUE;

return CHEQUES;
}
}

CREACIÓN DEL MÉTODO QUE CARGA LOS DATOS DE LA


CHEQUE QUE SE DESEA MODIFICAR.

185
VISUAL C# APLICACIÓN Y DESARROLLO

El siguiente método de tipo CHEQUES recibe el parámetro


numerocheque que usaremos en una consulta que crearemos usando
Linq para recuperar. Una vez consultado el CHEQUE le asignamos a
cada propiedad o campo de nuestra clase FCHEQUES los datos
resultantes por medio de la consulta y luego devolvemos los datos
modificados.

177. Escriba el siguiente código:


public static CHEQUES CARGAR(int numerocheque)
{
CHEQUES CHEQUES = new CHEQUES();
using (SCXPEntities BD = new SCXPEntities())
{
var INFO = (from F in BD.CHEQUES
where F.NUMERO_CHEQUE == numerocheque
select F).Single();

CHEQUES.NUMERO_CHEQUE = INFO.NUMERO_CHEQUE;
CHEQUES.NUMERO_FACTURA = INFO.NUMERO_FACTURA;
CHEQUES.VALOR_CHEQUE = INFO.VALOR_CHEQUE;
CHEQUES.FECHA_CHEQUE = INFO.FECHA_CHEQUE;

return CHEQUES;
}
}

ESTE ES EL CÓDIGO COMPLETO DE LA CLASE DATOSCHEQUES:

public class DATOSCHEQUES


{
public static List<CHEQUES> MOSTRARCHEQUES()
{
//ESTA ES UNA INSTANCIA DE NUESTRO MODELO DE LA BASE DE DATOS
using (SCXPEntities BD = new SCXPEntities())
{
//MUESTRA TODOS LAS CHEQUES

var INFO = (from C in BD.CHEQUES


select C).ToList();

return INFO;
}

}
public static List<CHEQUES> BUSCARELNUMERO(int numerocheque)
{
using (SCXPEntities BD = new SCXPEntities())
{
//USAMOS LINQ. PARA BUSCAR UN CHEQUE POR EL NÚMERO

186
VISUAL C# APLICACIÓN Y DESARROLLO

var INFO = (from C in BD.CHEQUES


where C.NUMERO_CHEQUE == numerocheque
select C).ToList();
return INFO;
}
}
//ESTE MÉTODO BUSCA LOS CHEQUES DE UNA FACTURA POR EL NÚMERO DE LA FACTURA
public static List<CHEQUES> BUSCARNUMERO_FACTURA(int NUMERO_FACTURA)
{
using (SCXPEntities BD = new SCXPEntities())
{
//USAMOS LINQ. PARA BUSCAR CHEQUES POR EL NUMERO_FACTURA

var INFO = (from C in BD.CHEQUES


where C.NUMERO_FACTURA == NUMERO_FACTURA
select C).ToList();
return INFO;
}

}
//EL SIGUIENTE MÉTODO AÑADE UN NUEVO REGISTRO
public static void INSERTARCHEQUE
(
int numerocheque,
int numero_factura,
decimal valor_cheque,
DateTime fecha_cheque

)
{
using (SCXPEntities BD = new SCXPEntities())
{
/*PARA INSERTAR UN NUEVO OBJETO O CHEQUE ASIGNANDO LOS VALORES DE
LOS
PARÁMETROS A LOS CAMPOS DE LA TABLA.*/

BD.CHEQUES.AddObject(new CHEQUES
{
NUMERO_CHEQUE = numerocheque,
NUMERO_FACTURA = numero_factura,
VALOR_CHEQUE = valor_cheque,
FECHA_CHEQUE = fecha_cheque
});
BD.SaveChanges();
}
}
//EL SIGUIENTE MÉTODO MODIFICA UN REGISTRO
public static void MODIFICARCHEQUE
(
int numerocheque,
int numero_factura,
decimal valor_cheque,
DateTime fecha_cheque
)
{
using (SCXPEntities BD = new SCXPEntities())
{

187
VISUAL C# APLICACIÓN Y DESARROLLO

var MODIFICAR = (from F in BD.CHEQUES


where F.NUMERO_CHEQUE == numerocheque
select F).Single();
MODIFICAR.NUMERO_CHEQUE = numerocheque;
MODIFICAR.NUMERO_FACTURA =numero_factura;
MODIFICAR.VALOR_CHEQUE = valor_cheque;
MODIFICAR.FECHA_CHEQUE = fecha_cheque;
BD.SaveChanges();
}
}
public static void ELIMINARCHEQUE(int numerocheque)
{
using (SCXPEntities BD = new SCXPEntities())
{
var ELIMINA = (from F in BD.CHEQUES
where F.NUMERO_CHEQUE == numerocheque
select F).Single();

BD.DeleteObject(ELIMINA);
BD.SaveChanges();
}
}
public static CHEQUES CARGAR(int numerocheque)
{
CHEQUES CHEQUES = new CHEQUES();
using (SCXPEntities BD = new SCXPEntities())
{
var INFO = (from F in BD.CHEQUES
where F.NUMERO_CHEQUE == numerocheque
select F).Single();

CHEQUES.NUMERO_CHEQUE = INFO.NUMERO_CHEQUE;
CHEQUES.NUMERO_FACTURA = INFO.NUMERO_FACTURA;
CHEQUES.VALOR_CHEQUE = INFO.VALOR_CHEQUE;
CHEQUES.FECHA_CHEQUE = INFO.FECHA_CHEQUE;

return CHEQUES;
}
}
}

188
VISUAL C# APLICACIÓN Y DESARROLLO

PROGRAMACIÓN DEL FORMULARIO DE MANTENIMIENTO DE


CHEQUES
178. Vaya el diseño del formulario FCHEQUES.

INVOCAR EL MÉDOTO MOSTRARFCHEQUES DESDE EL EVENTO


LOAD DEL FORMULARIO
179. Haga doble clic en un área no ocupada.

Escriba el siguiente código:


//INVOCAMOS EL MÉTODO MÉTODO MOSTRARCHEQUES DE LA CLASE DATOSCHEQUES
DGVCHEQUES.DataSource = DATOSCHEQUES.MOSTRARCHEQUES();
//OCULTAMOS LA COLUMNA FACTURAS Y CHEQUES PARA QUE NO APAREZCA EN EL DATAGRID
VIEW.
DGVCHEQUES.Columns["FACTURAS"].Visible = false;

ESTO ES DEBIDO A LA RELACIÓN QUE EXISTE ENTRE LAS TABLAS


CHEQUES Y FACTURAS COMO MUESTRA LA ENTIDAD CHEQUES EN EL
DISEÑO DEL DATA MODEL:

180. Ahora la ventana de la clase se ve así:

181. Pulse la tecla F5 para ver los resultados de los que hemos hecho
hasta ahora.
ESTA ES LA VENTANA DE RESULTADO:

189
VISUAL C# APLICACIÓN Y DESARROLLO

BÚSQUEDA DINÁMICA DE CHEQUES

Ya creamos varios métodos de búsqueda, uno por cada campo, en la


clase DATOSFCHEQUES programando los mismos para que empiece la
búsqueda los FCHEQUES que cumplen con el criterio al momento al
momento de escribir la primera letra (StarWith) en buscar por el código
del cliente. Pero para que la búsqueda sea dinámica e interactiva
usaremos el evento TextChanged de cada TextBox.
182. Haga doble clic sobre el TextBox TNUMEROCHEQUE y escriba lo
siguiente:

try
{
DGVCHEQUES.DataSource =
DATOSCHEQUES.BUSCARELNUMERO(int.Parse(TNUMCHEQ.Text));
}
catch
{
MessageBox.Show("LA ENTRADA DEBE SER NUMÉRICA");
TNUMCHEQ.Focus();
}

190
VISUAL C# APLICACIÓN Y DESARROLLO

EL EVENTO AHORA DEBE VERSE ASÍ:

183. Pulse la tecla F5 para ver el resultado.

LA SIGUIENTE FIGURA MUESTRA LO QUE SUCEDE SI SE DIGITA UN


TEXTO O UN ESPACIO EN BANCO.

OBSERVE QUE AL ESCRIR EL NÚMERO DE CHEQUE 5 SE MUESTRAN LOS DATOS


DE ESE CHEQUE.

191
VISUAL C# APLICACIÓN Y DESARROLLO

184. Haga doble clic sobre el TextBox TNUMFACT y escriba lo


siguiente:

try
{
DGVCHEQUES.DataSource =
DATOSCHEQUES.BUSCARELNUMERO(int.Parse(TNUMFACT.Text));
}
catch
{
MessageBox.Show("LA ENTRADA DEBE SER NUMÉRICA");
TNUMFACT.Focus();

EL EVENTO AHORA DEBE VERSE ASÍ:

185. Pulse la tecla F5 para ver el resultado.

192
VISUAL C# APLICACIÓN Y DESARROLLO

OBSERVE QUE AL ESCRIR EL NUMERO DE FACTURA 3 SE MUESTRAN TODOS LOS


CHEQUES HECHOS PARA ESE FACTURA.

ADICIÓN DE FCHEQUES
Ya hemos visto cómo se cargan los datos de los FCHEQUES en el
DataGridView. Ahora veremos cómo se añaden registros a la tabla
Proveedores.

Es necesario crear un método que detecte el cierre de los


formularios FAGREGARCHEQUES y FMODIFICARCHEQUES
con el objetivo de guardar los datos de los nuevos FCHEQUES así
como actualizar los datos cuando se ha hecho una modificación.
186. En la ventana Propiedades haga clic sobre el botón Event (Eventos)
para mostrar todos los eventos del formulario.
187. Haga doble clic dentro de la caja de texto del evento FormClosed
para crear el método correspondiente.
188. Escriba el siguiente código:
‘Cargamos los datos después de cerrar los formularios FAGREGARCHEQUES y/o FMODIFICAR
DGVCHEQUES.DataSource = DATOSCHEQUES.MOSTRARCHEQUES();

EL EVENTO SE VE ASÍ:

193
VISUAL C# APLICACIÓN Y DESARROLLO

189. Vuelva al diseño del formulario y haga doble clic sobre el botón
AGREGAR.
APARECE EL CUERPO DEL EVENTO CLICK DEL BOTÓN BAGREGAR:

190. Escriba el siguiente código:


FAGREGARCHEQUES FAC = new FAGREGARCHEQUES();
/* Abrimos el formulario y actualizamos DataGrid View DGVCHEQUES
después de cerrarlo */
FAC.FormClosed += new
System.Windows.Forms.FormClosedEventHandler(FCHEQUES_FormClosed);
FAC.Show();

EL EVENTO AHORA SE VE ASÍ:

PARA PASAR AL SIGUIENTE TEXTBOX CON LA TECLA ENTER

En esta ocasión tenemos como objetivo que al pulsar la tecla ENTER el


punto de inserción pase a la siguiente caja de texto.
191. Vaya al diseño del formulario FAGREGARCHEQUES.
192. Seleccione la caja de texto TNUMCHEQ.
193. Escriba el siguiente código:
if ((int)e.KeyChar == (int)Keys.Enter)
{
TNUMFACT.Focus();
}

194. Repita los mismos pasos para que se pueda pasar al siguiente control
al pulsar la tecla ENTER desde las cajas de texto TNUMFACT,
TVALCHEQ, TFECHACHEQ.

Debe verse así:

194
VISUAL C# APLICACIÓN Y DESARROLLO

195. Vuelva al diseño del formulario FAGREGARCHEQUES.


196. Haga doble clic sobre el botón AGREGAR
197. Escriba el siguiente código:

try
{
DATOSCHEQUES.INSERTARCHEQUE(
int.Parse(TNUMCHEQ.Text),
int.Parse(TNUMFACT.Text),
decimal.Parse(TVALCHEQ.Text),
DateTime.Parse(TFECHACHEQ.Text)
);

MessageBox.Show("EL CHEQUE SE AGREGÓ SATISFACTORIAMENTE", "AGREGAR CHEQUE");


Close();
}
catch
{
MessageBox.Show("ENTRADA INVALIDA. TRATE DE NUEVO");
TNUMCHEQ.Focus();
}

195
VISUAL C# APLICACIÓN Y DESARROLLO

EL EVENTO SE VERÁ ASÍ:

198. Pulse la tecla F5 para probar lo que hemos hecho.


199. Haga clic sobre el botón agregar.
APARECE EL FORMULARIO AGREGAR CHEQUES:

200. Escriba los datos del nuevo CHEQUE según muestra la siguiente
figura pulsando la techa ENTER para pasar siempre al próximo
TextBox:

196
VISUAL C# APLICACIÓN Y DESARROLLO

201. Haga clic sobre el botón AGREGRAR para guardar el registro.


APARECE EST MENSAJE:

202. Haga clic para cerrar el formulario actual y volver al formulario de


mantenimiento de CHEQUES con la actualización.
OBSERVE EL NUEVO REGISTRO EN LA PRIMERA FILA DEL
DATAGRIDVIEW DGVCHEQUES según muestra la siguiente
figura:

197
VISUAL C# APLICACIÓN Y DESARROLLO

MODIFICAR REGISTROS

Ya hemos programado la adición de registros a la tabla FCHEQUES. Ahora veremos


cómo modificaremos registros. Desde el evento Click del botón BMODIFICAR abriremos
el formulario FMODIFICARCHEQUES donde modificaremos los registros de los CHEQUES
y actualizaremos los datos cuando lo cerremos.

CREACIÓN DE UN MÉTODO PARA OBTENER EL NÚMERO DEL CHEQUE A


MODIFICAR

El siguiente método servirá para cargar el registro que vamos a


modificar en el formulario FMODIFICARCHEQUES que es donde se
va a hacer cambios a los registros.

203. Vaya al diseño del formulario FCHEQUES y haga doble clic sobre el
botón MODIFICAR.

Escriba el siguiente código:


DataGridViewRow FILA = DGVCHEQUES.CurrentRow;
int numero = Convert.ToInt16(FILA.Cells[0].Value);
FMODIFICARCHEQUES FMP = new FMODIFICARCHEQUES(numero);
FMP.Show();
FMP.FormClosed += new
System.Windows.Forms.FormClosedEventHandler(FCHEQUES_FormClosed);
DGVCHEQUES.DataSource = DATOSPROVEEDORES.MOSTRARDATOS();

AHORA EL EVENTO SE VE ASÍ:

204. Vaya al diseño del formulario FMODIFICARCHEQUES, luego haga clic


derecho en un área desocupada y escoja la opción View Code como
ilustra la siguiente figura:

198
VISUAL C# APLICACIÓN Y DESARROLLO

APARECE LA ESTRUCTURA DEL CÓDIGO DE LA CLASE:

205. Modifique el código según muestra la siguiente ilustración:


LA CLASE AHORA SE VE ASÍ:

206. Vuelva al diseño del formulario y haga doble clic sobre un área no
ocupada para abrir el evento Load del formulario que debe verse así:

En este evento load obtenemos los datos de la CHEQUE que vamos


a modificar usando el método OBTENERNUMEROCHEQUE y le
enviamos como parámetro el dato recibido del formulario
FCHEQUES.

199
VISUAL C# APLICACIÓN Y DESARROLLO

Escriba el siguiente código:

CHEQUES chq = DATOSCHEQUES.CARGAR(numero);


numero = chq.NUMERO_FACTURA;
TNUMCHEQ.Text = Convert.ToString(numero);
TNUMFACT.Text = Convert.ToString(TNUMFACT.Text);
TVALCHEQ.Text = Convert.ToString(chq.VALOR_CHEQUE);
TFECHACHEQ.Text = Convert.ToString(chq.FECHA_CHEQUE);

EL EVENTO DEBE VERSE ASÍ:

207. Vuelva al diseño del formulario y haga doble clic sobre el botón
ACTUALIZAR.
208. Escriba el siguiente código:

try
{
DATOSCHEQUES.MODIFICARCHEQUE(
int.Parse(TNUMFACT.Text),
int.Parse(TNUMFACT.Text),
Convert.ToDecimal(TVALCHEQ.Text),
Convert.ToDateTime(TFECHACHEQ.Text)
);

MessageBox.Show("EL CHEUQUE SE MODIFICÓ SATISFACTORIAMENTE", "AGREGAR FACTURA");


Close();
}
catch
{
MessageBox.Show("ENTRADA IVÁLIDA. TRATE DE NUEVO", "ERROR DE ENTRADA");
}
}

200
VISUAL C# APLICACIÓN Y DESARROLLO

EL EVENTO DEBE VERSE ASÍ:

Al igual que en el formulario de ADICIÓN DE DATOS


FAGREGARCHEQUES tenemos como objetivo que al pulsar la tecla
ENTER el punto de inserción pase a la siguiente caja de texto.
209. Vaya al diseño del formulario FMODIFICARCHEQUES.
210. Seleccione la caja de texto TNUMCHEQ.
211. Escriba el siguiente código:
if ((int)e.KeyChar == (int)Keys.Enter)
{
TNUMFACT.Focus();
}

212. Repita los mismos pasos para que se pueda pasar al siguiente control
al pulsar la tecla ENTER desde las cajas de texto TNUMFACT,
TVALCHEQ, TFECHACHEQ.

201
VISUAL C# APLICACIÓN Y DESARROLLO

Debe verse así:

213. Pulse la tecla F5 para ver lo que hemos hecho.


Seleccionamos el registro correspondiente a la CHEQUE No. 6
como ilustra la siguiente figura:

214. Haga clic sobre el botón MODIFICAR para abrir el formulario


FMODIFICARCHEQUES que es el formulario donde se cargan los
datos del CHEQUE seleccionado para fines de modificación. Vea la
siguiente figura:

202
VISUAL C# APLICACIÓN Y DESARROLLO

En la figura anterior vemos como los datos del CHEQUE No. 6 se


cargan en el formulario.
215. Cambie el valor del cheque a 75000.00 y la fecha a 3/03/14:

216. Haga clic sobre el botón ACTUALIZAR.


APARECE EL SIGUIENTE MENSAJE:

217. Haga clic sobre el botón ACEPTAR para cerrar el formulario actual y
volver al formulario de MANTENIMIENTO DE CHEQUES.

203
VISUAL C# APLICACIÓN Y DESARROLLO

LA SIGUIENTE FIGURA ILUSTRA LOS CAMBIOS EFECTUADOS:

ELIMINACIÓN DE REGISTROS
En el evento Click del botón ELIMINAR eliminaremos el registro correspondiente
al CHEQUE seleccionado en el en el ADATAGRIDVIEW DGVFCHEQUES y le
enviamos como parámetro el código de la CHEQUE seleccionado al método
ELIMINARCHEQUE.

218. Vaya al diseño del formulario FCHEQUES y haga doble clic sobre el
botón ELIMINAR.
219. Escriba el siguiente código:
DialogResult respuesta = MessageBox.Show(
"DESEA ELIMINAR ESTA FACTURA?", "ADVERTENCIA DE ELIMINACION",
MessageBoxButtons.YesNo);
if (respuesta == DialogResult.Yes)
{
DataGridViewRow FILA = DGVCHEQUES.CurrentRow;
int numercheque = Convert.ToUInt16(FILA.Cells[0].Value);
DATOSFACTURAS.ELIMINARFACTURA(numercheque);
MessageBox.Show(
"SE HA BORRADO LA FACTURA" + numercheque, "REGISTRO ELIMINADO");
DGVCHEQUES.DataSource = DATOSCHEQUES.CARGAR(numercheque);
}

204
VISUAL C# APLICACIÓN Y DESARROLLO

EL EVENTO DEBE VERSE ASÍ:

220. Pulse la tecla F5 para ver los resultados.


221. Seleccione la CHEQUE No. 2 como muestra la siguiente figura:

222. Haga clic sobre el botón ELIMINAR.


APARECE EL SIGUIENTE MENSAJE:

223. Haga clic sobre el botón Sí.


APARECE EL SIGUIENTE MENSAJE:

205
VISUAL C# APLICACIÓN Y DESARROLLO

224. Haga clic sobre el botón Aceptar.

EL LA FIGURA SIGUIENTE YA NO EXISTE LA CHEQUE No. 2.

ESTADO DE CUENTAS DE LOS PROVEEDORES


1. Cree una nueva clase llamada DATOSESTADODECUENTAS.
2. Escriba el siguiente código en la nueva clase.
//ESTE ES EL MÉTODO QUE SE LLAMA MOSTRARFACTURAS
public static List<ESTADODECUENTAS>MOSTRARESTADO()
{
//ESTA ES UNA INSTANCIA DE NUESTRO MODELO DE LA BASE DE DATOS
using ( SCXPEntities BD = new SCXPEntities())
{
//USAMOS LINQ. PARA QUE NOS MUESTRE TODAS LAS FACTURAS EXISTENTES
var INFO = (from E in BD.ESTADODECUENTAS
select E).ToList();
return INFO;
}
}
//ESTE ES EL MÉTODO QUE SE LLAMA BUSCARNUMEROFACTURA
public static List<ESTADODECUENTAS> BUSCARPORNUMEROFACTURA(int numerofactura)
{

206
VISUAL C# APLICACIÓN Y DESARROLLO

/*USAMOS LINQ. PARA BUSCAR UN USUARIO POR EL NUMERO


DE LA FACTURA*/
using (SCXPEntities BD = new SCXPEntities())
{
var INFO = (from E in BD.ESTADODECUENTAS
where E.NUMERO_FACTURA ==numerofactura
select E).ToList();
return INFO;
}
}

//ESTE ES EL MÉTODO QUE SE LLAMA BUSCARPORCODIGO


public static List<ESTADODECUENTAS> BUSCARPORCOIGO(string codigo)
{
/*USAMOS LINQ. PARA BUSCAR UN USUARIO POR EL
* CÓDIGO DEL PROVEEDOR EMPEZANDO CON CUALQUIER LETRA*/
using (SCXPEntities BD = new SCXPEntities())
{
var INFO = (from E in BD.ESTADODECUENTAS
where E.CODIGO == codigo
select E).ToList();
return INFO;
}
}

3. Cree un nuevo formulario llamado FESTADO DE CUENTAS.


4. En la propiedad Text del formulario escriba: ESTADOS DE CUENTAS.
5. Añada un control GROUPBOX y ponga BUSCAR POR: en la propiedad Text.
6. Dentro del GROUPBOX coloque dos etiquetas (LABELS,) dos Cajas de texto
(TextBox) y un Botón.
7. En la propiedad Text de las etiquetas ponga CODIGO DEL PROVEEDOR Y
NUMERO FACTURA RESPECTIVAMENTE y en el botón VER TODOS.
8. Nombre los TEXTBOXS como TPORCODIGO y TPORNUMEROFACTURA
respectivamente y el
9. botón como BVERTODOS.
10. Añada un DvGridView y nómbrelo como DGVESTADOCUENTAS.
EL FORMULARIO DEBERÁ VERSE ASÍ:

207
VISUAL C# APLICACIÓN Y DESARROLLO

11. Haga doble clic en un área no ocupada del formulario para abrir el evento Load.
Escriba:
DGESTADODECUENTAS.DataSource = DATOSESTADO.MOSTRARESTADO();

12. Vuelva el diseño del formulario y haga doble clic sobre el Textbox TCODIGO para
abrir el evento Textchange y escriba:

DGESTADODECUENTAS.DataSource = DATOSESTADO.BUSCARPORCOIGO(TPORCODIGO.Text);

13. Vuelva el diseño del formulario y haga doble clic sobre el Textbox
TNUMEROFACRURA para abrir el evento Textchange y escriba:

DGESTADODECUENTAS.DataSource =
DATOSESTADO.BUSCARPORNUMEROFACTURA(int.Parse(TPORNUMEROFACTURA.Text));

14. Vuelva al diseño del formulario y haga doble clic sobre el botón VERTODOS.
15. Escriba:

DGESTADODECUENTAS.DataSource = DATOSESTADO.MOSTRARESTADO();

208
VISUAL C# APLICACIÓN Y DESARROLLO

ESTE ES EL CÓDIGO COMPLETO DEL FORMULARIO:

CREACIÓN DE LOS REPORTES


16. Añada cuatro formularios con los siguientes nombres:
 FRPROVEEDORES
 FRFACTURAS
 FRCHEQUES
 FRESTADO

CREACIÓN DE LOS REPORTES


17. Añada cuatro formularios con los siguientes nombres:
 FRPROVEEDORES
 FRFACTURAS
 FRCHEQUES
 FRESTADO

REPORTE DE PROVEEDORES
18. En el explorador de soluciones haga clic derecho sobre el nombre del proyecto, seleccione
Add y escoja New Item.
19. Escoja la plantilla Reporting y haga clic sobre el elemento Report.

209
VISUAL C# APLICACIÓN Y DESARROLLO

20. En el cuadro de texto Name escriba: RPROVEEDORES y haga clic sobre el botón Add para
que aparezca la ventana de diseño del reporte.

AÑADIR TABLA AL DISEÑO DEL REPORTE

21. Haga clic derecho en la ventana del diseño, seleccione Insert y escoja Table.

210
VISUAL C# APLICACIÓN Y DESARROLLO

22. Haga clic sobre el botón New.

23. Escoja la opción Database y haga clic sobre el botón Next.


24. Escoja la opción DataSet y Luego sobre el botón Next.
25. Clic de nuevo sobre el botón Next.

211
VISUAL C# APLICACIÓN Y DESARROLLO

26. Seleccione los nodos Tables y Views (Tablas y Vistas) y haga clic sobre el botón Finish.
27. En el cuadro desplegable Data Source escoja SCXPDataSet.

28. En el cuadro desplegable Avalable Datsets escoja PROVEEDORES y haga clic sobre el botón
OK.

212
VISUAL C# APLICACIÓN Y DESARROLLO

AÑADIENDO ENCABEZADO Y PIE E PÁGINA


29. Haga clic derecho dentro de la ventana de diseño y escoja Add Page Header para añadir
encabezado o Ad Page Footer para añadir pie de página.

30. Haga clic derecho dentro del área del encabezado seleccione Insert y escoja TextBox.

31. Escriba: LISTADO DE LOS PROVEEDORES, escoja el tamaño y el tipo de letra que desee.
32. Añada un Page Footer o pie de página, luego inserte un TextBox y escriba dentro la
siguiente expresión: =Globals!PageNumber

AÑADIR COLUMNAS A LA TABLA


33. Haga clic derecho dentro de la tabla, seleccione Insert Column y escoja Right para insertar
una columna a la derecha.
ESTE PROCESO LO HARA TRES VECES PARA INSERTAR LAS TRES COLUMNAS QUE FALTAN
PARA LOS CAMPOS DE LA TABLA PROVEEDORES.

VINCULAR LOS CAMPOS DEL DATASET CON LAS ÇOLUMNAS DE LA TABLA

34. En caja columna de la fila Data de la tabla, haga clic para seleccionar y luego en el icono
que aparece en la esquina superior derecho de la celda, luego escoja el campo deseado.

213
VISUAL C# APLICACIÓN Y DESARROLLO

35. Repita el paso anterior para cada campo de la tabla.


EL DISEÑO DEL REPORTE SE VERÁ ASÍ:

36. Vaya al diseño del formulario FRPROVEEDORES.


37. Añada un control ReportViewer.

214
VISUAL C# APLICACIÓN Y DESARROLLO

38. Haga clic en el icono ReportViewer Tasks y escoja el reporte de


proveedores.
ESTE ES EL REPORTE EN TIEMPO DE EJECUCIÓN:

USO DEL ASISTENTE

Para crear reportes de forma rápida y sencilla Visual Studio tiene un


asistente para reportes que simplifica el proceso para el caso de que desee
ganar tiempo o para programadores inexpertos.

Los siguientes reportes lo haremos usando el asistente.

REPORTE DE FACTURACIÓN
39. Añada un nuevo reporte al proyecto, pero esta vez escogerá Report Wizard como muestra
la siguiente ilustración:

215
VISUAL C# APLICACIÓN Y DESARROLLO

40. Nombre este reporte como FACTURACION y haga clic sobre el botón Add.
41. En el cuadro desplegable Data Source escoja SCXPDataSet.
42. En el cuadro desplegable Avalailable Data Sources escoja FACTURAS y haga clic sobre el
botón Next.

216
VISUAL C# APLICACIÓN Y DESARROLLO

43. Arrastre los campos a las secciones indicadas en la siguiente figura:

44. Haga clic sobre el botón Next.


45. Asegúrese que la opción Shows subtotals and grand totals y Blocked, subtotal Below estén
marcadas.

46. Escoja el estilo que desea aplicar al informe.

217
VISUAL C# APLICACIÓN Y DESARROLLO

47. Haga clic sobre el botón Finish.

APARECE EL DISEÑO DEL INFORME.

48. Añada un encabezado con el texto apropiado y un pie de página con el número de la
página.
49. Añada un ReportViewer al formulario FRFACTURAS y escoja el reporte que acabamos de
crear.

218
VISUAL C# APLICACIÓN Y DESARROLLO

ESTE ES EL REPORTE EN TIEMPO DE EJECUCIÓN:

219
VISUAL C# APLICACIÓN Y DESARROLLO

CREACIÓN DEL INSTALADOR

1. En el Soluction Explorer o Explorador de Soluciones, haga clic derecho sobre el nombre


de la solución, como lo indica la ilustración, seleccione Add y escoja New Project.

2. Expanda el nodo Other Project Types de la sección Installed Templates y luego Setup and
Deployment.

3. Escoja Visual Studio Installer y ,del cuadro de la derecha, seleccione Setup Wizard.
4. Escriba el nombre: INSTALADORCXP y haga clic sobre el botón OK.

220
VISUAL C# APLICACIÓN Y DESARROLLO

5. Haga clic sobre el botón Next.

6. Escoja la opción Create a setup for a Windows Application y haga clic sobre el botón Next.

221
VISUAL C# APLICACIÓN Y DESARROLLO

7. Seleccione todas las opciones como muestra figura anterior y haga clic sobre el botón
Next.

8. Si no desea añadir archivos adicionales, que es nuestro caso, haga clic sobre el botón Next.

222
VISUAL C# APLICACIÓN Y DESARROLLO

9. Haga clic sobre el botón Finish.


10. Haga clic derecho sobre la carpeta User’s Programs Menu , seleccione Add y escoja Project
Output.

11. Escoja Primary Output y haga clic en OK.

223
VISUAL C# APLICACIÓN Y DESARROLLO

12. Haga clic derecho sobre el nombre del archivo que se añadió escoja Crear Shortcut to
Primary Output from CUENTAS POR COBRAR.

13. Abra el menú Build y escoja BUILD INSTALADOR.

INSTALAD EL SISTEMA

14. Localice la carpeta donde se encuentra el instalador y ábrala.

224
VISUAL C# APLICACIÓN Y DESARROLLO

15. Abra la carpeta Debug.

16. Haga doble clic sobre el archivo Setup.exe.

17. Haga clic sobre el botón Next.

18. Si desea que el programa se instale en una carpeta diferente haga clic sobre el botón
Browse y localice la ubicación que desee.

225
VISUAL C# APLICACIÓN Y DESARROLLO

19. Si desea que todos los usuarios usen el sistema escoja la opción Everyone y haga clic sobre
el botón Next.

20. Haga clic sobre el botón Close.

226
VISUAL C# APLICACIÓN Y DESARROLLO

PROBAR EL SISTEMA INSTALADO


21. Abra el menú Inicio y escoja CUENTAS POR PAGAR.

227
VISUAL C# APLICACIÓN Y DESARROLLO

APARECE EL INISIO DE SESIÓN:

ESCRIBA EL NOMBRE DE USUARIO Y LA CONTRASEÑA Y APARECE EL MENÚ


PRINCIPAL

228
VISUAL C# APLICACIÓN Y DESARROLLO

LA FORMA MÁS FÁCIL DE HACER UN SISTEMA

En esta sección desarrollaremos un sistema de cuentas por cobrar


usando otro método en el que nos apoyaremos en la parte visual con la
mínima cantidad de códigos posible.

Este método es cómodo para los desarrolladores novatos y para


desarrollar aplicaciones pequeñas sin complejidad.

Usaremos SQL SERVER 2008 R2 para crear la base de datos.

Estos son los códigos para crear la base de datos en SQL SERVER
CREATE DATABASE CXC

TABLA CLIENTES
USE [CXC]
GO

/****** Object: Table [dbo].[CLIENTES] Script Date: 02/11/2014


01:24:17 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[CLIENTES](


[CODIGO] [nvarchar](7) NOT NULL,
[NOMBRES] [nvarchar](30) NULL,
[APELLIDOS] [nvarchar](30) NULL,
[DIRECCION] [nvarchar](50) NULL,
[CIUDAD] [nvarchar](30) NULL,
[TELEFONO] [nvarchar](30) NULL,
PRIMARY KEY CLUSTERED
(
[CODIGO] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =
OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

TABLA FACTURAS
USE [CXC]
GO

/****** Object: Table [dbo].[FACTURAS] Script Date: 02/11/2014


01:28:00 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON

229
VISUAL C# APLICACIÓN Y DESARROLLO

GO

CREATE TABLE [dbo].[FACTURAS](


[NUMFACT] [int] NOT NULL,
[CODIGO] [nvarchar](7) NULL,
[FECHA_FACTURA] [date] NOT NULL,
[FECHA_VENCIMIENTO] [date] NOT NULL,
[VALOR] [money] NULL,
PRIMARY KEY CLUSTERED
(
[NUMFACT] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =
OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[FACTURAS] WITH CHECK ADD CONSTRAINT


[CLIENTES_FACTURAS] FOREIGN KEY([CODIGO])
REFERENCES [dbo].[CLIENTES] ([CODIGO])
GO

ALTER TABLE [dbo].[FACTURAS] CHECK CONSTRAINT [CLIENTES_FACTURAS]


GO

TABLA RECIBOS
USE [CXC]
GO

/****** Object: Table [dbo].[RECIBOS] Script Date: 02/11/2014


01:28:57 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[RECIBOS](


[NUMFRECIB] [int] NOT NULL,
[NUMFACT] [int] NULL,
[FECHA_RECIBO] [date] NULL,
[MONTO] [money] NULL,
PRIMARY KEY CLUSTERED
(
[NUMFRECIB] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =
OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[RECIBOS] WITH CHECK ADD CONSTRAINT [ABONOS_FACTURAS]


FOREIGN KEY([NUMFACT])
REFERENCES [dbo].[FACTURAS] ([NUMFACT])
GO

230
VISUAL C# APLICACIÓN Y DESARROLLO

ALTER TABLE [dbo].[RECIBOS] CHECK CONSTRAINT [ABONOS_FACTURAS]


GO

RELACIONES ENTRE LAS TABLAS


ALTER TABLE FACTURAS ADD CONSTRAINT CLI_FACT FOREIGN KEY
(CODIGO)REFERENCES CLIENTES (CODIGO)
ON DELETE CASCADE ON UPDATE CASCADE

ALTER TABLE RECIBOS ADD CONSTRAINT FACT_REC FOREIGN KEY


(NUMFACT)REFERENCES FACTURAS (NUMFACT)
ON DELETE CASCADE ON UPDATE CASCADE

CREACIÓN DEL PROYECTO


1. Inicie Visual Studio y coja la opción CREAR PROYECTO. Aparece el
cuadro de diálogo NUEW PROJECT

2. En área PROJECT TYPES escoja C#. Si no aparece C#., haga clic en el


signo de más correspondiente al grupo de opciones OTHER PROJECT
TYPES y escójalo aquí.
3. En el cuadro de testo NAME escriba: CUENTAS POR COBRAR.

231
VISUAL C# APLICACIÓN Y DESARROLLO

4. Haga clic sobre el botón BROWSE (EXAMINAR) y escoja la unidad de


disco y la carpeta donde desea guardar el proyecto y luego haga clic sobre
e botón ACEPTAR. La opción CREATE DIRECTORY FOR SOLUTION
aparece cotejada, lo que indica que dentro de la carpeta escogida se creará
otra carpeta con los archivos de la solución que se está creando.
5. Haga clic sobre el botón OK para finalizar. Aparece el nuevo proyecto con
un formulario en blanco.
6. Abra el menú PROJECT y escoja ADD NEW WINDOWS FORM.
7. En el cuadro de texto NEME escriba FMENUPRI y haga clic sobre el botón
ADD.
8. En la propiedad TEXT de este nuevo formulario escriba: MENÚ
PRINCIPAL.
9. Vuelva al diseño (Form1.CS[ Disign]*) del primer formulario.

En esta parte de nuestro trabajo estableceremos el control de acceso a nuestro


sistema.

1. En la propiedad TEXT del formulario escriba: INICIO DE SESIÓN.


2. En la propiedad NAME escriba FENTRADA.
3. Agregue dos controles LABEL (ETIQUETAS) y dos TEXTBOX
(CUADROS DE TEXTO).
4. En la propiedad TEXT del primer LABEL escriba: NOMBRE DE USUARIO y en
el segundo CONTRASEÑA.
5. En la propiedad NAME de los TEXTBOX ponga TUSUARIO Y TCLAVE
respectivamente.
6. Agregue un control BUTTON y escriba ENTRAR en la propiedad TEXT y
BENTRAR en la propiedad NAME. NUESTRO FORMULARIO SE VERA ASÍ:
7. Haga clic sobre el primer TEXTBOX y busque la propiedad
PASSWORDCHAR, luego póngale un asterisco o cualquier otro carácter que
usted desea se vea cuando escriba la contraseña en lugar de los caracteres
reales.

232
VISUAL C# APLICACIÓN Y DESARROLLO

8. Haga doble clic sobre el botón ENTRADA. Aparece la ventana de código:


public partial class FENTRADA : Form
{
public FENTRADA()
{
InitializeComponent();
}

private void BENTRADA_Click(object sender, EventArgs e)


{

}
9. Haga clic debajo del procedimiento public partial class FENTRADA :
Form y escriba:
String U = "FRANK REYES";
String C = "LA SOLUCION";
FMENUPRI FM;
ASÍ DECLARAMOS LAS VARIABLES C Y U TIPO CADENAS O
STRING DONDE ALMACENAMOS EL NOMBRE DEL USUARIO Y LA
CONTRASEÑA QUE USAREMOS PARA ACCEDER AL SISTEMA.
TAMBIEN DECLARAMOS EL FORMULARIO FM TIPO FMENUPRI
QUE ES EL MENU PRINCIPAL DEL SISTEMA.
10. Haga clic debajo del procedimiento
private void BENTRADA_Click(object sender, EventArgs e)
{

11. Escriba el siguiente CÓDIGO


{

233
VISUAL C# APLICACIÓN Y DESARROLLO

if (TUSUARIO.Text == U & TCLAVE.Text == C)


{
FM = new FMENUPRI();

this.Hide();
FM.ShowDialog(this);
}
else
{
MessageBox.Show("NOMBRE DE USUARIO O CONTRASEÑA INVALIDO");
TUSUARIO.Focus();
}

HAREMOS QUE AL QUE PODEMOS DESPLAZARNOS HACIA EL PRÓXIMO


CUADRO DE TEXTO Y HASTA EL BOTÓN ENTRADA AL PULSAR LA TECLA
ENTER.
12. Vuelva al formulario y haga clic sobre la caja de texto TUSUARIO.
13. Despliegue la pestaña de eventos como muestra la siguiente
figura:

14. Haga doble clic dentro de la caja de texto del evento KEYDOWN.

APARECE EL SIGUIENTE PROCEDIMIENTO:


private void TUSUARIO_KeyDown(object sender, KeyEventArgs e)
{

}
15. Escriba el siguiente código:
if (e.KeyValue == 13)
TCLAVE.Focus();

QUIERE DECIR QUE SI EL VALOR DE LA TECLA PULSADA ES IGUAL A


TRECE, QUE ES EL VALOR DE LA TECLA ENTER, ENTONCES MUEVA EL
FOCO A LA CAJA DE TEXTO TCLAVE.
16. Vuelva al formulario y haga clic sobre la caja de texto TCLAVE.
17. Haga doble clic dentro de la caja de texto del evento KEYDOWN.

234
VISUAL C# APLICACIÓN Y DESARROLLO

APARECE EL SIGUIENTE PROCEDIMIENTO:


private void TCLAVE_KeyDown(object sender, KeyEventArgs e)
{

}
18. Escriba el siguiente código:
if (e.KeyValue == 13)
BENTRADA.Focus();

QUIERE DECIR QUE SI EL VALOR DE LA TECLA PULSADA ES IGUAL A


TRECE, QUE ES EL VALOR DE LA TECLA ENTER, ENTONCES MUEVA EL
FOCO A AL BOTON BENTRADA.

235
VISUAL C# APLICACIÓN Y DESARROLLO

CONVERSIÓN DEL TEXTO DE ENTRADA EN MAYÚSCULAS

Ahora haremos que cualquier texto que escribamos en las cajas de texto
TUSUARIO y TCLAVE se convierta automáticamente en mayúscula.
Esto es necesario porque el nombre de usuario y la contraseña
asignados a las variables U y C, variables estas con cuyo contenido se
validará lo que digitemos en las cajas de texto antes mencionadas,
estan en mayúsculas. Así, no importa si el teclado esté en mayúsculas
o en minúsculas, convertirá el texto en mayúsculas.

19. Vuelva al formulario y haga clic sobre la caja de texto TUSUARIO.


20. Haga doble clic sobre la caja de texto del evento KEYPRESS.

APARECE EL SIGUIENTE PROCEDIMIENTO:


private void TUSUARIO_KeyPress(object sender, KeyPressEventArgs e)
{
}
21. Escriba el siguiente código:
e.KeyChar = char.ToUpper(e.KeyChar);

22. Vuelva al formulario y haga clic sobre la caja de texto TCLAVE.


23. Repita los pasos 20 y 21.

EL CODIGO COMPLETO ES ESTE:

namespace ENTRADA
{
public partial class FENTRADA : Form
{
String U = "FRANK REYES";
String C = "LA SOLUCION";
FMENUPRI FM;
public FENTRADA()
{
InitializeComponent();
}
private void BENTRADA_Click(object sender, EventArgs e)
{
if (TUSUARIO.Text == U & TCLAVE.Text == C)
{
FM = new FMENUPRI();

this.Hide();
FM.ShowDialog(this);

236
VISUAL C# APLICACIÓN Y DESARROLLO

}
else
{
MessageBox.Show("NOMBRE DE USUARIO O CONTRASEÑA INVALIDO");
TUSUARIO.Focus();
}

}
private void TUSUARIO_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyValue == 13)

TCLAVE.Focus();
}

private void TCLAVE_KeyDown(object sender, KeyEventArgs e)


{
if (e.KeyValue == 13)
BENTRADA.Focus();
}
private void TUSUARIO_KeyPress(object sender,
KeyPressEventArgs e)
{
e.KeyChar = char.ToUpper(e.KeyChar);
}
private void TCLAVE_KeyPress(object sender, KeyPressEventArgs e)
{
e.KeyChar = char.ToUpper(e.KeyChar);
}

}
}

24. PULSE LA TECLA F5 PARA EJECUTAR EL PROYECTO.


25. ESTA ES LA VENTANA DE LA EJECUCION O CORRIDA.

237
VISUAL C# APLICACIÓN Y DESARROLLO

SI EL NOMBRE DEL USUARIO O LA CONTRASEÑA ESTA INCORRECTO,


APARARECE ESTE MENSAJE:

CUANDO SE ESCRIBE EL NOMBRE DE USUARIO Y LA CONTRASEÑA


CORRECTAMENTE, APARECE EL FORMULARIO DEL MENÚ PRINCIPAL:

238
VISUAL C# APLICACIÓN Y DESARROLLO

CONSTRUCCIÓN DEL MENÚ PRINCIPAL


Ahora construyamos en menu principal.
26. Pase al formulario FMENUPRI.
27. De la ventana CAJA DE HERAMIENTAS (TOOLBOX) escoja un
control MENUSTRIP y coloquelo dentro del formulario.
28. Haga clic dentro del cuadro de textoque dice TYPE HERE o escriba
aquí y escriba ENTRADA DE DATOS.
29. Debajo de ENTRADA DE DATOS ESCRIBA:CLIENTES, FACTURAS
Y RECIBOS uno debajo de otro como se ilustra a continuacion:

30. Al lado de ENTRADA DE DATOS escriba consulta de datos.


31. Debajo de CONSULTA DE DATOS escriba:
 DATOS CLIENTES
 FACTURAS A CRÉDITO
 RECIBOS DE INGRESO
 FACTURAS CON RECIBOS

239
VISUAL C# APLICACIÓN Y DESARROLLO

Como muestra la siguiente figura:

32. Al lado de CONSULTA DE DATOS escriba REPORTES :


33. Debajo de REPORTES escriba:
34. LISTA DE CLIENTES
35. FACTURACIÓN
36. COBROS
37. ESTADOS DE CUENTAS

Como muestra la siguiente figura:

38. Al lado del menú REPORTES escriba: SALIR.


39. Haga doble clic en SALIR y escriba: Application.Exit(); Esto termina la
ejecución del proyecto.
private void button1_Click(object sender, EventArgs e)
{
Application.Exit();
}

240
VISUAL C# APLICACIÓN Y DESARROLLO

CONSTRUYAMOS EN MENU PRINCIPAL.

40. De la ventana CAJA DE HERAMIENTAS (TOOLBOX) escojoa un


control MENUSTRIP y coloquelo dentro del formulario.
41. Haga clic dentro del cuadro de textoque dice TYPE HERE o escriba
aquí y escriba ENTRADA DE DATOS.
42. Debajo de ENTRADA DE DATOS ESCRIBA:CLIENTES, FACTURAS
Y RECIBOS uno debajo de otro como se ilustra a continuacion:

43. Al lado de ENTRADA DE DATOS escriba consulta de datos.


44. Debajo de CONSULTA DE DATOS escriba:
 DATOS CLIENTES
 FACTURAS A CREDITO
 RECIBOS DE INGRESO
 FACTURAS CON RECIBOS

Como muestra la siguiente figura:

241
VISUAL C# APLICACIÓN Y DESARROLLO

45. Al lado de CONSULTA DE DATOS escriba REPORTES :


46. Debajo de REPORTES escriba:
47. LISTA DE CLIENTES
48. FACTURACION
49. COBROS
50. ESTADOS DE CUENTAS

Como muestra la siguiente figura:

51. Al lado del menú REPORTES escriba: SALIR.

242
VISUAL C# APLICACIÓN Y DESARROLLO

52. Haga doble clic en SALIR y escriba: this.Close();

Esto termina la ejecución del proyecto. Ahora agreguemos los tres formularios de
entrada de datos.

53. Abra el menú PROJECT y escoja ADD NEW WINDOWS FORM.


54. En el cuadro de texto NAME escriba FCLIENTES y haga clic sobre el botón
ADD.
55. En la propiedad TEXT del formulario FCLIENTES escriba: REGISTRO DE
DATOS DE CLIENTES.
56. Agregue otro formulario y póngale como nombre FFACTURAS y en la
propiedad TEXT : REGISTRO DE FACTURAS A CREDITO.
57. Agregue otro formulario y póngale como nombre FRECIBOS y en la
propiedad TEXT : REGISTRO DE RECIBOS DE INGRESO.

AHORA VAMOS A PROGRAMAR LAS OPCIONES DEL MENU ENTRADA DE


DATOS PARA LLAMAR LOS FORMULARIOS CORRESPONDIENTES.

58. Vuelva al diseño del formulario FMENUPRI.


59. Abra el menú ENTRADA DE DATOS y haga doble clic en la opción
CLIENTES.
60. Suba el cursor al área:

public partial class FMENU : Form

61. Escriba:
FCLIENTES FC;

62. En el procedimiento

private void cLIENTESToolStripMenuItem_Click(object sender, EventArgs e)

63. Escriba las instrucciones para llamar el formulario clientes. Así:

private void cLIENTESToolStripMenuItem_Click(object sender, EventArgs e)


{
FC = new FCLIENTES();
FC.Show();
}

64. Vuelva al diseño del formulario FMENUPRI.


65. Abra el menú ENTRADA DE DATOS y haga doble clic en la opción
FACTURAS.
66. Suba el cursor al área:

public partial class FMENU : Form

67. Escriba:

243
VISUAL C# APLICACIÓN Y DESARROLLO

FFACTURAS FF;

68. En el procedimiento

private void fACTURASToolStripMenuItem_Click(object sender, EventArgs e)

69. Escriba las instrucciones para llamar el formulario FFACTURAS. Así:

private void fACTURASToolStripMenuItem_Click(object sender, EventArgs e)


{
FF = new FACTURAS();
FF.Show();
}

70. Vuelva al diseño del formulario FMENUPRI.


71. Abra el menú ENTRADA DE DATOS y haga doble clic en la opción
RECIBOS.
72. Suba el cursor al área:

public partial class FMENU : Form

73. Escriba:

FRECIBOS FR;

74. En el procedimiento

private void rERIBOSToolStripMenuItem_Click(object sender, EventArgs e)

75. Escriba las instrucciones para llamar el formulario FRECIBOS. Así :

private void fACTURASToolStripMenuItem_Click(object sender, EventArgs e)


{
FR = new FRECIBOS();
FR.Show();
}

ESTE ES EL CÓDIGO COMPLETO:

namespace CUENTAS_POR_COBRAR
{
public partial class FMENU : Form
{
FCLIENTES FC;
FFACTURAS FF;
FRECIBOS FR;
public FMENU()
{
InitializeComponent();
}

244
VISUAL C# APLICACIÓN Y DESARROLLO

private void sALIRToolStripMenuItem_Click(object sender, EventArgs e)


{
this.Close();
}
private void cLIENTESToolStripMenuItem_Click(object sender, EventArgs e)
{
FC = new FCLIENTES();
FC.Show();
}
private void fACTURASToolStripMenuItem_Click(object sender, EventArgs e)
{
FF = new FACTURAS();
FF.Show();
}
private void RECIBOSToolStripMenuItem_Click(object sender, EventArgs e)
{
FR=new FCREPORTES();
FR.Show();
}

76. PULSE LA TECLA F5 para ejecutar el proyecto y luego pruebe las tres
opciones que hemos programado.

Hasta aquí sólo hemos hecho una pequeña parte de nuestro sistema. A
continuación haremos la conexión a la base da datos CUENTAS POR COBRAR.

CREAR LA CONEXIÓN CON LA BASE DE DATOS

Hasta AQUÍ sólo hemos hecho una pequeña parte de nuestro sistema. A continuación
haremos la conexión a la base da datos CUENTAS POR COBRAR.

1. Abra el menú DATA y escoja Add New Data Source

245
VISUAL C# APLICACIÓN Y DESARROLLO

2. Haga clic en DATABASE y luego sobre el botón NEXT o siguiente.


3. Haga clic sobre el botón NEW CONECTION.
4. Haga clic sobre el botón Change y escoja Microsoft SQL Server (SqlClient)

246
VISUAL C# APLICACIÓN Y DESARROLLO

5. En cuadro de diálogo de texto SERVER NAME escriba el nombre del servidor de


SQL SERVER donde está guardada la base da datos.
6. En el cuadro desplegable Selecto or enter a database name escoja el nombre de
la base de datos y haga lcic sobre el botón OK.

7. Clic sobre el botón TEST CONNECTION para probar la conexión. Si aparece el


siguiente cuadro de mensaje todo está bien:

8. Haga clic sobre el botón ACEPTAR y luego sobre el botón OK.

9. Clic sobre el botón NEXT O SIGUIENTE.

247
VISUAL C# APLICACIÓN Y DESARROLLO

10. Clic sobre el botón NEXT o Siguiente.

11. Marque, con un clic, la casilla de verificación TABLE Seleccionar todas las tablas
de la base de datos o haga clic sobre el signo de más (+) para ver todas las
tablas de las que puede Seleccionar las que desee en caso de no necesitarlas
todas.

12. Haga clic sobre el botón FINISH para terminar.

248
VISUAL C# APLICACIÓN Y DESARROLLO

AHORA ENLAZAREMOS LA TABLA CLIENTES CON FORMULARIO


FCLIENTES.

1. Haga clic sobre la ficha FCLIENTES.CS [DISIGN]* para ver el diseño del
formulario FCLIENTES.
2. Abra el menú DATA y escoja SHOW DATA SOURCES O VER FUENTES
DE DATOS.

3. Arrastre la tabla CLIENTES y colóquela dentro del formulario FCLIENTES.


4. El formulario se verá así:

5. En la ventana DATA SOURCE, haga clic en el signo de más + de la tabla


CLIENTES para expandir los nombres de los campos.

249
VISUAL C# APLICACIÓN Y DESARROLLO

6. Arrastre los campos hacia dentro del formulario.


7. Ahora el formulario se ve así:

8. Pulse F5 para ejecutar el proyecto y añada seis clientes a la tabla


CLIENTES mediante el formulario FCLIENTES.
9. Primero deberá hacer clic sobre el botón NUEVO , escribir los datos y
hacer clic en sobre el botón GUARDAR del NAVIGATOR

El uso del control NAVEGATOR que se añade en la parte superior del formulario
se lo explicamos en la siguiente tabla:

NOMBRE DEL BOTON ICONO FUNCION


MOVER AL PRIMERO Mueve al primer registro.
MOVER AL ANTERIOR Mueve al primer registro
anterior.
REGISTRO ACTUAL Muestra el número del
registro actual.
MOVER AL SIGUIENTE Mueve al primer registro.
siguiente.
IR AL ULTINO Mueve al último registro
anterior

250
VISUAL C# APLICACIÓN Y DESARROLLO

AGREGAR Añade un registro en blanco


donde se escriben los
nuevos datos.
BORRAR Borra el registro
seleccionado
GUARDAR Guarda el nuevo registro.

Este es el aspecto del formulario con datos:

10. Haga clic sobre la ficha FFACTURAS.CS [DESIGN] para ver el diseño del
formulario de facturación.
11. Arrastre la tabla FACTURAS desde el panel DATA SOURCE hacia dentro
del formulario.
12. Expanda la tabla FACTURAS para que muestre todos sus campos.
13. Arrastre el campo NUMERO FACTURA hacia dentro del formulario.

AHORA HAREMOS UN CUADRO COMBINADO QUE NOS PERMITIRA


ESCOER EL CODIGO DEL CLIENTE AL QUE SE LE AÑADIRA LA FACTURA.

251
VISUAL C# APLICACIÓN Y DESARROLLO

LA SIGUIENTE TABLA MUESTRA LAS PROPIEDADES QUE


MODIFICAREMOS PARA CONFIGURAR EL COMBOBOX SIN NECESIDAD DE
ESCRIBIR CODIGOS.

Propiedad Valor

Datasource Aquí se especifica la tabla fuente o que proveerá los


datos. En nuestro caso será la tabla clientes.

Displaymember La columna de la tabla de origen de datos que desea


mostrar en el control. En n nuestro caso es código.

Valuemember La columna de la tabla del origen de datos que


contiene la información almacenada. En nuestro caso
código.
14. Haga clic sobre el campo CÓDIGO y luego en la flecha descendente
ubicada a la derecha de ese campo y escoja la opción COMBOBOX.

15. Arrastre el campo CODIGO (QUE AHORA ES UN COMBOBOX) y los


demás campos hacia dentro del formulario.

252
VISUAL C# APLICACIÓN Y DESARROLLO

EL FORMULARIO SE VERÁ ASÍ:

16. Seleccione el campo CÓDIGO y pulse la tecla F4 para ver la ventana de


propiedades.
17. En propiedad DATASOURCE haga clic en la fecha descendente.

18. Haga clic la opción OTHER DATA SOURCE, LUEGO EN PROJECT


DATASOURCE, DESPUES EN CXCDATSET Y ESCOJA LA TABLA
CLIENTES.
19. En la propiedad DISPLY MEMBER, haga clic en la flecha descendente para
mostrar la tabla CLIENTES.

253
VISUAL C# APLICACIÓN Y DESARROLLO

20. Es coja el campo CÓDIGO.


21. En la propiedad VALUEMEMBER haga igual que con la propiedad
DISPLAYMEMBER.
22. Pulse la techa F5 para ejecutar el proyecto.

EL FORMULARIO SE VERÁ SÍ:

254
VISUAL C# APLICACIÓN Y DESARROLLO

AHORA VAMOS A TRABAJAR CON LA TABLA RECIBOS

23. Haga clic en la ficha FRECIBOS.CS [DESIGN]. Si no puede verlo haga clic
en la flecha doble descendente que aparece al final de la barra de tareas
(donde se muestra los demás formularios) para desplegar la lista y escójalo.
24. Arrastre la tabla RECIBOS desde el área DATASOURCE y colóquelo
dentro del formulario como hizo con las tablas CLIENTES Y FACTURAS
con sus respectivos formularios.

AHORA HAREMOS UN CUADRO COMBINADO QUE NOS PERMITIRÁ


ESCOGER EL NUMERO DE LA FACTURA A LA QUE DESEAMOS ABONAR
O SALDAR. FACTURA.

LA SIGUIENTE TABLA MUESTRA LAS PROPIEDADES QUE


MODIFICAREMOS PARA CONFIGURAR EL COMBOBOX SIN NECESIDAD DE
ESCRIBIR CODIGOS.

PROPIEDAD VALOR

DATASOURCE AQUÍ SE ESPECIFICA LA TABLA FUENTE O QUE


PROVEERA LOS DATOS. EN NUESTRO CASO SERA
LA TABLA FACTURAS.

DISPLAYMEMBER LA COLUMNA DE LA TABLA DE ORIGEN DE DATOS


QUE DESEA MOSTRAR EN EL CONTROL. EN N
NUESTRO CASO ES NUMERO FACTURA.

VALUEMEMBER LA COLUMNA DE LA TABLA DEL ORIGEN DE


DATOS QUE CONTIENE LA INFORMACIÓN
ALMACENADA. EN NUESTRO CASO NUMERO
FACTURA.

25. Haga clic sobre el campo NUMERO FACTURA y luego en la flecha


descendente ubicada a la derecha de ese campo y escoja la opción
COMBOBOX.

255
VISUAL C# APLICACIÓN Y DESARROLLO

SI NO APARECE LA OPCION COMBOBOX ESCOJA LA OPCION CUSTOMIZE,


MAQUE LA CASILLA DE VERIFICACION COMBOBOX YHAGA CLIC EN
DEFAULT. VER FIGURA.

26. Arrastre los demás campos al formulario.


27. Seleccione el campo FECHA RECIBO y cambie la propiedad FORMAT a
SHORT lo que quiere decir fecha corta.

256
VISUAL C# APLICACIÓN Y DESARROLLO

EL FORMULARIO SE VERA ASÍ:

28. Seleccione el campo NÚMERO FACTURA y pulse la tecla F4 para ver la


ventana de propiedades.
29. En propiedad DATASOURCE haga clic en la fecha descendente.

APARECE EL SIGUIENTE CUADRO:

257
VISUAL C# APLICACIÓN Y DESARROLLO

30. Haga clic la opción OTHER DATA SOURCE, LUEGO EN PROJECT


DATASOURCE, DESPUES EN CXCDATASET Y ESCOJA LA TABLA
FACTURAS.
31. En la propiedad DISPLAY MEMBER, haga clic en la flecha descendente
para mostrar la tabla FACTURAS.
32. Es coja el campo NUMERO FACTURAS.
33. En la propiedad VALUEMEMBER haga igual que con la propiedad
DISPLAYMEMBER.
34. Pulse la techa F5 para ejecutar el proyecto.

EL FORMULARIO SE VERÁ ASÍ:

CREACIÓN DE LAS CONSULTAS

1. Añada cuatro formularios con las propiedades según se ilustra en la


siguiente tabla:
CONTROL PROPIEDAD VALOR
FORM1 NAME FCONSUCLIENTES
TEXT CONSULTA DE DATOS
LOS CLIENTES
FORM2 NAME FCONSUFACT
TEXT CONSULTA DE LAS
FACTURAS A CREDITO
FORM3 NAME FCONSUREC
TEXT CONSULTA DE RECIBOS
DE INGRESO
FORM4 NAME FFACTRECIB
TEXT FACTURAS CON
SALDOS O ABONOS

258
VISUAL C# APLICACIÓN Y DESARROLLO

2. Vuelva al diseño del MENÚ PRINCIPAL (FMENUPRI.CS[DESIGN])


3. Abra el menú CONSULTA DE DATOS y haga doble clic en la opción
DATOS DE CLIENTES
4. En en área
public partial class FMENU : Form

5. Escriba:

FCONSUCLIENTES fcc;

6. En el procedimiento:

private void DATOSDELCLIENTEToolStripMenuItem_Click(object


sender, EventArgs e)

7. Escriba las instrucciones para llamar el formulario FCONSUCLIENTES.


ASÍ:

private void DATOSDELCLIENTEToolStripMenuItem_Click(object sender,


EventArgs e)
{
FCC=new FCONSUCLIENTES();
FCC.Show();
}
8. Vuelva al diseño del MENÚ PRINCIPAL (FMENUPRI.CS [DESIGN])
9. Abra el menú CONSULTA DE DATOS y haga doble clic en la opción
FACTURAS A CRÉDITO.
10. En en área

public partial class FMENU : Form

11. Escriba:

FCONSUFACT fcf;

12. En el procedimiento:

private void FACTURASACREDITOToolStripMenuItem_Click(object sender,


EventArgs e)

13. Escriba las instrucciones para llamar el formulario FCONSUFACT. ASÍ:

private void FACTURASACREDITOToolStripMenuItem_Click(object sender, EventArgs e)


{
FCF=new FCONSUFACT ();
FCF.Show();

259
VISUAL C# APLICACIÓN Y DESARROLLO

14. Vuelva al diseño del MENÚ PRINCIPAL (FMENUPRI.CS[DESIGN])


15. Abra el menú CONSULTA DE DATOS y haga doble clic en la opción
FACTURAS CON RECIBOS
16. En en área

public partial class FMENU : Form

17. Escriba:

FCONSUREC FCR;

18. En el procedimiento:

private void FACTURASASCONRECIBOSToolStripMenuItem_Click(object sender,


EventArgs e)

19. Escriba las instrucciones para llamar el formulario FCONSUFACT. ASÍ:

private void FACTURASCONRECIBOSToolStripMenuItem_Click(object sender,


EventArgs e)
{
FCR=new FCONSUREC ();
FCR.Show();
}

20. Vaya al diseño del formulario FCONSUCLIENTES.CS [DESIGN]


21. Vaya al panel DATA SOURCE.
22. En el CUADRO DE HERREMIENTAS(TOOLS BOX), desplácese a la
ficha DATA y arrastre el control DATACRIEVIEW hacia dentro del
formulario.
23. Haga clic fuera del menú contextual que aparece siempre que añade este
control para que desaparezca.

24. Seleccione el DATAGRDIEVIEW.


25. Pulse la techa F4 para ver la ventana de propiedades y haga clic en la
propiedad DATASOURCE

260
VISUAL C# APLICACIÓN Y DESARROLLO

26. Expanda las opciones OTHER DATA SOURCE(con clic al signa + que le
precede), PROJECT DATASOURCES, luego CXCDATASET y escoja
CLIENTES.

Ahora en la propiedad DATASOURCE APARECERÁ:

CLIENTESBINDINGSOURCE.

EL DATAGRIDVIEW QUE SOLO PARECÍA UN CUADRO GRIS SIN MOSTRAR


NINGÚN CAMPO, AHORA MUESTRA LOS DATOS DE LA TABLA CLIENTES
COMO MUESTRA LA SIGUIENTE FIGURA:

261
VISUAL C# APLICACIÓN Y DESARROLLO

27. Abra el menú DATA y escoja la opción SHOW DATASOURCES


28. Haga un clic derecho dentro del panel DATASOURCES y escoja la opción
EDIT DATASET WITH DESIGNER.

29. Haga clic derecho dentro de la ventana de la ventana de edición,


seleccione ADD y escoja QUERY.

30. El siguiente cuadro de diálogo el asistente de dice:


 Escoja su conexión de datos(Choose Your Data Connection)
 El adaptador de tabla necesita una para comunicarse con la
base de datos (The TableAdapter needs a connection to
comunicate with the database)

262
VISUAL C# APLICACIÓN Y DESARROLLO

 El adaptador de tabla conexión (The TableAdapter needs has no


connection.) Cual conexión de datos usaría el adaptador de
tabla?
(Wich Data Connection should the TableAdapter use?.)

31. Haga clic sobre el botón NEXT O SIGUIENTE para escoger


CXCCONNECTIONSTRING(MYSETTINGS) que aparece por defecto en
este caso.
32. El siguiente cuadro de diálogo el asistente de dice:
 Escoja un tipo de comando(Choose a command Type.)
 El Adaptador de Tabla de la consulta sentencias SQL o un
procedimiento almacenado (TableAdepter Query uses statementes
or a stored procedure.)
 ¿Cómo el Adaptador de Tabla de la consulta accederá a la base de
datos? (How the TableAdepter Query Access the database)

Por defecto estará seleccionada la opción SQL statements o sentencias


SQL.

263
VISUAL C# APLICACIÓN Y DESARROLLO

33. Haga clic sobre el botón Next o siguiente.

El cuadro de diálogo que muestra la siguiente figura solicita:

ESCOJA UN EL TIPO DE CONSULTA A SER GENERADO (CHOOSE A


TYPE OF QUERY TO BE GENERATED)
 SELECT WHICH RETURN A SINGLE VALUE (SELECCIONAR LO
CUAL DEVUELVE UN SIMPLE VALOR)
RETURN A SINGLE VALUE (FOR EXAMPLE, SUM, COUNT, OR ANY
OTHER
AGGREGATE FUNCTION) (DEVUELVE UN SIMPLE VALOR, POR
EJEMPLO: SUMA CONTEO O CUALQUIER OTRA FUNCION
AGREGADA.

 UPDATE(ACTUALIZAR.)
CHANGES EXISTING DATA IN A TABLE (CAMBIA DATOS
EXISTENTES EN UNA TABLA.)
 DELETE (ELIMINAR.)
REMOVES ROWS FROM A TABLE (REMUEVE FILAS DE UNA
TABLA)

 INSERT (INSERTAR.)
ADDS A NEW ROW TO THE TABLE (AÑADE UNA NUEVA FILA A LA
TABLE.)

264
VISUAL C# APLICACIÓN Y DESARROLLO

34. En nuestro caso nos interesa una consulta de selección, por lo que
escogeremos la opción SELECT WHICH RETURN A SINGLE VALUE
(SELECCIONAR LO CUAL DEVUELVE UN SIMPLE VALOR)
35. Haga clic sobre el botón NEXT O SIGUIENTE.

36. En el siguiente cuadro de diálogo escribimos:

SELECT CODIGO,NOMBRES,APELIDOS,DIRECCION,CIUDAD,TELEFONO
FROM CLIENTES
ASI ESPECIFICAMOS LOS CAMPOS QUE DESEAMOS QUE MUESTRE LA
CONSULTA CUANDO SE EJECUTE.

37. Haga clic sobre el botón NEXT o SIGUIENTE.

265
VISUAL C# APLICACIÓN Y DESARROLLO

38. Escriba en nombre con que desea guardar la nueva función. En


nuestro caso TODOSLOSCLIENTES.

39. Haga clic sobre el botón NEXT O SIGUIENTE.

266
VISUAL C# APLICACIÓN Y DESARROLLO

40. Haga clic sobre el botón FINISH o FINALIZAR.

41. Ahora tenemos un nuevo elemento en el diseñador del DATASORCE


como muestra la figura de arriba.
42. Haga clic derecho sobre el control CLIENTESTABLADAPTER, que
está en la parte inferior del formulario, y escoja la opción ADD
QUERY.

43. Escriba el nombre de la consulta, en nuestro caso le pondremos


TODOS.
44. Haga clic dentro del cuatro de texto QUERY TEXT Y ESCRIBA:

45. SELECT CODIGO, NOMBRES, APELLIDOS, DIRECCION, CIUDAD,


TELEFONO FROM CLIENTES

46. Haga clic sobre el botón OK.

267
VISUAL C# APLICACIÓN Y DESARROLLO

EN LA PARTE SUPERIOR DEL FORMULARIO APARECE UNA BARRA DE


HERRAMIENTAS MOSTRANDO EL BOTON TODOS COMO ILUSTRA LA
SIGUIENTE FIGURA:

En la parte inferior del formulario se muestra el nuevo elemento


TODOSTOOLSTRIP como ilustra la siguiente figura:

CREACIÓN DE CONSULTAS PARAMETRIZADAS

Crearemos una consulta que nos pida que nos pida el CÓDIGO del CLIENTE
para que una vez digitado muestre sólo los datos del cliente al que pertenece
ese código.

47. Haga clic derecho sobre el control CLIENTESTABLADAPTER, que


está en la parte inferior del formulario, y escoja la opción ADD
QUERY.

268
VISUAL C# APLICACIÓN Y DESARROLLO

48. Escriba el nombre de la consulta, en nuestro caso le pondremos


PORCODIGO.

49. Haga clic dentro del cuatro de texto QUERY TEXT Y ESCRIBA:
SELECT CODIGO, NOMBRES, APELLIDOS, DIRECCION, CIUDAD,
TELEFONO FROM CLIENTES WHERE CODIGO =?

50. Haga clic sobre el botón OK.

269
VISUAL C# APLICACIÓN Y DESARROLLO

EN LA PARTE SUPERIOR DEL FORMULARIO APARECE UNA BARRA DE


HERRAMIENTAS MOSTRANDO EL BOTÓN TODOS COMO ILUSTRA LA
SIGUIENTE FIGURA:

51. Haga clic sobre el botón TODOS.


52. En la propiedad TEXT escriba: VER TODOS LOS CLIENTES.
53. Haga clic sobre el botón CÓDIGO.
54. En la propiedad TEXT escriba: ESCRIBA EL CÓDIGO DEL CLIENTE
QUE DESEA CONSULTAR.
55. Haga clic sobre el botón PORCODIGO.
56. En la propiedad TEXT escriba: MOSTRAR EL CLIENTE.

LAS BARRAS DE CRITERIOS DE CONSULTA SE VERÁN ASÍ:

CREACIÓN DE LA CONSULTA QUE MUESTRA LOS CLIENTES POR


CIUDAD.

57. Haga clic derecho sobre el control CLIENTESTABLADAPTER, que


está en la parte inferior del formulario, y escoja la opción ADD
QUERY.
58. Escriba el nombre de la consulta, en nuestro caso le pondremos
PORCIUDAD
59. Haga clic dentro del cuatro de texto QUERY TEXT y escriba:

SELECT CODIGO, NOMBRES, APELLIDOS, DIRECCION, CIUDAD,


TELEFONO FROM CLIENTES WHERE CIUDAD =?

60. Haga clic sobre el botón OK

AHORA HAY TRES BARRAS DE HERRAMIENTAS CON CRITERIOS DE


CONSULTAS COMO MUESTRA LA SIGUIETE FIGURA:

270
VISUAL C# APLICACIÓN Y DESARROLLO

61. Haga clic sobre el botón CIUDAD.


62. En la propiedad TEXT escriba: ESCRIBA EL NOMBRE DE LA CIUDAD
CUYOS CLIENTES DESEA CONSULTAR.
63. Haga clic sobre el botón PORCIUDAD.
64. En la propiedad TEXT escriba: MOSTRAR LOS CLIENTES.
ESTE ES EL NUEVO ASPECTO DE LAS BARRAS DE CRITERIOS DE
CONSULTAS SEGÚN MUESTRA LA SIGUIENTE FIGURA:

65. Pulse la tecla F5 para ejecutar el proyecto.


66. En el MENÚ PRINCIPAL, abra el menú CONSULTA DE DATOS y escoja
DATOS DE CLIENTES.

67. Por defecto aparecen todos los clientes según muestra la siguiente
figura:

271
VISUAL C# APLICACIÓN Y DESARROLLO

68. Para consultar un sólo cliente haga clic en el cuadro de texto donde se le
solicita el código del cliente que desea consultar, escriba el código del
cliente y haga clic sobre el botón MOSTRAR EL CLIENTE.
ESTO ES LO QUE VERÁ:

69. Para ver los clientes de una ciudad específica, haga clic dentro del cuatro
de texto donde se la pide el nombre de la ciudad cuyos clientes desea ver
(EN ESTE EJEMPLO ESCRIBIREMOS NAGUA).
70. Haga clic sobre el botón MOSTRAR LOS CLIENTES.

272
VISUAL C# APLICACIÓN Y DESARROLLO

ESTO ES LO QUE VERÁ:

71. Finalice la ejecución del proyecto.

AHORA VAMOS A AÑADIR UN BOTÓN A LA ÚLTIMA BARRA DE


CRITERIOS DE CONSULTA.

72. Haga clic después del botón MOSTRAR LOS CLIENTES, luego haga clic
derecho, seleccione INSERT y escoja BUTTON. Ver figura.

73. Seleccione el nuevo botón.


74. En la propiedad TEXT escriba: SALIR.
75. En la propiedad DISPLAYSTYLE escoja TEXT.
76. En la propiedad NAME escriba: TSSALIR.
77. Haga doble clic sobre el botón SALIR.
78. En la ventana de del código escriba: this.Close();
79. EL PROCEDIMIENTO SE VERA ASÍ:
80. Haga doble clic sobre el botón MOSTRAR LOS CLIENTES.

273
VISUAL C# APLICACIÓN Y DESARROLLO

81. Ubique el cursor detrás de la instrucción TRY y pulse la techa ENTER


para insertar una línea en blanco, luego escriba:

CODIGOToolStripTextBox.Clear();

NOTA:
Esto se hace con el objetivo de limpiar el contenido del cuadro de texto
código una vez que se ha hecho una consulta por el CÓDIGO y se quiere
consultar por CIUDAD.

82. Vuelva al diseño del formulario.


83. Haga doble clic sobre el botón MOSTRAR EL CLIENTE.
84. Ubique el cursor detrás de la instrucción TRY y pulse la techa
ENTER para insertar una línea en blanco, luego escriba:

CIUDADToolStripTextBox.Clear();

NOTA:
Esto se hace con el objetivo de limpiar el contenido del cuatro de texto ciudad
una vez que se ha hecho una consulta por CIUDAD y se quiere consultar por
EL CÓDIGO.

85. Vuelva al diseño del formulario.


86. Haga doble clic sobre el botón TODOS LOS CLIENTES.
87. Ubique el cursor detrás de la instrucción TRY y pulse la techa ENTER
para insertar una línea en blanco, luego escriba:

CODIGOToolStripTextBox.Clear();
CIUDADToolStripTextBox.Clear();

NOTA:
Esto se hace con el objetivo de limpiar el contenido de los cuadros de
texto Ciudad y Código una vez que se ha hecho una consulta por CIUDAD
o por CÓDIGO y se quiere consultar todos los clientes.

88. Pulse la tecla F5 para ver los resultados.

274
VISUAL C# APLICACIÓN Y DESARROLLO

LAS CONSULTAS DE LAS FACTURAS

89. Abra el diseño del formulario FCONSUFACT.

90. Añada un componente DATAGRID de la ficha DATOS DEL CUADRO DE


HERRAMIENTAS (TOOLS BOX) al formulario.
91. Seleccione el DATAGRID.
92. Haga clic en la propiedad DATASOURCE, luego en la flecha
descendente. A continuación Expanda la opción OTHER
DATASOURCES U OTROS ORÍGENES DE DATOS, LUEGO ORÍGENES
DE DATOS DEL PROYECTO, CXCDATASET Y ESCOJA LA TABLA
FACTURAS como muestra la siguiente figura:

93. Haga clic derecho sobre el componente FACTURASTABLEADAPTER y


escoja AGREGAR CONSULTA (ADD QUERY)

275
VISUAL C# APLICACIÓN Y DESARROLLO

94. En el cuadro de texto NUEVO NOMBRE DE CONSULTA escriba


FACTURACIÓN.

LA SIGUIENTE SENTENCIA SQL DEBERÁ APARECER DENTRO DE LA


CAJA TEXTO DE LA CONSULTA. SI NO APARECE ESCRÍBALO USTED.

SELECT [NUMERO FACTURA], CODIGO, [VALOS FACTURA], [FECHA


FACTURA], [FECHA VENCIMIENTO] FROM FACTURAS

276
VISUAL C# APLICACIÓN Y DESARROLLO

95. Haga clic sobre el botón ACEPTAR.

En la parte superior ventana del formulario aparece un botón con el


nombre de la consulta que es FACTURACIÓN y en la parte inferior
FACTURACIONTOOLSTRIP como muestra la siguiente figura:

CONSULTA QUE MUESTRA LAS FACTURAS DE UN CLIENTE


ESPECÍFICO EN BASE AL CÓDIGO.

96. Abra el menú DATA y escoja MOSTRAR ORÍGENES DE DATOS


(SHOW DATASOURCES).
97. Haga clic derecho en el panel ORÍGENES DE DATOS
(DATASOURCES) y escoja EDITAR DATASET CON EL
DISEÑADOR.

277
VISUAL C# APLICACIÓN Y DESARROLLO

PARA CREAR ESTA CONSULTA NECESITAMOS LAS TABLAS


CLIENTES Y CONSULTAS QUE YA ESTÁN RELACIONADAS, PERO
SE NECESITA CREAR UN ADAPTADOR DE TABLAS QUE INCLUYA
LOS CAMPOS QUE NECESITAMOS DE ESTAS DOS TABLAS

98. En la ventana del DISEÑADOR DEL DATASET, haga clic derecho,


seleccione NUEVO (ADD) y escoja ADAPTADOR DE TABLA
(TABLEADAPTER)

SE INICIA EL ASISTENTE PARA CONFIGURACIÓN DE


ADAPTADOR DE TABLAS.

278
VISUAL C# APLICACIÓN Y DESARROLLO

99. Haga clic sobre el botón SIGUIENTE (NEXT) para dejar la conexión
CXCCONNECTIONSTRING (MY SETTINGS) que ya esta escogida creada en
este ejercicio en pasos anteriores.
100. Haga clic sobre el botón SIGUIENTE (NEXT) para especificar que usaremos
instrucciones SQL.

101. En la caja TEXTO DE LA CONSULTA escriba la siguiente sentencia SQL:

SELECT
CLIENTES.CODIGO, CLIENTES.NOMBRES, CLIENTES.APELLIDOS,
FACTURAS.[NUMERO FACTURA], FACTURAS.[VALOR FACTURA],
FACTURAS.[FECHA FACTURA], FACTURAS.[FECHA
VENCIMIENTO]

FROM (CLIENTES INNER JOIN


FACTURAS ON CLIENTES.CODIGO =
FACTURAS.CODIGO)

ESTO QUIERE DECIR QUE SE SELECCIONARAN LOS


MENCIONADOS DESDE LA UNIÓN DE LAS TABLAS CLIENTES Y
FACTURAS CUANDO EL CÓDIGO DE LA TABLA CLIENTES SEA
IGUAL AL CÓDIGO DE LA TABLA FACTURAS.

279
VISUAL C# APLICACIÓN Y DESARROLLO

102. Haga clic sobre el botón SIGUIENTE (NEXT.)


103. En el cuadro de texto NOMBRE DEL MÉTODO Escriba:

CLIENTES_FACTURAS.

280
VISUAL C# APLICACIÓN Y DESARROLLO

104. Marque la opción CREAR MÉTODOS PARA ENVIAR


ACTUALIZACIONES DIRECTAMENTE A LA BASE DE DATOS.
105. Haga clic sobre el botón SIGUIENTE (NEXT.)
106. Haga clic sobre el botón FINALIZAR (FINISH.)

ESTA ES UNA ILUSTRACIÓN DE LA NUEVA APARIENCIA DE LA VENTADA


DEL DISEÑADOR DEL DATASET:

281
VISUAL C# APLICACIÓN Y DESARROLLO

AHORA SI PODEMOS CREAR LA CONSULTA

107. Haga clic derecho el ADAPTADOR DE TABLAS


FACTURASTABLEADAPTER, y escoja AGREGAR CONSULTA (ADD
QUERY.)

108. En el cuadro desplegable SELECCIONAR TABLA DE ORIGEN DE DATOS


escoja CXCDATASET.DATATABLE1

109. En el cuadro de texto NUEVO NOMBRE DE CONSULTA escriba:


FACTURASPORCODIGO

282
VISUAL C# APLICACIÓN Y DESARROLLO

110. En la caja TEXTO DE LA CONSULTA: escriba la siguiente sentencia


SQL.

SELECT CLIENTES.CODIGO, CLIENTES.NOMBRES,


CLIENTES.APELLIDOS, FACTURAS.[NUMERO FACTURA],
FACTURAS.[VALOS FACTURA],
FACTURAS.[FECHA FACTURA], FACTURAS.[FECHA
VENCIMIENTO]
FROM (CLIENTES INNER JOIN
FACTURAS ON CLIENTES.CODIGO = FACTURAS.CODIGO)
WHERE (CLIENTES.CODIGO = ?)

ESTO QUIERE DECIR QUE SE SELECCIONARAN LOS MENCIONADOS


DESDE LA UNIÓN DE LAS TABLAS CLIENTES Y FACTURAS CUANDO EL
CÓDIGO DE LA TABLA CLIENTES SEA IGUAL AL CÓDIGO DE LA TABLA
FACTURAS Y QUE EL CRITERIO O CONDICIÓN DE CONSULTA SERÁ EL
CÓDIGO DEL CLIENTE QUE EL USUARIO DECIDA DIGITAR EN TIEMPO DE
EJECUCIÓN.

283
VISUAL C# APLICACIÓN Y DESARROLLO

NOTA:
ESTE TIPO DE CONSULTA PARAMETRIZADA SE LE LLAMA CONSULTA
AMIGABLE.

111. Haga clic sobre el botón ACEPTAR (OK.)

LA SIGUIENTE FIGURA MUESTRA LOS CAMBIOS EN EL FORMULARIO:

112. Seleccione el DATAGRID.


113. En la propiedad DATASOURCE, haga clic en la flecha descendente,
expanda la categoría OTROS ORÍGENES DE DATOS, LUEGO ORÍGENES
DE DATOS DEL PROYECTO, DESPUÉS CXCDATASET Y ESCOJA
DATATABLE1 COMO MUESTRA LA SIGUIENTE FIGURA:

284
VISUAL C# APLICACIÓN Y DESARROLLO

114. Haga clic derecha sobre el botón FACTURACIÓN y escoja propiedades.

115. En la propiedad TEXT escriba: VER TODAS LAS FACTURAS.


116. Haga clic sobre el botón CÓDIGO y, en la propiedad TEXT, escriba: DIGITE
EL CÓDIGO DEL CLIENTE.
117. Haga clic sobre el botón PORCODIGO y, en la propiedad TEXT, escriba:
MOSTRAR.

LA SIGUIENTE FIGURA MUESTRA EL NUEVO ASPECTO DEL


FORMULARIO:

285
VISUAL C# APLICACIÓN Y DESARROLLO

118. Haga clic a la derecha del botón MOSTRAR, luego un clic derecho,
seleccione INSERTAR y escoja BUTTON.

119. En la propiedad TEXT del nuevo botón escriba: SALIR.


120. En la propiedad DISPLAYSTYLE escoja la opción TEXT para que se
muestre el texto en lugar de una imagen.

LA SIGUIENTE FIGURA MUESTRA EL RESULTADO:

286
VISUAL C# APLICACIÓN Y DESARROLLO

121. Haga doble clic sobre el botón VER TODAS LAS FACTURAS para ver la
ventana de código.
122. Haga clic después de TRY y pulse la tecla ENTER para insertar una
línea en blanco.
123. Escriba:
CODIGOToolStripTextBox.Clear();

124. PULSE F5 PARA EJECUTAR EL PROYECTO.

POR DEFECTO EL DATAGRID MOSTRARA TODAS LAS FACTURAS


COMO SE VE EN LA SIGUIENTE FIGURA:

125. Para ver las facturas de un cliente específico haga clic dentro del
cuadro de texto que sigue a la sugerencia DIGITE EL CÓDIGO DEL
CLIENTE: y escriba el código del cliente cuyas facturas desea ver. Por
ejemplo CR02.
126. Haga clic sobre el botón MOSTRAR.

287
VISUAL C# APLICACIÓN Y DESARROLLO

LA SIGUIENTE FIGURA MUESTRA EL RESULTADO:

COMO PUEDE NOTAR, LOS CAMPOS NOMBRES Y APELLIDOS NO SE


VEN EN LA CONSULTA DEBIDO A QUE NO LOS INCLUYE EL DATAGRID
ORIGINAL. VAMOS A AÑADIREMOS ESOS CAMPOS.

ANADIR COLUMNAS A UN DATAGRID

127. Haga clic derecho sobre el DATAGRID y escoja la opción EDITAR


COLUMNAS (EDIT COLUMS)

128. Haga clic sobre el botón AGREGAR.

288
VISUAL C# APLICACIÓN Y DESARROLLO

129. Seleccione el campo NOMBRES y haga clic sobre el botón AGREGAR.


130. Seleccione el campo APELLIDOS y haga clic sobre el botón AGREGAR.

131. Seleccione el campo NOMBRES y pulse el BOTÓN hasta que lo coloque


debajo del campo CÓDIGO.
132. Seleccione el campo APELLIDOS y pulse el BOTÓN hasta que lo
coloque debajo del campo NOMBRES.

YA LOS CAMPOS ESTÁN EN LAS POSICIONES ADECUADAS.

289
VISUAL C# APLICACIÓN Y DESARROLLO

133. Haga clic sobre el botón CERRAR.


134. Haga clic sobre el botón ACEPTAR.

LA SIGUIENTE FIGURA MUESTRA EL DATAGRID MODIFICADO:

AHORA CREAREMOS LAS CONSULTAS DE LOS RECIBOS DE INGRESO.

135. Vaya el diseño del formulario FCONSUREC.

CREACIÓN DE LAS CONSULTAS DE LOS RECIBOS DE INGRESO.


136. Vaya el diseño del formulario FCONSUREC.

290
VISUAL C# APLICACIÓN Y DESARROLLO

137. Añada un componente DATAGRIDVIEW de la ficha DATOS DEL CUADRO


DE HERRAMIENTAS (TOOLS BOX) al formulario.
138. Seleccione el DATAGRIDVIEW.
139. Haga clic en la propiedad DATASOURCE, luego en la flecha descendente.
A continuación Expanda la opción OTROS ORÍGENES DE DATOS U OTHER
DATASOURCE, LUEGO ORÍGENES DE DATOS DEL PROYECTO PROJECT
DATASOURCE, DESPUÉS CXCDATASET Y ESCOJA LA TABLA RECIBOS
como muestra la siguiente figura:

140. Haga clic derecho sobre el Adaptador de la tabla recibo


RECIBOSTABLEADAPTER1 y escoja AÑADIR CONSULTA O ADD QUERY.

291
VISUAL C# APLICACIÓN Y DESARROLLO

141. En el cuadro de texto NAME escriba el nombre de la consulta: TODOS LOS


RECIBOS
142. En el cuadro de texto QUERY TEXT escriba la siguiente sentencia SQL:
SELECT [NUMERO RECIBO], [NUMERO FACTURA], [VALOR RECIBO],
[FECHA RECIBO] FROM RECIBOS

143. Haga clic sobre el botón OK O ACEPTAR.

CONSULTA DE RECIBOS POR EL NÚMERO DE LA FACTURA

Ahora vamos a hacer una consulta que nos solicite el número de la factura que
se pago o a la que se le hizo un abono para ver todos los recibos hechos a esa
factura.
1. Vuelva al diseño del formulario FCONSUREC si no lo tiene activo.

292
VISUAL C# APLICACIÓN Y DESARROLLO

2. Haga clic derecho sobre el Adaptador de la tabla recibo


RECIBOSTABLEADAPTER1 y escoja AÑADIR CONSULTA O ADD QUERY
3. En el cuadro de texto NAME escriba el nombre de la consulta:
PORELNUMERODELAFACTURA.
4. En el cuadro de texto QUERY TEXT escriba la siguiente sentencia SQL:
SELECT [NUMERO RECIBO], [NUMERO FACTURA], [VALOR RECIBO],
[FECHA RECIBO]
FROM RECIBOS
WHERE ([NUMERO FACTURA] = ?)

5. Haga clic sobre el botón OK o ACEPTAR.


PERSONALIZACIÓN LOS BOTONES DE LAS BARRAS DE HERRAMIENTAS
DE LAS CONSULTAS.

1. Haga clic sobre el botón TODOSLOSRECIBOS.


2. En la propiedad TEXT o TEXTO escriba: VER TODOS LOS RECIBOS.
3. Haga clic sobre el botón NUMEROFACTURA.
4. En la propiedad TEXT o TEXTO, escriba: ESCRIBA EL NÚMERO DE LA
FACTURA.
5. Haga clic sobre el botón POR NUMEROFACTURA.
6. En la propiedad TEXT o TEXTO, escriba: MOSTRAR.

293
VISUAL C# APLICACIÓN Y DESARROLLO

ESTE ES EL NUEVO ASPECTO DEL FORMULARIO:

CONSULTA DE RECIBOS POR EL CÓDIGO DEL CLIENTE

A continuación haremos una consulta que nos solicite el código del cliente
para ver los pagos que ese cliente ha hecho a sus facturas.

Para realizar esta consulta necesitamos combinar las tres tablas en un


nuevo ADAPTADOR DE TABLAS.

7. Despliegue el formulario FFACTRECIB.

8. Abra el menú DATA y escoja MOSTRAR ORÍGENES DE DATOS O SHOW


DATA SOURCE.
9. En la ventana DATA SOURCE U ORÍGENES DE DATOS, haga clic derecho y
escoja EDIT DATASET WITH DESIGNER O EDITAR CONJUNTO DE
DATOS CON EL DISEÑADOR.

294
VISUAL C# APLICACIÓN Y DESARROLLO

10. En la ventana del diseñador del conjunto de datos, haga clic derecho,
seleccione ADD o AÑADIR y escoja TABLE ADAPTER o ADAPTADOR DE
TABLA.

11. Haga clic sobre el botón NEXT O SIGUIENTE.

295
VISUAL C# APLICACIÓN Y DESARROLLO

12. Haga clic de nuevo sobre el botón NEXT O SIGUIENTE.

13. Escriba la siguiente sentencia SQL:

SELECT CLIENTES.CODIGO, RECIBOS.[NUMERO RECIBO],


RECIBOS.[NUMERO FACTURA], RECIBOS.[VALOR RECIBO],
RECIBOS.[FECHA RECIBO]

296
VISUAL C# APLICACIÓN Y DESARROLLO

FROM ((CLIENTES INNER JOIN


FACTURAS ON CLIENTES.CODIGO = FACTURAS.CODIGO)
INNER JOIN
RECIBOS ON FACTURAS.[NUMERO FACTURA] =
RECIBOS.[NUMERO FACTURA])
WHERE (CLIENTES.CODIGO = ?)

14. Haga clic sobre el botón NEXT O SIGUIENTE.


15. En el cuadro de texto METHOD NAME O NOMBRE DEL MÉTODO, escriba:
CLIENTESFACTURASRECIBOS

297
VISUAL C# APLICACIÓN Y DESARROLLO

16. Haga clic sobre el botón NEXT o SIGUIENTE.


17. Haga clic sobre el botón FINISH o FINALIZAR.

DE INMEDIATO APARECE DE NUEVO LA VENTANA DEL DISEÑADOR DEL


CONJUNTO DE DATOS. CAMBIAREMOS EL NOMBRE AL NUEVO
ADAPTADOR Y LE PONDREMOS CLIFACTREC.

18. Haga un clic sobre la el título del nuevo adaptador de tabla que se llama
DATATABLE2 para seleccionarlo y luego hágale otro clic para editarlo.
19. Escriba el nuevo nombre: CLIFACTREC.

20. Coloque un control DATAGRIDVIEW al formulario.


21. Seleccione el DATAGRIDVIEW.
22. En la ventana PROPERTIES O PROPIEDADES, haga clic en la propiedad
DATASOURCE U ORIGEN DE DATOS luego en la flecha descendente.

298
VISUAL C# APLICACIÓN Y DESARROLLO

23. Expanda la opción OTHER DATA SOURCE U OTRAS FUENTES DE DATOS.


24. Expanda la opción PROJECT DATA SOURCE.
25. Expanda la opción CXCDATASET Y ESCOJA CLIFACTREC.

EL FORMULARIO AHORA SE VE ASÍ:

299
VISUAL C# APLICACIÓN Y DESARROLLO

AHORA YA TODO ESTA LISTO PARA HACER LA CONSULTA


26. Haga clic derecho sobre el nombre del nuevo adaptador de tabla creado
CLIFACTRECTABLEADAPTER y escoja ADD QUERY o AGREGAR
CONSULTA.

27. En el cuadro de texto NEW QUERY NAME o NOMBRE DE LA NUEVA


CONSULTA escriba: PORELCODIGODELCLIENTE.
28. En el cuadro de texto TEXT QUERY o TEXTO DE LA CONSULTA
escriba la siguiente sentencia SQL:

SELECT CLIENTES.CODIGO, RECIBOS.[NUMERO RECIBO],


RECIBOS.[NUMERO FACTURA], RECIBOS.[VALOR RECIBO],
RECIBOS.[FECHA RECIBO]
FROM ((CLIENTES INNER JOIN
FACTURAS ON CLIENTES.CODIGO = FACTURAS.CODIGO)
INNER JOIN
RECIBOS ON FACTURAS.[NUMERO FACTURA] =
RECIBOS.[NUMERO FACTURA])
WHERE (CLIENTES.CODIGO = ?)

300
VISUAL C# APLICACIÓN Y DESARROLLO

29. Haga clic sobre el botón OK o ACEPTAR.


30. Haga clic sobre el botón CÓDIGO.
31. En la propiedad TEXT o TEXTO escriba: DIGITE EL CÓDIGO DEL CLIENTE.
32. Haga clic sobre el botón PORELCODIGODELCLIENTE.
33. En la propiedad TEXT o TEXTO escriba: MOSTRAR.

301
VISUAL C# APLICACIÓN Y DESARROLLO

ESTE ES EL NUEVO ASPECTO DEL FORMULARIO FCONSUREC:

34. Haga clic derecho después del botón MOSTRAR, seleccione INSERT o
INSERTAR y escoja BUTTON.

35. Seleccione el nuevo botón.


36. En la propiedad TEXT o TEXTO escriba: SALIR.
37. En la propiedad DISPLAYSTYLE, escoja TEXT. Así en lugar de verse una imagen (la
predeterminada de este tipo de botones) se verá el texto escrito en el paso anterior.

302
VISUAL C# APLICACIÓN Y DESARROLLO

38. Haga doble clic sobre el botón SALIR y escriba: this.Close();


39. Pulse la tecla F5 para ejecutar y probar la las diferentes consultas de recibos en un
solo formulario.
LA SIGUIENTE FIGURA MUESTRA LAS FACTURAS EL CLIENTE CON EL CÓDIGO
CR01 QUE HAN RECIBIDO ABONOS:

303
VISUAL C# APLICACIÓN Y DESARROLLO

ADICIÓN CAMPOS CALCULADOS


Es hora De trabajar con campos calculados. En nuestro sistema de cuentas
por cobrar, los clientes tienen facturas a crédito y estas facturas reciben
abonos o saldo completo. Las tablas son objetos usados para almacenar
datos y no para realizar cálculos, pero en las consultas podemos añadir
columnas a las cuales le colocamos una expresión aritméticas haciendo
referencia a los campos que deseamos incluir o que aportarán los datos que
serenarán un resultado, producto de la formula o expresión.

A continuación desarrollaremos una consulta en la que calcularemos el balance de las


facturas que tienen abonos o saldos.
1. Añada un nuevo formulario al proyecto y nombre lo como FBAL.
2. En la propiedad NAME o NOMBRE del nuevo formulario escriba: FBALANCE.
3. En la propiedad TEXT o TEXTO escriba: BALANCE DE FACTURAS.
4. Añada un componente DATAGRIDVIEW.

ESTA ES LA APARIENCIA ACTUAL DEL FORMULARIO:

5. Abra el menú DATA y escoja SHOW DATA SOURCE O MOSTRAR


ORÍGENES DE DATOS.
6. Haga clic dentro de la ventana DATASOURCE y escoja EDIT DATASET
WIHT DESIGNER.
7. Haga clic derecho dentro del DISEÑADOR DEL CONJUNTO DE
DATOS, seleccione ADD O AGREGAR y escoja TABLEADAPTER

304
VISUAL C# APLICACIÓN Y DESARROLLO

8. Haga clic sobre el botón NEXT o SIGUIENTE.


9. Haga clic, de nuevo, sobre el botón NEXT o SIGUIENTE.
10. Escriba la siguiente sentencia SQL:
SELECT CLIENTES.CODIGO, CLIENTES.NOMBRES,
CLIENTES.APELLIDOS, FACTURAS.[NUMERO FACTURA],
FACTURAS.[VALOR FACTURA], RECIBOS.[VALOR RECIBO]
FROM ((CLIENTES INNER JOIN
FACTURAS ON CLIENTES.CODIGO = FACTURAS.CODIGO)
INNER JOIN
RECIBOS ON FACTURAS.[NUMERO FACTURA] =
RECIBOS.[NUMERO FACTURA])

11. Haga clic sobre el botón NEXT o SIGUIENTE.


12. En el cuadro de diálogo METHOD NAME o NOMBRE DEL MÉTODO
escriba: BALANCE FACTURAS y haga clic sobre el botón NEXT o
SIGUIENTE.

305
VISUAL C# APLICACIÓN Y DESARROLLO

13. Haga clic sobre el botón FINISH o FINALIZAR.


EL NUEVO ADAPTADOR DE TABLA SE AÑADO EL DISEÑADOR DE
CONSUNTO DE DATOS

306
VISUAL C# APLICACIÓN Y DESARROLLO

14. Selecciónelo y, en la propiedad NAME O NOMBRE, escriba:


BALANCES.

15. Haga clic derecho sobre el adaptador de tabla BALANCES y escoja la


opción INSERT COLUM o INSERTAR COLUMNA.

16. Seleccione la nueva columna y haga clic en la propiedad NAME O


NOMBRE.
17. Escriba: CBALANCE.
18. En la propiedad EXPRESION O EXPRESION, escriba esta fórmula:

307
VISUAL C# APLICACIÓN Y DESARROLLO

[VALOR FACTURA] – [VALOR RECIBO]

19. Vuelva al diseño del formulario.


20. Haga clic sobre el componente DATAGRIDVIEW.
21. En la propiedad DATA SOURCE U ORIGEN DE DATOS, haga clic en la
flecha descendente, expanda la opción OTRHER DATASOURCE, luego
PROJECT DATA SOURCE, después CXCDATASET Y ESCOJA
BALANCE.

308
VISUAL C# APLICACIÓN Y DESARROLLO

AHORA VEA LA NUEVA APARIENCIA DEL DATAGRIDVIEW.

VAMOS A MOVER LA COLUMNA BALANCE DESPUÉS DEL CAMPO VALOR


RECIBO.
22. Haga clic derecho sobre el componente DATAGRIDVIEW y escoja la
opción EDIT COLUMS O EDITAR COLUMNAS.
23. Seleccione el campo CBALANCE y luego haga clic sobre la flecha
descendente varias veces hasta colocar el campo al final de la lista
como muestra la figura:

24. Haga clic sobre el botón OK o ACEPTAR.

309
VISUAL C# APLICACIÓN Y DESARROLLO

25. Pulse la tecla F5 para ejecutar y probar la consulta.


LA SIGUIENTE FIGURA MUESTRA EL RESULTADO DE LA CONSULTA EN
TIEMPO DE EJECUCIÓN:

310
VISUAL C# APLICACIÓN Y DESARROLLO

LOS REPORTES

Los reportes o informes son el resultado final del procesamiento de los datos de
un sistema de información. Una vez que se ha hecho la entrada que alimentan el
sistema, actividad esta que se extiende desde la puesta en marcha del sistema
hasta su expiración, se crean las consultas con el objetivo de obtener información
visual. Por último se crean los reportes o informes que son los objetos utilizados
para dar salida impresa a la información proveniente de tablas y/o consultas. La
información se puede agrupar por categoría con subtotales y totales.

CREACIÓN DE UNA LISTA DE CLIENTES

1. Abra el menú PROJECT y escoja ADD NEW WINDOWS FORM.


2. En la columna CATEGORIES O CATEGORÍAS escoja WINDOWS FORM y en
la columna TEMPLATES o PLANTILLAS escoja también WINDOWS FORM.
3. En el cuadro de texto NAME o NOMBRE, escriba: FRCLIENTES.CS.

4. Haga clic sobre el botón ADD o AGREGAR.


5. En la propiedad TEXT o TEXTO del formulario escriba: LISTA DE CLIENTES.
6. Abra el menú PROJECT y escoja ADD NEW ITEM o AGREGAR NUEVO
ELEMENTO.
7. En la columna CATEGORIES O CATEGORÍAS escoja REPORTING y en la
columna TEMPLATES o PLANTILLAS escoja también REPORT.
8. En el cuadro de texto NAME o NOMBRE, escriba: RCLIENTES.RDLC.
9. Haga clic sobre el botón ADD o AGREGAR.

EN SEGUIDA APARECE LA VENTANA DE DISEÑO DEL REPORTE QUE AUN


ESTA EN BLANCO.

311
VISUAL C# APLICACIÓN Y DESARROLLO

10. En la ventana TOOLS BOX O CAJA DE HERRAMIENTAS verá que sólo


aparecen los elementos del reporte (REPORT ITEMS)

11. Escoja el componente TABLE o TABLA y colóquelo dentro del diseño que
se verá así.

312
VISUAL C# APLICACIÓN Y DESARROLLO

12. Añada un componente TEXTBOX o CAJA DE TEXTO en el área BODY y


escriba: LISTA GENERAL DE CLIENTES.
13. Cambie el tamaño de fuente a 20, escoja el estilo NEGRITA o BOLD y la
alineación CENTRAR.

14. Modifique la anchura y la altura de la caja del TEXBOX para que el texto
pueda verse.

El diseño tiene tres columnas, necesitamos añadir tres columnas más porque la
tabla clientes tiene seis.
15. Haga clic derecho en la barra divisora del área BODY y HEADER y escoja
INSERT COLUMN TO THE RIGHT o INSERTAR COLUMNA A LA DERECHA

16. Repita el paso anterior dos veces más para completar las seis columnas.
17. En las columnas de la fila HEADER escriba: CÓDIGO, NOMBRES,
APELLIDOS, DIRECCIÓN, CIUDAD Y TELÉFONO según muestra la figura
siguiente:

313
VISUAL C# APLICACIÓN Y DESARROLLO

18. Cambie el tamaño de la fuente a 12 céntrelos, y aplique formato de negrita.


19. Abra el menú DATA o DATOS y escoja SHOW DATA SOURCE o MOSTRAR
ORÍGENES DE DATOS.
20. Expanda la vista de la tabla CLIENTES y arrastre los campos a las columnas
correspondientes de la fila DATAIL o DETALLE.

21. Vuelva al diseño del formulario.


22. Coloque, dentro del formulario, un control MICROSOFT REPORT VIEWVER
de la categoría REPORTING de la CAJA DE HERRAMIENTAS o TOOLSBOX.

23. De la etiqueta inteligente REPORT VIEWVER TASKS o TAREAS DEL VISOR


DE REPORTE escoja: CUENTAS POR COBRAR.RCLIENTES.RDLC.

314
VISUAL C# APLICACIÓN Y DESARROLLO

NOTA:
NOTE QUE EN LA PARTE INFERIOR DEL FORMULARIO SE AÑADEN LOS
SIGUIENTES ELEMENTOS:
 CXC DATASET
 CLIENTESBINDINGSOURCE Y
 CLIENTESTABLEADAPTER.

24. En la ventana de propiedades, modifique la propiedad ZOOMODE o MODO


DE AMPLIACIÓN a PAGEWIDTH o ANCHURA DE PAGINA y la propiedad
ZOOMPERCENT o PORCENTAJE DE AMPLIACIÓN a 100.

25. Pulse la tecla F5 para ejecutar y probar el reporte.

A CONTINUACIÓN ILUSTAMOS LA VENTANA DE RESULTADO Y


EXPLICAMOS SUS ELEMENTOS:

LA SIGUIENTE TABLA ILUSTRA Y EXPLICA LOS BOTONES DE LA BARRA


DE HERRAMIENTAS DE LA VENTANA VISTA PREVIA DEL INFORME:

315
VISUAL C# APLICACIÓN Y DESARROLLO

BOTÓN NOMBRE FUNCIÓN


Show or Hide Muestra o esconde el mapa del
Document Map documento.
First Page Para ir a la primera pagina del informe
Preview Page Para ir a la página anterior.
Currente Page Muestra el número de la página actual
y la cantidad de páginas que tiene el
informe.
Next Page Para ir a la página siguiente.
Last Page Para ir a la última página.
Back to Parent Report Para volver al reporte principal en
caso de que se esté mostrando un
subreporte.
Stop Rendering Detener la representación.
Refresh Actualizar el reporte.
Print Imprime el reporte
Print Layout Aleja el documento para ver la página
completa y lo acerca al 100%.
Page Setup Permite configurar la página.
Import Importa el reporta a EXCEL o a un
archivo PDF (Portátil Document File.)
Zoom Permite especificar el porcentaje de la
vista del reporte.

REPORTE DE FACTURACIÓN USANDO EL ASISTENTE PARA REPORTES

Ahora haremos el reporte de las facturas a crédito, pero en lugar de crear un


reporte en blanco para agregar los elementos desde el diseñador, usaremos el
REPORT WIZARD o el asistente para reportes.

1. Abra el menú PROJECT y escoja ADD NEW WINDOWS FORM.


2. En la columna CATEGORIES O CATEGORÍAS escoja WINDOWS FORM y en
la columna TEMPLATES o PLANTILLAS escoja también WINDOWS FORM.
3. En el cuadro de texto NAME, escriba: FRFACTURACION.CS.

316
VISUAL C# APLICACIÓN Y DESARROLLO

4. Haga clic sobre el botón ADD o AGREGAR.


5. En la propiedad TEXT o TEXTO del formulario escriba: FACTURAS A
CRÉDITO.
EL FORMULARIO DEBE VERSE ASÍ:

6. Abra el menú PROJECT y escoja ADD NEW ITEM o AGREGAR NUEVO


ELEMENTO.

317
VISUAL C# APLICACIÓN Y DESARROLLO

7. En la columna CATEGORIES O CATEGORÍAS escoja REPORTING y en la


columna TEMPLATES o PLANTILLAS escoja también REPORT WIZARD.
8. En el cuadro de texto NAME o NOMBRE, escriba: RFACTURACION.RDLC.
9. Haga clic sobre el botón ADD o AGREGAR.

DE INMEDIATO SE INICIA EL ASISTENTE QUE NOS GUIARA PASO A PASO


DURANTE LA CONSTRUCCIÓN DEL INFORME.

10. En el siguiente cuadro de diálogo, haga clic sobre el botón NEXT o


SIGUIENTE.

El siguiente cuadro de diálogo muestra las tablas y los otros objetos de datos y
consultas disponibles en el proyecto abierto.
11. Escoja la tabla FACTURAS y haga clic sobre el botón NEXT o SIGUIENTE.

318
VISUAL C# APLICACIÓN Y DESARROLLO

En el siguiente cuadro de diálogo se nos ofrecen los tipos de reportes para que
escojamos el que deseamos aplicar.
En este ejercicio escogeremos tabular por ser el más adecuado para nuestra
situación.

12. Escoja la opción TABULAR y haga clic sobre el botón NEXT o SIGUIENTE.

Este cuadro de diálogo nos permite colocar los campos de la siguiente forma:

319
VISUAL C# APLICACIÓN Y DESARROLLO

 El botón PAGE nos permite colocar el campo


seleccionado para que aparezca como cabecera del reporte
 El botón GROUP nos permite agrupar el informe por
el campo seleccionado. En nuestro caso seleccionaremos el campo
código para que las facturas se agrupen por el código de cada
cliente. Así todas las facturas de un cliente aparecerán juntas con
sus respectivos subtotales.
 El botón DETAILS nos permite colocar los campos
que formarán el detalle del reporte.
13. Seleccione el campo CÓDIGO y haga clic sobre el botón GROUP
14. Seleccione, uno por uno, los demás campos y vaya haciendo clic sobre el
botón DETAILS.
EL CUADRO DE DIÁLOGO SE VERÁ ASÍ:

15. Haga clic sobre el botón NEXT o SIGUIENTE.

En el siguiente cuadro de diálogo podemos escoger el diseño que deseamos


aplicar a nuestro reporte, y se decide se deseamos que incluya subtotales, que
será nuestra caso, además si deseamos que tenga cuadriculas como una tabla de
Word.

16. .En nuestro caso escogeremos STEPPE o EN PASOS.


17. Haga clic sobre el botón NEXTO o SIGUIENTE.

320
VISUAL C# APLICACIÓN Y DESARROLLO

En próximo paso escogeremos el estilo del reporte.

18. Escoja el estilo GENERIC y haga clic sobre el botón NEXT O SIGUIENTE.

YA TODO ESTA LISTO SOLO ESCRIBIMOS EL TÍTULO DEL REPORTE Y


FINISH.
19. En el cuadro de texto REPORT NAME o NOMBRE DEL REPORTE
ESCRIBA: REPORTE DE FACTURAS A CRÉDITO y haga clic sobre el
botón FINISN.

321
VISUAL C# APLICACIÓN Y DESARROLLO

APARECE EL DISEÑO DEL REPORTE:

COMO PUEDE VER LOS SUBTOTALES ESTÁN COLOCADOS ANTES QUE EL


DETALLE, PERO ES MAS ENTENDIBLE QUE LOS SUBTOTALES ESTÉN
DESPUÉS. POR LO TANTO, INSERTAREMOS UNA FILA Y DESPLAZAREMOS
LAS EXPRESIONES CORRESPONDIENTES A LOS SUBTOTALES A LA NUEVA
FILA.
20. Haga clic derecho en el extremo derecho del diseño del informe y escoja
INSERT ROW BELOW o INSERTAR FILA DEBAJO.

VEA COMO SE ILUSTRA EN LA SIGUIENTE FIGURA PARA QUE NO SE


PIERDA:

LA SIGUIENTE FIGURA MUESTRA LA NUEVA FILA EN BLANCO AL FINAL


DEL DISEÑO:

322
VISUAL C# APLICACIÓN Y DESARROLLO

21. Borre la expresión que dice: =SUM(FIELD!NUMERO FACTURA). No


necesitamos sumas los números de las facturas.
22. Mueva la expresión que dice: =SUM (FIELD!VALOR FACTURA) a la celda
en blanco ubicada debajo de la expresión =FIELDS!VALOR FACTURA.
23. En la primera celda de la fina en blanco escriba: TOTAL CLIENTE.

24. Cambia seleccione el cuadro de texto del título del reporte, cambie el
tamaño de fuente a 16, formato NEGRITA y céntrelo.
25. Modifique apropiadamente el tamaño del diseño, si lo desea.
26. Haga clic derecho en la parte inferior (la parte gris) de la ventana del diseño
del reporte y escoja TABLE FOOTER o PIE DE TABLA.

323
VISUAL C# APLICACIÓN Y DESARROLLO

MIRE COMO SE VE EL DISEÑO DEL REPORTE AHORA:

En el PIE DE LA TABLA o TABLE FOOTER, coloque escriba la siguiente


expresión: =Sum(Fields!VALOR_FACTURA.Value) ESTO ES PARA
CALCULAR EL TOTAL DE TODOS LOS CLIENTES AL FINAL DE LA TABLA.

AHORA EL DISEÑO SE VE ASÍ:

27. Vuelva al diseño del formulario FRFACTURACION.


28. Añada un componente MICROSOFTREPORTVIEWVER desde la categoría
REPORTING de la CAJA DE HERRAMIENTAS o TOOLBOX
29. Coloque, dentro del formulario, un control MICROSOFT REPORT
VIEWVER de la categoría REPORTING de la CAJA DE HERRAMIENTAS o
TOOLBOX.

30. De la etiqueta inteligente REPORT VIEWVER TASKS o TAREAS DEL


VISOR DE REPORTE escoja: CUENTAS POR
COBRAR.RPFACTURAS.RDLC.
NOTA:
NOTE QUE EN LA PARTE INFERIOR DEL FORMULARIO SE AÑADEN LOS
SIGUIENTES ELEMENTOS:
 CXC DATASET

324
VISUAL C# APLICACIÓN Y DESARROLLO

 FACTURASSBINDINGSOURCE Y
 FACTURASTABLEADAPTER.

31. En la ventana de propiedades, modifique la propiedad ZOOMODE o MODO


DE AMPLIACIÓN a PAGEWIDTH o ANCHURA DE PAGINA y la propiedad
ZOOMPERCENT o PORCENTAJE DE AMPLIACIÓN a 100.

32. Pulse la tecla F5 para ver los resultados.

ESTA ES LA VENTANA DE RESULTADOS:

325
VISUAL C# APLICACIÓN Y DESARROLLO

REPORTE DE RECIBOS DE INGRESO

Este reporte lo haremos usando una plantilla en blanco con la finalidad


de que podemos diversificar los conocimientos y formas de hacer
reportes.

Lo primero que haremos será añadir un nuevo formulario donde


visualizaremos el reporte y luego enlazaremos dicho formulario con el
menú principal, cuyo elemento correspondiente se creo al inicio del
desarrollo de este sistema.

1. Haga clic sobre el botón ADD NEW ITEM o AGREGAR NUEVO ELEMENTO
.

2. En el panel CATEGORIES o CATEGORÍAS escoja WINDOWS FORMS y en


el panel TEMPLATES o PLANTILLAS escoja lo mismo como se destaca en la
figura siguiente:

326
VISUAL C# APLICACIÓN Y DESARROLLO

3. En el cuadro de texto NAME o NOMBRE escriba: RPRECIBOS.CS.


4. Haga clic sobre el botón ADD o AGREGAR.
5. En la propiedad TEXT o TEXTO del formulario escriba: REPORTE DE
RECIBOS DE INGRESO.
6. Muévase al diseño del formulario FMENUPRI, abra el menú REPORTES y
haga doble clic sobre la opción COBROS.

APARECE EL SIGUIENTE PROCEDIMIENTO:


private void cOBORSToolStripMenuItem_Click(object sender, EventArgs e)
{

}
InitializeComponent();
}
7. Suba el cursor hasta el procedimiento:
public partial class FMENU : Form
{
FCLIENTES FC;
FFACTURAS FF;
FRECIBOS FR;
FCONSUCLIENTES fcc;
FCONSUFACT FCF;
FCONSUREC FCR;
FRCLIENTES FRC;
FRFACTURACION FRF;

8. Añada el elemento FPRECIBOS RPR; debajo de RPFACTURACIÓN FPF;

AHORA EL PROCEDIMIENTO SE VERÁ ASÍ:

public partial class FMENU : Form

327
VISUAL C# APLICACIÓN Y DESARROLLO

{
FCLIENTES FC;
FFACTURAS FF;
FRECIBOS FR;
FCONSUCLIENTES fcc;
FCONSUFACT FCF;
FCONSUREC FCR;
FRCLIENTES FRC;
FRFACTURACION FRF;
FPRECIBOS FPR;
public FMENU()
{
InitializeComponent();
}
9. Vuelva al procedimiento:
private void cOBORSToolStripMenuItem_Click(object sender, EventArgs e)
{

}
10. Escriba:
RPR = new FPRECIBOS();
FPR.Show();

AHORA EL PROCEDIMIENTO SE VERÁ ASÍ:


private void cOBORSToolStripMenuItem_Click(object sender, EventArgs e)
{
RPR = new FPRECIBOS();
FPR.Show();
}
11. Repita el paso no. 1.
12. En el panel CATEGORIES o CATEGORÍAS escoja REPORTING y en el
panel TEMPLATES o PLANTILLAS escoja REPORT como se destaca en la
figura siguiente:

328
VISUAL C# APLICACIÓN Y DESARROLLO

13. En la caja de texto NAME o NOMBRE escriba: RPRECIBOS.rdlc y haga clic


sobre el botón ADD o AGREGAR.

LA SIGUIENTE FIGURA MUESTRA EL DISEÑO DEL REPORTE EN BLANCO:

AÑADIR TABLA AL REPORTE

14. De la CAJA DE HERRAMIENTAS o TOOLBOX, escoja el componente


TABLE o tabla y colóquelo dentro del cuadro del diseño.

EL DISEÑO DEL FORMULARIO TIENE AHORA ESTE ASPECTO:

329
VISUAL C# APLICACIÓN Y DESARROLLO

AÑADIR TÍTULO AL REPORTE Y DARLE FORMATO

15. Coloque un TEXTBOX o CUADRO DE TEXTO, desde la CAJA DE


HERRAMIENTAS O TOOLSBOX, dentro de la banda BODY.
16. Escriba: REPORTE DE RECIBOS DE INGRESO.
17. Extienda el cuadro de texto desde el extremo izquierdo al extremo derecho
del diseño.
18. Cambie el tamaño de fuente a 20, negrita y centrado.

EL DISEÑO DEBE QUEDAR ASÍ:

AÑADIR COLUMNA A LA TABLA DEL REPORTE

19. Haga clic derecho sobre el encabezado de la última columna de la tabla y


escoja INSERT COLUMN TO THE RIGHT o INSERTAR COLUMNA A LA
DERECHA.

AÑADIR LOS CAMPOS DESDE UNA TABLA DE DATOS A LA TABLA DEL


REPORTE

20. Abra el menú DATA o DATOS y escoja SHOWS DATASOURCE o


MOSTRAR FUENTES DE DATOS.
21. En la ventana DATASOURCE o FUENTES DE DATOS, expanda la vista de
la tabla RECIBOS para ver todos sus campos.

330
VISUAL C# APLICACIÓN Y DESARROLLO

22. Arrastre los campos desde la tabla RECIBOS hasta cada celda de la fila
DETAIL o DETALLE.

AHORA EL DISEÑO SE VERÁ ASÍ:

INSERTAR NÚMERO DE PÁGINA EN EL REPORTE.

23. Haga clic derecho dentro parte gris del diseño del formulario y escoja PAGE
FOOTER o PIE DE PÁGINA.

24. Coloque un CUADRO DE TEXTO O TEXTBOX en el medio del PIE DE


PÁGINA o PAGE FOOTER.
25. Haga clic derecho dentro del cuadro de texto y escoja EXPRESIÓN o
EXPRESIÓN.

331
VISUAL C# APLICACIÓN Y DESARROLLO

26. En el área CATEGORY o CATEGORÍA escoja GLOBALES.


27. En el área ITEM O ELEMENTO, sobre la función PAGE NUMBER O
NÚMERO DE PÁGINA.

28. Haga clic sobre el botón OK o ACEPTAR.

ESTE ES EL NUEVO ASPECTO DEL DISEÑO DEL REPORTE:

332
VISUAL C# APLICACIÓN Y DESARROLLO

SACAR TOTAL AL REPORTE

29. En la fila FOOTER, en la columna correspondiente al campo VALOR


RECIBO escriba la siguiente expresión:

=Sum(Fields!VALOR_RECIBO.Value, "cxcDataSet_RECIBOS")

30. Ponga la expresión en negrita y tamaño de fuente 12.

EL DISEÑO SE VERÁ ASÍ:

31. En la celda que precede a la expresión escrita en el paso anterior escriba:


TOTAL y póngalo en negrita con tamaño de fuente 12.
32. Vuelva al diseño del formulario RPRECIBOS.
33. Añada un componente MICROSOFTREPORTVIEWVER desde la categoría
REPORTING de la CAJA DE HERRAMIENTAS o TOOLBOX
34. Coloque, dentro del formulario, un control MICROSOFT REPORT VIEWVER
de la categoría REPORTING de la CAJA DE HERRAMIENTAS o TOOLBOX.

333
VISUAL C# APLICACIÓN Y DESARROLLO

35. De la etiqueta inteligente REPORT VIEWVER TASKS o TAREAS DEL


VISOR DE REPORTE escoja: CUENTAS POR
COBRAR.RPRECIBOS.RDLC.

NOTA:
NOTE QUE EN LA PARTE INFERIOR DEL FORMULARIO SE AÑADEN LOS
SIGUIENTES ELEMENTOS:
a. CXC DATASET
b. RECIBOSBINDINGSOURCE Y
c. RECIBOSTABLEADAPTER.

36. En la ventana de propiedades, modifique la propiedad ZOOMODE o MODO


DE AMPLIACIÓN a PAGEWIDTH o ANCHURA DE PAGINA y la propiedad
ZOOMPERCENT o PORCENTAJE DE AMPLIACIÓN a 100.

37. Pulse la tecla F5 para ver los resultados.

334
VISUAL C# APLICACIÓN Y DESARROLLO

ESTA ES LA VENTANA DEL REPORTE EN TIEMPO DE CORRIDA

ESTADO DE CUENTAS DE LOS CLIENTES

Este reporte lo también lo haremos usando una plantilla en blanco con el objetivo
de afianzar los cocimientos adquiridos en el ejercicio anterior.

Lo primero que haremos será añadir un nuevo formulario donde visualizaremos el


reporte y luego enlazaremos dicho formulario con el menú principal, cuyo
elemento correspondiente (ESTADO DE CUANTAS) se creo al inicio del desarrollo
de este sistema.

38. Haga clic sobre el botón ADD NEW ITEM o AGREGAR NUEVO ELEMENTO.

335
VISUAL C# APLICACIÓN Y DESARROLLO

39. En el panel CATEGORIES o CATEGORÍAS escoja WINDOWS FORMS y en


el panel TEMPLATES o PLANTILLAS escoja lo mismo.

40. En el cuadro de texto NAME o NOMBRE escriba


FRPESTADODECUENTAS.CS

41. Haga clic sobre el botón ADD o AGREGAR.


42. En la propiedad TEXT o TEXTO del formulario escriba: ESTADOS DE
CUENTAS DE LOS CLIENTES.
43. Muévase al diseño del formulario FMENUPRI, abra el menú REPORTES y
haga doble clic sobre la opción ESTADOS DE CUENTAS.

336
VISUAL C# APLICACIÓN Y DESARROLLO

APARECE EL SIGUIENTE PROCEDIMIENTO:


private void eSTADOSDECUENTASToolStripMenuItem_Click(object sender,
EventArgs e)
{

}
44. Suba el cursor hasta el procedimiento:
public partial class FMENU : Form
{
FCLIENTES FC;
FFACTURAS FF;
FRECIBOS FR;
FCONSUCLIENTES fcc;
FCONSUFACT FCF;
FCONSUREC FCR;
FRCLIENTES FRC;
FRFACTURACION FRF;
FPRECIBOS FPR;

45. Añada el elemento FRPESTADODECUENTAS FREC; debajo de FPRECIBOS FPR;


46.

AHORA EL PROCEDIMIENTO SE VERÁ ASÍ:


public partial class FMENU : Form
{
FCLIENTES FC;
FFACTURAS FF;
FRECIBOS FR;
FCONSUCLIENTES fcc;
FCONSUFACT FCF;
FCONSUREC FCR;
FRCLIENTES FRC;
FRFACTURACION FRF;
FPRECIBOS FPR;
FRPESTADODECUENTAS FREC;
public FMENU()
{
InitializeComponent();
}
47. Vuelva al procedimiento:
private void eSTADOSDECUENTASToolStripMenuItem_Click(object sender,
EventArgs e)
{

}
48. Escriba:
FREC = new FRPESTADODECUENTAS();
FREC.Show();

AHORA EL PROCEDIMIENTO SE VERÁ ASÍ:


private void eSTADOSDECUENTASToolStripMenuItem_Click(object sender,
EventArgs e)
{
FREC = new FRPESTADODECUENTAS();
FREC.Show();

337
VISUAL C# APLICACIÓN Y DESARROLLO

}
49. Repita el paso no. 1.
50. En el panel CATEGORIES o CATEGORÍAS escoja REPORTING y en el
panel TEMPLATES o PLANTILLAS escoja REPORT como se destaca en la
figura siguiente:

51. En la caja de texto NAME o NOMBRE escriba: RESTADOSDECUENTAS.rdlc


y haga clic sobre el botón ADD o AGREGAR.

LA SIGUIENTE FIGURA MUESTRA EL DISEÑO DEL REPORTE EN BLANCO:

338
VISUAL C# APLICACIÓN Y DESARROLLO

AÑADIR TABLA AL REPORTE

52. De la CAJA DE HERRAMIENTAS o TOOLBOX, escoja el componente


TABLE o tabla y colóquelo dentro del cuadro del diseño.

EL DISEÑO DEL FORMULARIO TIENE AHORA ESTE ASPECTO:

AÑADIR TÍTULO AL REPORTE Y DARLE FORMATO

53. Coloque un TEXTBOX o CUADRO DE TEXTO, desde la CAJA DE


HERRAMIENTAS O TOOLSBOX, dentro de la banda BODY.
54. Escriba: ESTADO DE CUENTAS DE LOS CLIENTES.
55. Extienda el cuadro de texto desde el extremo izquierdo al extremo derecho
del diseño.
56. Cambie el tamaño de fuente a 20, negrita y centrado.

EL DISEÑO DEBE QUEDAR ASÍ:

339
VISUAL C# APLICACIÓN Y DESARROLLO

AÑADIR COLUMNAS A LA TABLA DEL REPORTE

57. Haga clic derecho sobre el encabezado de la última columna de la tabla y


escoja INSERT COLUMN TO THE RIGHT o INSERTAR COLUMNA A LA
DERECHA.
58. Repita cuatro veces el paso anterior para con estas tener ocho columnas que
es la cantidad de campos que colocaremos en ellas.

AÑADIR LOS CAMPOS DESDE UNA TABLA DE DATOS A LA TABLA DEL


REPORTE

59. Abra el menú DATA o DATOS y escoja SHOW DATASOURCE o MOSTRAR


FUENTES DE DATOS.
60. En la ventana DATASOURCE o FUENTES DE DATOS, expanda la vista de
la tabla BALANCE para ver todos sus campos.

61. Arrastre los campos desde la tabla RECIBOS hasta cada celda de la fila
DETAIL o DETALLE.

340
VISUAL C# APLICACIÓN Y DESARROLLO

AHORA EL DISEÑO SE VERÁ ASÍ:

INSERTAR NÚMERO DE PÁGINA EN EL REPORTE.

62. Haga clic derecho dentro parte gris del diseño del formulario y escoja PAGE
FOOTER o PIE DE PÁGINA.

63. Coloque un CUADRO DE TEXTO O TEXTBOX en el medio del PIE DE


PÁGINA o PAGE FOOTER.
64. Haga clic derecho dentro del cuadro de texto y escoja EXPRESIÓN o
EXPRESIÓN.

65. En el área CATEGORY o CATEGORÍA escoja GLOBALES.


66. En el área ITEM O ELEMENTO, sobre la función PAGE NÚMBER O
NÚMERO DE PÁGINA.

341
VISUAL C# APLICACIÓN Y DESARROLLO

67. Haga clic sobre el botón OK o ACEPTAR.

ESTE ES EL NUEVO ASPECTO DEL DISEÑO DEL REPORTE:

SACAR TOTALES AL REPORTE ESTADO DE CUENTAS

68. En la fila FOOTER, en la columna correspondiente al campo VALOR


FACTURA escriba la siguiente expresión:

=Sum(Fields!VALOS_FACTURA.Value, "cxcDataSet_BALANCE")

342
VISUAL C# APLICACIÓN Y DESARROLLO

69. En la fila FOOTER, en la columna correspondiente al campo VALOR


RECIBO escriba la siguiente expresión:

=Sum(Fields!VALOR_RECIBO.Value, "cxcDataSet_BALANCE"

70. En la fila FOOTER, en la columna correspondiente al campo BALANCE


escriba la siguiente expresión:

=Sum(Fields!VALOS_FACTURA.Value, "cxcDataSet_BALANCE") -
Sum(Fields!VALOR_RECIBO.Value, "cxcDataSet_BALANCE")

71. Ponga la expresión en negrita y tamaño de fuente 12.


72. En la celda ubicada debajo del campo NÚMERO FACTURA, escriba:
TOTALES : y póngalo en negrita con tamaño de fuente 12.

EL DISEÑO SE VERÁ ASÍ:

73. Vuelva al diseño del formulario FRESTADODECLUENTAS.


74. Añada un componente MICROSOFTREPORTVIEWVER desde la categoría
REPORTING de la CAJA DE HERRAMIENTAS o TOOLBOX
75. Coloque, dentro del formulario, un control MICROSOFT REPORT VIEWVER
de la categoría REPORTING de la CAJA DE HERRAMIENTAS o TOOLBOX.

343
VISUAL C# APLICACIÓN Y DESARROLLO

76. De la etiqueta inteligente REPORT VIEWVER TASKS o TAREAS DEL


VISOR DE REPORTE escoja: CUENTAS POR
COBRAR.ESTADOSDECUENTAS.RDLC Y luego la opción DOCK IN
PARENT CONTAINER para que ocupe todo el formulario.

NOTA:
NOTE QUE EN LA PARTE INFERIOR DEL FORMULARIO SE AÑADEN LOS
SIGUIENTES ELEMENTOS:
a. CXC DATASET
b. BALANCEBINDINGSOURCE Y
c. BALANCETABLEADAPTER.

77. En la ventana de propiedades, modifique la propiedad ZOOMODE o MODO


DE AMPLIACIÓN a PAGEWIDTH o ANCHURA DE PAGINA y la propiedad
ZOOMPERCENT o PORCENTAJE DE AMPLIACIÓN a 100.

78. Pulse la tecla F5 para ver los resultados.

ESTA ES LA VENTANA DEL REPORTE EN TIEMPO DE EJECUCIÓN

344
VISUAL C# APLICACIÓN Y DESARROLLO

HAGA USTED EL INSTALADOR.

345

También podría gustarte