Vous êtes sur la page 1sur 107

Aplicaciones Web

INDICE

1.- ASP NET


1.1 Asp Net
1.2 ADO NET
1.3 Clases Bsicas para gestin de Datos
1.4 Acciones de Ida y Vuelta de Una WEB
1.5 Directivas den ASP
1.6 Tipos de Datos
1.7 Web Form - controles
1.8 Funciones Numricas, cadenas y Fechas

2.- Aplicaciones
2.1 Web- form calculo matemticos
2.2 Empleando el Datgrid1
2.3 Consultas con Hipervnculos
2.4 Consultas en cascada
2.5 Genrador de Propiedades de un datagrid
2.6 Actualizaciones en linea
2.7 Empleando Store Procedure

3.- Reportes
3.1 Crystal Report entorno para el diseo
3.2 Creacin de unos reportes simple con campos enlazados
3.3 Ejecucin de un reporte desde un formulario
3.4 Filtros en un reporte
4.- Web Service
4.1 Definicin
4.2 Web Method
4.3 Publicacin de los Web Service
4.4 Acceso a los servicios
4.5 Aplicacin con web Services

Anexo:
Algunos trucos en ASP .NET
Cmo crear y leer controles dinmicamente en ASP .NET

I.S.T.Idat 1 ASP.NET
Aplicaciones Web

PLATAFORMA MICROSOF.NET
Microsoft .NET se compone de un conjunto de recursos que hacen posible su implementacin,
estos componentes se muestran en la siguiente ilustracin:

VISUAL STUDIO.NET Internet


.NET
.NET .NET Building
Enterprise
Framework Block Services
Servers

2. Servidores Empresariales.NET
Microsoft Exchange Server: Ofrece servicios de mensajera (correo electrnico) y
colaboracin entre aplicaciones (workflow).
Microsoft Host Integration Server: Realiza la comunicacin entre sistemas Cliente/Servidor,
aplicaciones Intranet o Internet con los sistemas legados por el negocio, tales como
Mainframe o AS/400.

Microsoft Internet Security and Aceleration Server: Antes llamado Proxy Server, ISA Server se
usa para brindar seguridad en las comunicaciones por Internet.
Microsoft SQL Server: Es el servidor de datos de Microsoft que permite crear soluciones de
Data Warehouse y se integra con Microsoft Office.

3. Bloque de Servicios .NET


El Bloque de Servicios .NFT se est construyendo como un conjunto de Servicios Web XML que
permitan la integracin entre los usuarios y las aplicaciones clientes que corran en diferentes
dispositivos (PCs, dispositivos mviles, etc). Actualmente Microsoft tiene construido dos servicios
que ofrecen ventajas para los usuarios:
Microsoft Passport: Tiene un conjunto de servicios como el Single Sign In (SSI) que permite
autenticar si un usuario es vlido y puede participar en un sitio Web, aparte tiene otras
ventajas como reducir el tiempo de autenticacin, guardar contenido personalizado. etc.
Hotmail utiliza el servicio de Passport para la autenticacin de usuarios y guardar informacin
de ste en el Web.
Microsoft Hailstorm: Usa los servicios de Passport para guardar informacin personalizada del
usuario, pero su uso principal es almacenar Servicios Web que puedan ser usados por
aplicaciones de Visual Studio .NET o cualquier lenguaje compatible con .NET
El Marco. NET
Definiendo el Marco .NET

I.S.T.Idat 2 ASP.NET
Aplicaciones Web

Fl Marco .NET (en ingles .NET Framework) es la piedra angular de la plataforma .NET y
constituye u.i enlomo para la creacin, distribucin y ejecucin de servicios Web, as como de
otros tipos de aplicaciones.
Se compone de cuatro partes principales que son:
1. Tiempo de F-jccucin en Lenguaje Comn (CLR)
Es el RunTime comn para todos los lenguajes que soportan el Marco .NET y realiza la mayor
parte de funciones para que corran las aplicaciones.NET, es el que se encarga de compilar \
ejecutar una aplicacin, as como administrar su trabajo con el sistema.
2. Librera de Clases .NET
Son un conjunto de componentes que sirven para acceder a travs de objetos a la mayor parte de
servicios del sistema, labor que era realizada antes por las APIs de Windows, la
MEC o ATL de Visual C++, etc.
3. ADO.NET. vs XML
ADO .NET se usa para acceder a cualquier origen de datos sea relacional (bases de datos),
formatos planos (textos), etc. Por su parte, XML sirve como el formato para intercambiar los datos
en diferentes plataformas.
4. ASP.NET
Este componente incluye el soporte para la creacin, distribucin y mantenimiento de aplicaciones
Web as como de Servicios Web XML que son la razn de ser de la plataforma .NET
TIEMPO DE EJECUCIN EN LENGUAJE COMN (CLR)
Introduccin al RunTime y al CLR
Un RunTime es la aplicacin responsable de manejar la asignacin de memoria, inicio y
eliminacin de procesos mientras un programa se est ejecutando, as como de brindar seguridad
al cdigo, y tambin gestionar su relacin con otros programas o componentes.
l.os RunTime lian sido usados por los lenguajes de programacin como Visual Basic cuyo nombre
es el VBRLN, Visual C++ cuyo nombre es MSVCRT. Pero tambin Visual FoxPro, JScnpt,
SmaIlTalk. Per!, Python. Java, etc. tienen su propio RunTime.
Cada aplicacin Visual Basic 6 que se quera distribuir tenia que distribuirse con el RunTime, lo
mismo en Visual C-H-, la diferencia que el primero ocupaba demasiado espacio y no era tan
poderoso como el segundo.
EL RunTime de .NET se llama el CLR (Common Language RunTime o Tiempo de Ejecucin en
Lenguaje Comn) y es la solucin a los diferentes tipos de RunTime que manejan los diferentes
lenguajes de programacin antes mencionados, que ahora sern
Gestionados en ejecucin por un nico RunTime comn.
La ventaja de tener un solo RunTime son mltiples ya que se podr compartir las mismas
estructuras, tipos de datos, clases, etc. en todos los lenguajes que cumplan las especificaciones
del Marco .NET.
Servidos del CLR

I.S.T.Idat 3 ASP.NET
Aplicaciones Web

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

En el Marco .NET. un espacio de nombre es una conveniencia lgica de denominacin en tiempo


de diseo, mientras que un ensamblador establece el mbito de nombre para los tipos en tiempo
de ejecucin.

I.S.T.Idat 4 ASP.NET
Aplicaciones Web

En Visual Basic, por ejemplo para hacer uso de un Assemblie hay que usar los espacios de
nombre con la declaracin Imports, por ejemplo si quisiramos acceder a datos con SQL Server y
manejar archivos de texto en una aplicacin Windows realizaramos la siguiente declaracin:
Imports Systein.Windows.Forms
Imports System.Data.SQL
Imports System.10

CAPITULO 2: VISUAL STUDIO .NET


Introduccin a Visual Studio .NET
Definiendo Visual Studio .NET
Visual Sludio .NET es la Herramienta Rpida de Desarrollo (RAD) de Microsoft para la siguiente
generacin de Internet que son los Servicios Web XML. Esta herramienta permite la creacin de
aplicaciones usando el Marco .NET, es decir usando el CLR, la Librera de Clases, ADO .NET,
ASP .NET, etc.
Es un software que brinda las herramientas necesarias para crear, distribuir, administrar dar
mantenimiento a aplicaciones Web distribuidas que usan Servicios Web XML, todo esto con una
gran facilidad, rapidez y bajo costo.
Se puede crear aplicaciones Web directamente usando el Framework .NET y algn programa
editor, por ejemplo el Bloc de Notas, pero el tiempo que llevara el desarrollo no justificara el
ahorro de costos, en cambio, si se utiliza una herramienta como Visual Studio.NET el tiempo de
desarrollo se reducira enormemente.
Visual Studio .NET permite tambin la integracin y el uso cruzado de lenguajes de programacin:
Visual Basic .NET. Visual C# .NET, Visual C-H- .NET y JScript .NET
A diferencia de la versin anterior no existe Visual InterDev, ni Visual J++-, adems Visual
FoxPro .NET no comparte tas caractersticas unificadas del Marco .NET
Herramienta Rpida de Desarrollo (RAD)
La principal ventaja de Visual Studio .NET es realizar la creacin de aplicaciones de forma fcil y
rpida, tan solo con arrastrar y soltar objetos se pueden crear desde aplicaciones Windows hasta
Servicios Web XML.
Entre algunas de las ventajas del soporte RAD de Visual Studio tenemos:
Creacin de Pginas Web mediante Formularios Web
Visual Studio .NET incluye un diseador de pginas Web HTML y ASP .NET basado en
formularios Web. El diseador permite arrastrar controles, clases de datos, y otros objetos y
configurar sus propiedades como si fuese un formulario de una aplicacin para Windows.

Creacin de Servicios Web XML

I.S.T.Idat 5 ASP.NET
Aplicaciones Web

Para crear Servicios Web XML, Visual Studio .NET incluye una plantilla con Servicios Web de
ejemplo, los cuales puedes modificar y personalizar a tu medida, eligiendo el lenguaje que
deseas, que puede ser Visual Basic .NET, Visual C# .NET o Visual C++.NET

Acceso a Servicios Web XML


Una vez creado los Servicios Web XML deben usarse en otras aplicaciones del negocio, para ello
Visual Studio .NET cuenta con el Explorador de Servidores (Server Explorer) que permite ver los
Servicios Web publicados y usarlos con solo un arrastre. Tambin podemos usar un Servicio Web
haciendo referencia desde un proyecto mediante la opcin "Add Web Referente" del men
"Project".

Creacin de Componentes .NET


Crear componentes o controles de usuario es tan simple como crear un formulario, ya que usando
la herencia se puede pasar todas las caractersticas de un objeto a otro, esto este presente en
todos los objetos creados en Visual Studio .NET, sean visuales o no.
Creacin de archivos XML
Con el diseador de XML, crear un archivo XML es ms fcil que nunca, ya que se muestra de
colores el cdigo y s auto completan los Tags que uno va escribiendo. Este
Maneja 3 vistas: XML, esquemas y datos.
Existen mas caractersticas RAD en Visual Studio .NET, las cuales trataremos mas adelante.
Lenguajes en .NET
En Visual Studio .NET vienen los siguientes Lenguajes de Programacin:
Visual Basic .NET
Visual C# .NET
Visual C++ .NET
Visual FoxPro .NET (No administrado por el Marco .NET)
Visual JScript .NET
Qu es ASP.net?

El 20 de Enero del 2002 una nueva versin del tradicional Active Server Pages se ha lanzado al
pblico, no es ASP 4.0 sino ASP.net. ASP.net forma parte del .NET Framework de Microsoft, junto
con VB.net, C++.net, C# (algo as como una versin mejorada de C++) hasta incluso JScript.net.
Pero, cal es la diferencia de ASP.net con el ASP comn que conocemos?
Mucha, realmente es mucha. Mientras ASP se escriba en VBScript, ASP.net puede ser escrito en
cualquier lenguaje soportado por el .net Framework, es decir: VB.net; C# y JScript.net. Si, como
has ledo, ya no puedes utilizar VBScript sino que debes utilizar VB.net que es lo que ms se
aproxima. Otro cambio radical es que ASP.net es un lenguaje totalmente orientado a objetos.
Que mejoras trae ASP.net? Es realmente mejor que ASP?

I.S.T.Idat 6 ASP.NET
Aplicaciones Web

Sin duda, es mucho mejor que el ASP tradicional, ASP.net trae diversas mejoras entre las cuales
se destacan:
Rendimiento: la aplicacin de compila en una sola vez al lenguaje nativo, y luego, en
cada peticin tiene una compilacin Just In Time, es decir se compila desde el cdigo nativo, lo
que permite mucho mejor rendimiento. Tambin permite el almacenamiento del cach en el
servidor
Rapidez en programacin: mediante diversos controles, podemos con unas pocas lneas y en
menos de 5 minutos mostrar toda una base de datos y hacer rutinas complejas.
Servicios Web: trae herramientas para compartir datos e informacin entre distintos sitios.
Seguridad: tiene diversas herramientas que garantizan la seguridad de nuestras aplicaciones.
Estructura de una pagina web.-

GESTION CON BASES DE DATOS (ADO.NET)

ADO.NET es una tecnologa de acceso a datos que se basa en los objetos ADO (Objetos de
Datos ActiveX) anteriores. Es una manera nueva de acceder a los datos construida sobre ADO.
ADO.NET puede coexistir con ADO. Aunque usted no conozca ADO, en este captulo va a poder
usar ADO.NET y ver con ejemplos, como conectarse a una Base de Datos.

ADO.NET utiliza un modelo de acceso pensado para entornos desconectados. Esto quiere decir
que la aplicacin se conecta al origen de datos, hace lo que tiene que hacer, por ejemplo
seleccionar registros, los carga en memoria y se desconecta del origen de datos.

ADO.NET es un conjunto de clases que usted utiliza para acceder y manipular orgenes de
datos como por ejemplo, una base de datos en SQL Server o una planilla Excel.

El modelo de objetos ADO.NET tiene dos componentes centrales: una capa conectada, con
clases compuestas por el proveedor de datos .NET y una capa desconectada, cuya raz es
DataSet.

El nuevo modelo de datos de microsoft es ado.net este modelo descansa en una serie de
objetos especializados que facilitan el procesamiento de una base de datos.

I.S.T.Idat 7 ASP.NET
Aplicaciones Web

fuente microsoft.net

El problema es comunicar un programa o aplicacin con una base de datos y ms que comunicar
se pretende que el programa o aplicacin realize una serie de procesos u operaciones con la base
de datos o mejor aun con el conjunto de tablas que contiene una base de datos.

ADO.NET se encuentra en la biblioteca System.Data.dll, y ofrece clases en espacios de nombres


bien diferenciados que explico brevemente a continuacin:

System.Data: es el espacio de nombres primario. Dentro de este espacio de nombres tenemos


un conjunto de clases que representan, digamos, una base de datos virtual, tablas, filas,
columnas, relaciones, etc. Sin embargo, ninguna de estas clases ofrece conexin alguna con un
origen de datos, sino que simplemente representan los datos en s mismos.

System.Data.Common: ofrece clases comunes entre distintos orgenes de datos. Para lo que
vamos a tratar en este artculo, podemos decir que estas clases sirven de clase base para las que
estn contenidas en los dos espacios de nombres que vienen a continuacin.

System.Data.OleDb: contiene una serie de clases que nos permiten conectarnos con cualquier
origen de datos e interactuar con l al tiempo que sirven de "intermediarios" entre el origen de
datos y las clases del espacio de nombres System.Data que, segn decamos, no tienen conexin
alguna con dicho origen de datos. Las clases de System.Data.OleDb usan OLEDB como
tecnologa subyacente.

I.S.T.Idat 8 ASP.NET
Aplicaciones Web

System.Data.SqlClient: contiene clases que permiten interactuar con orgenes de datos SQL
Server de un modo mucho ms directo que OLEDB, mejorando el rendimiento para este tipo de
origen de datos. Por lo tanto, solamente se pueden utilizar para acceder a bases de datos de SQL
Server. El uso de sus clases es prcticamente equivalente al de las que se encuentran en
System.Data.OleDb.

Hay 3 espacios de nombres que usted va a


importar en un formulario Web si esta
usando ADO.NET:
System.Data.
System.Data.SqlClient.
System.Data.OleDb.

Recuerde la sentencia que usa VB.NET para


importar el espacio de nombres:

Imports System.Data 'Siempre


lo va a utilizar
Imports System.Data.SqlClient 'Para
acceder a SQL Server
Imports System.Data.OleDb. 'Para
cualquier origen de datos

LAS CLASES BSICAS DE ADO.NET

Las he llamado bsicas porque, realmente, sern el pilar fundamental para casi cualquier
aplicacin que tenga que acceder a un origen de datos con unos mnimos requisitos de eficiencia
y escalabilidad. Las clases ms importantes del espacio de nombres System.Data son:

DataSet: Es la piedra angular del modelo de objetos: Esta clase permite tener en memoria una
autntica "base de datos virtual", con sus tablas, relaciones, etc. Un hecho importante es que esta
base de datos virtual est total y absolutamente desconectada de cualquier origen de datos fsico
y, en consecuencia, siempre se aloja toda entera en la memoria. En otras palabras, puede
contener uno o varios conjuntos de filas distintos, que pueden estar o no estar relacionados entre
s, pero siempre en la memoria y siempre desconectados del origen de datos. La clase DataSet
est dentro del espacio de nombres System.Data.

DataTable: un DataTable representa un conjunto de filas y columnas tambin en memoria y


desconectado del origen de datos, como el DataSet. Pertenece al espacio de nombres
System.Data. La propiedad Tables de un objeto DataSet contiene una coleccin de objetos
DataTable, y dicha coleccin es de la clase DataTableCollection. Por otra parte, cada objeto
DataTable representa sus filas en la propiedad Rows (de la clase DataRowCollection), siendo

I.S.T.Idat 9 ASP.NET
Aplicaciones Web

cada fila, a su vez, un objeto de la clase DataRow, y sus columnas en la propiedad Columns (de la
clase DataColumnCollection), siendo cada columna un objeto de la clase DataColumn.

DataRelation: representa una relacin entre dos objetos DataTable. Tambin pertenece al
espacio de nombres System.Data. Todas las relaciones que haya en un DataSet se encuentran en
la coleccin Relations, de la clase DataRelationCollection.

Las clases ms importantes del espacio de nombres System.Data.SqlClient, y sus


equivalentes en el espacio de nombres System.Data.OleDb:

SqlConnection: su equivalente en OleDb es OleDbConnection. Son ms o menos equivalentes


a la clase Connection del antiguo ADO, en tanto en cuanto que proporcionan la conexin con el
origen de datos y mantiene algunas de sus antiguas propiedades y mtodos, como son
ConnectionString, ConnectionTimeOut, Open y Close. Sin embargo, al igual que las otras clases
que tambin tienen un equivalente (ms o menos) en la tecnologa antigua, ten presente que no
se manejan exactamente igual, como tendremos ocasin de ver ms adelante.

SqlCommand: su equivalente en OleDb es OleDbCommand. Tambin son parecidos a los


antiguos objetos Command de ADO y, como estos, representan procedimientos almacenados o
instrucciones SQL que se ejecutan en el origen de datos.

SqlParameter: su equivalente en OleDb es OleDbParameter. Del mismo modo que los dos
anteriores, se parecen a los objetos Paremeter del antiguo ADO, y representan un parmetro
dentro de la coleccin Parameters del objeto SqlCommand u OleDbCommand, segn el caso. La
coleccin Parameters de un objeto SqlCommand es de la clase SqlParameterCollection
(OleDbParameterCollection en OleDb).

SqlDataAdapter: su equivalente en OleDb es OleDbDataAdapter. Esta clase no tiene nada


parecido (ni de lejos) en el antiguo ADO. Contiene un conjunto de objetos SqlCommand (
OleDbCommand, segn proceda) en sus propiedades SelectCommand, InsertCommand,
UpdateCommand y DeleteCommand. Cuando se invoca el mtodo Fill, el DataAdapter rellena
un objeto DataSet o DataTable con el conjunto de filas resultante de ejecutar el comando
establecido en su propiedad SelectCommand. Cuando se invoca el mtodo Update, el
DataAdapter ejecuta el comando establecido en su propiedad InsertCommand para aadir al
origen de datos las filas nuevas aadidas a un DataTable, el comando UpdateCommand para
modificar las filas que hayan sido modificadas en el DataTable y el comando DeleteCommand
para eliminar las filas que hayan sido eliminadas en el DataTable. Por lo tanto, el DataAdapter es
el nexo que une los objetos DataSet y DataTable, totalmente desconectados, con el origen de

I.S.T.Idat 10 ASP.NET
Aplicaciones Web

datos fsico. Si la conexin estaba cerrada antes de ejecutar los mtodos Fill o Update, el
DataAdapter se ocupa de abrir dicha conexin para efectuar la operacin requerida, cerrando de
nuevo la conexin una vez que ha terminado. Si la conexin estaba abierta, el DataAdapter deja
que dicha conexin siga abierta despus de haber terminado.
SqlCommandBuilder: su equivalente en OleDb es OleDbCommandBuilder. Tampoco haba
nada en el antiguo ADO que hiciera lo que hace esta clase. Sencillamente se ocupa de generar
los objetos command necesarios para un determinado DataAdapter, gracias a los mtodos
GetInsertCommand, GetUpdateCommand y GetDeleteCommand.
Resumiendo

Objetos de Proveedores Propsito Objeto SQL Server Objeto para un origen


de Datos .NET 7.0 o 2000 OLEDB
Provee conectividad a un
Connection SqlConnection OleDBConnection
Origen de Datos
Provee acceso a comandos de
Command Base de Datos como Select, SqlCommand OleDBCommand
Delete, Insert y Update
Provee acceso a datos de solo
DataReader SqlDataReader OleDBDataReader
lectura
Utiliza el objeto Connection
para enlazar un objeto DataSet
con un Proveedor de Datos.
DataAdapter Tambin permite actualizar los SqlDataAdapter
Datos en el origen a partir de OleDBDataAdapter
las modificaciones hechas en
el DataSet.

Un DataSet guarda informacin en un


entorno desconectado. Despus de
que usted establece una conexin con
una Base de Datos entonces puede
acceder a sus datos.
El DataSet es la principal forma de
guardar datos cuando usted utiliza
ADO.NET

El DataSet le permite a usted guardar


datos que se obtuvieron de un origen
de datos. Los datos en un DataSet
pueden ser manipulados sin necesidad
que el formulario Web mantenga la
conexin con el origen de datos. La
conexin se reestablece recin cuando
usted necesita actualizar los cambios

Los datos siempre viajan en formato XML ASP.NET y ADO.NET transforman en


forma automtica XML en un DataSet.

I.S.T.Idat 11 ASP.NET
Aplicaciones Web

Aplicaciones..- Listado de datos empleando los controles de BDD

Se puede acceder al conjunto de servidores mediante(ver Explorador de servidores)

Vamos a crear una Base de Datos en el Servidor:

Haga click en el nombre de su servidor. Presione


el botn derecho del Mouse. Seleccione 'Nueva
Base de Datos'

Control datagrid1

Hacer la conexin con Northwind y de la caja de herramientas arrastrar


SqlConnection1(Haciendo referencia en propiedades a Northwind) , sqldataAdapter1
(configurando con la tabla Categories) y Dataset1 (Conjunto de datos) haciendo referencia a la
configuracin anterior.

I.S.T.Idat 12 ASP.NET
Aplicaciones Web

Acciones de ida y vuelta

Uno de los conceptos principales que debe comprender es la divisin del trabajo en una pgina de
formularios Web Forms. El explorador presenta el formulario al usuario y ste interacta con l,
causando que el formulario se enve de vuelta al servidor. Sin embargo, como todo procesamiento
que interacta con componentes de servidor debe ocurrir en el servidor, esto significa que, para
cada accin que necesita procesamiento, el formulario debe enviarse al servidor, procesarse y ser
devuelto al explorador

Servidor .NET (Active Server Pages .NET). Es una tecnologa para generar pginas
dinmicas en el servidor y enviarlas al cliente (navegador Web) que las ha solicitado,
ejecutando previamente el cdigo que contienen (cdigo Visual Basic, C#, etc.) y
convirtiendo el resultado a cdigo HTML, que es el nico que puede interpretar
adecuadamente el cliente.

I.S.T.Idat 13 ASP.NET
Aplicaciones Web

La clave de este proceso es que, a diferencia de la navegacin clsica en que el sevidor


espera (escucha) peticiones del cliente y, cuando las recibe, enva automticamente la
respuesta (generalmente un documento HTML que es mostrado en el navegador Web),

aqu el servidor ejecuta algn tipo de procesamiento a raz de la peticin del


cliente y elabora dinmicamente la respuesta que devuelve. En esquema sera:

El cliente (explorador Web) se conecta al servidor Web gracias a su URL


El cliente enva una peticin al servidor (solicita una pgina Web). El cliente puede
ejecutar cdigo (en el lado del cliente), con secuencias de comandos que se utilizan para
generar efectos dinmicos en el cliente (DHTML). Este cdigo no se procesa en el
servidor
El servidor busca la pgina solicitada y ejecuta el cdigo contenido en ella. Este cdigo
del lado del servidor se escribe en secuencias de comandos (para tareas simples) pero
tambin en lenguajes compilados (Visual Basic, C#, etc., para tareas complejas como son
clculos matemticos, recuperacin de datos, gestin de sitios, comercio electrnico, etc.)
El servidor traduce el resultado de la ejecucin del cdigo a HTML y lo enva al cliente
El cliente muestra al usuario el documento recibido. Si el usuario consulta el cdigo fuente
del documento que visita, no ver el cdigo original del archivo que reside en el servidor,
sino solamente cdigo HTML en que la tecnologa ASP .NET ha convertido el resultado
del procesamiento
CONFIGURACIN DE ASP .NET: para poder ejecutar pginas ASP .NET se necesita:

IIS (Internet Information Server): est disponible para Windows NT, Windows
2000, Windows XP Profesional y Windows .NET 2003. Dado que ASP .NET es
una tecnologa de servidor, requiere un servidor Web en ejecucin, de ah la
necesidad de IIS.
Tericamente no se puede utilizar en Windows XP Home ya que no aparece como
opcin en Agregar y quitar elementos de Windows pero, mediante unas
maniobras sencillas, s es posible instalarlo en sistemas con Windows XP Home
de manera que los poseedores de este sistema operativo tambin pueden
aprender ASP .NET .
SDK (Kit de Desarrollo de Software) de .NET Framework: est disponible para
Windows NT con SP6a, Windows 2000, Windows XP y Windows .NET 2003. Sin
este componente, el servidor Web por s mismo no es capaz de interpretar
adecuadamente las pginas ASP .NET. La instalacin de Visual Studio .NET
conlleva automticamente la del SDK de .NET Framework.

I.S.T.Idat 14 ASP.NET
Aplicaciones Web

Las pginas ASP .NET tienen la extensin aspx. Para visualizar adecuadamente una
pgina aspx no basta con ejecutarla con doble clic o abrirla desde el explorador Web,
de ambas maneras el documento se visualiza defectuosamente. Para que la pgina
aspx funcione, debe ser filtrada por el servidor Web, por lo que es necesario dirigir el
navegador Web a http://localhost (direccin de la mquina local) y ah a la direccin
correcta del archivo aspx.

COMPONENTES BSICOS DE UNA PGINA ASP .NET:

En la primera lnea destaca la directiva

<%@ Page Language="Vb" %>


que dice al servidor Web que se trata de una pgina ASP .NET y que usa Visual
Basic .NET como lenguaje de programacin. Tambin podra ser

<%@ Page Language="Cs" %>


en caso de usar C# como lenguaje de programacin.
Despus de la directiva @ Page vienen bloques de declaracin de cdigo, en
lenguaje Visual Basic .NET, incluidos en la etiqueta

<script runat=server><script>
Aqu es donde debe ir todo o la mayor parte del cdigo Visual Basic ya que este
cdigo es el nico compilado a MSIL
Despus comienza el cdigo HTML. Este cdigo, junto con el resultado del cdigo
ASP .NET, es enviado al cliente. En esta seccin puede haber bloques
proveedores de cdigo con instrucciones adicionales en ASP .NET, estos
bloques van entre las etiquetas <% y %> y no son compilados por lo que son
menos eficientes que los bloques de declaracin de cdigo
Es fundamental tener una etiqueta Form con el atributo runat=server, ello
convierte al formulario en un Formulario Web que es supervisado por ASP .NET
A lo largo del la pgina pueden aparecer elementos conocidos de HTML pero que
se declaran de manera especial:

<asp:textbox runat=server></asp:textbox>

Son controles Web, con algunas funcionalidades similares a las de los


elementos HTML del mismo nombre pero con otras aadidas por ASP .NET

SEPARACIN DE CDIGO VB Y CONTENIDO HTML: En muchas ocasiones es til


mantener el contenido HTML de las pginas fuera del cdigo Visual Basic, aumenta la

I.S.T.Idat 15 ASP.NET
Aplicaciones Web

legibilidad del cdigo fuente de los archivos y facilita su modificacin por el


programador. Se pueden usar formularios con cdigo de apoyo, llevando a estos
formularios o archivos de cdigo *.vb todo el cdigo Visual Basic del archivo aspx y
declarando en ellos versiones pblicas de los controles de servidor que se usan en la
pgina. Por ejemplo, para una etiqueta llamada lbEtiqueta en el archivo aspx, se puede
escribir en el archivo de cdigo:

Public lbEtiqueta As Label

de esa manera, el control de servidor lbEtiqueta (Label) de la pgina aspx es una instancia de la
variable lbEtiqueta de la clase datagridVb declarada en el archivo vb y, desde el cdigo de la
clase, se puede acceder a las propiedades del control a pesar de encontrarse en 2 archivos
diferentes.
Por ejemplo si se utiliza un archivo externo como cdigo de apoyo:

- la pgina Asp .NET datagrid.aspx contiene solamente cdigo HTML con controles de servidor

- el archivo de cdigo de apoyo datagrid.aspx.vb contiene el cdigo Visual Basic .NET con
declaraciones de variables y procedimientos

Ambos archivos han de estar juntos en la misma carpeta para que funcione el cdigo actual pero,
como se ver ms adelante, pueden estar situados en carpetas diferentes. El archivo
datagrid.aspx necesita de estos atributos en la directiva @ Page al comienzo del cdigo:

- Si se trabaja fuera del entorno RAD de Visual Studio .NET (ej: editor de texto y servidor Web), se
usa el atributo Inherits, que define la clase que hereda la pgina aspx (puede ser cualquier
clase derivada de la clase Page), y el atributo Src, que especifica el archivo de cdigo fuente en
el que se define la clase heredada (es compilado dinmicamente cuando se solicita la pgina
aspx); este archivo puede estar situado en cualquier carpeta del servidor, slo hay que
especificarlo correctamente en la ruta.
As es como debe ser configurado al colocar las pginas en el servidor Web:

<%@ Page Language="vb" Inherits="datagridVb" Src="datagrid.aspx.vb" %>

(aqu la pgina aspx hereda la clase datagridVb, que est descrita en el archivo
datagrid.aspx.vb, que es compilado en tiempo de ejecucin)

Si se trabaja en un entorno RAD como Visual Studio .NET, se usa el atributo Codebehind, que
especifica el nombre del archivo compilado que contiene la clase asociada con la pgina (el

I.S.T.Idat 16 ASP.NET
Aplicaciones Web

diseador de formularios Web Forms de Visual Studio .NET usa este atributo para averiguar
dnde se encuentra la clase derivada de Page, de forma que pueda crear una instancia de la
misma para que se pueda trabajar con ella en tiempo de diseo) (Codebehind no se usa en
tiempo de ejecucin), y el atributo Inherits, que define la clase que hereda la pgina aspx.
As es como debe ser configurado mientras se trabaja con la pgina dentro de Visual Studio .NET:

<%@ Page Language="vb" Codebehind="datagrid.aspx.vb" Inherits="datagrid.datagridVb"


%>
(aqu la pgina aspx utliiza el atributo Inherits para heredar la clase derivada de Page, la clase
datagridVb, descrita en el archivo datagrid.aspx.vb, que es precompilado en segundo plano
para poder probar la pgina a medida que se va construyendo)

ESPACIOS DE NOMBRES Y HERENCIA: A su vez, en el archivo de cdigo de apoyo


datagrid.aspx.vb, hay que importar determinados espacios de nombres, necesarios para utilizar
ASP .NET, que no es necesario especificar cuando todo el cdigo va en la pgina aspx (Asp .NET
lo hace automticamente por nosotros) y tambin heredar la clase Page (de System.Web.UI) al
declarar la clase datagridVb:
Imports System
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Public Class datagridVb : Inherits Page
En este ejercicio en concreto tambin han de importarse los espacios de nombres Data y
Data.OleDb para permitir el uso de ADO .NET:
Imports System.Data
Imports System.Data.OleDb

Los operadores empleados.-


Operadores Aritmeticos
Otros operadores
^ Exponenciacion complementarios
* ,/ Multiplicacin y divisin real Asigna y opera
\ divisin entera +=, -= ,*= , /= , ^=
a=a+5 equivale a+=5
Mod residuo de una divisin entera
A=23\4 la respuesta es 5
A= 23 mod 4 resultado 3
Operadores de comparacin
Igualdad (=)
Desigualdad (<>)

I.S.T.Idat 17 ASP.NET
Aplicaciones Web

Menor o mayor que (<,>)


Mayor o igual que (>=)
Menor o igual que (<=)
Like
Explicacin
TypeOf...Is
Conversin de tipos
Var = CType(Val("10 * 25"), Integer)

Con esto le estamos diciendo al VB que primero convierta la cadena en un nmero mediante la
funcin Val, (que devuelve un nmero de tipo Double), despus le decimos que ese nmero
Double lo convierta en un valor Integer.
Tambin podramos hacerlo de esta otra forma:
i = CInt(Val("10 * 25"))

Nombre de la Tipo de Valores del argumento "expresion"


funcin datos que
devuelve
CBool(expresion) Boolean Cualquier valor de cadena o expresin
numrica.
CByte(expresion) Byte de 0 a 255; las fracciones se redondean.
CChar(expresion) Char Cualquier expresin de cadena; los valores
deben ser de 0 a 65535.
CDate(expresion) Date Cualquier representacin vlida de una fecha
o una hora.
CDbl(expresion) Double Cualquier valor Duoble, ver la tabla anterior
para los valores posibles.

I.S.T.Idat 18 ASP.NET
Aplicaciones Web

Enlaces de datos con los controles Web Form


Aplicacin 1.- Sin incluir controles Form

Resultado

Codificacin.-
<%@ Page language="vb"%>
<HTML>
<body>
<center>
<form name="frmintro" method="post" action="demo1.aspx">
<h3>Primer Ejemplo</h3>
<h3>Ingrese Su Nombre :<input type =text name = "nombre"
value ="<%=request.form("nombre")%>">
Carrera : <select name="categoria" size=1>
<%
Dim i as integer
Dim values() as string={"Ing. Sistemas","Medicina","Psicologia","Administracion"}
for i=0 to values.length -1
%>
<% if request.form("categoria")=values(i) then%>
<option selected>
<%else%>
<option>
<%end if%>
<%=values(i)%></option>
<%next%>
</selected></h3>
<input type =submit name="busqueda" value ="busqueda">
<%if(not request.form("busqueda")=nothing) then%>
<p> Hola, <%=request.form("nombre")%>, has seleccionado la Carrera de :
<% =request.form("categoria")%> </p>
<%end if%>
</form>
</center>

I.S.T.Idat 19 ASP.NET
Aplicaciones Web

</body>
</HTML>

Aplicacin 2.- Segunda forma empleando etiquitas script

<html>
<head>
<script language="VB" runat="server">
Sub Page_Load(sender As Object, e As EventArgs)
If Not IsPostBack Then si la pagina no esta cargada
Dim values as ArrayList= new ArrayList()
values.Add ("Visual Net")
values.Add ("Power Builder")
values.Add ("Macromedia MX")
values.Add ("Sql Server")
values.Add ("Oracle")
values.Add ("Linux")
DropDown1.DataSource = values
DropDown1.DataBind
End If
End Sub

Sub SubmitBtn_Click(sender As Object, e As EventArgs)


Label1.Text = "Su eleccin: " + DropDown1.SelectedItem.Text
End Sub
</script>
</head>
<body>
<h3><font face="Verdana">Enlace de datos de DropDownList</font></h3>
<form runat="server" ID="Form1">
<asp:DropDownList id="DropDown1" runat="server" />
<asp:button Text="Enviar" OnClick="SubmitBtn_Click" runat="server" ID="Button1"
NAME="Button1" />
<p><asp:Label id="Label1" font-name="Verdana" font-size="10pt" runat="server" />
</form>
</body>
</html>

Nota.-
En vez de un aria Lisa tambin se puede emplear un arreglo dinmico
Dim values() as string={Visual Net, Power Builder, Macromedia Mx,sql server}

I.S.T.Idat 20 ASP.NET
Aplicaciones Web

Dropdown1.datasource=values

1.- Lo primero y ms importante a recordar es que en este modelo de programacin el codigo en


vbNet estar embebido o empotrado junto con codigo html.
2.- Este codigo mezcla instrucciones y objetos de dos lenguajes de programacin diferentes, ellos
son HTML y vbNet.
3.- El problema es que los objetos HTML no tienen suficientes propiedades y mtodos para
resolver muchos problemas de programacin, por esta razn Microsoft.Net crea unas
cubiertas?(WRAPPERS) para cada uno de ellos, en su librera System.Web.UI.Control, o
coleccin HTMLCONTROL, estos nuevos objetos o controles son:

HtmlInputButton, HtmlInputCheckBox, HtmlInputFile, HtmlInputHiden, HtmlputImage,


HtmlInputRaddioButton, HtmlInputText, HtmlAnchor, HtmlButton, HtmlForm, HtmlGenericControl,
HtmlSelect, HtmlTable, HtmlTableCell, HtmlTableRow, HtmlTextArea, HtmlImage.
Estos controles aceptan o pueden usar todas las propiedades originales de los objetos HTML y
algunas nuevas propiedades y mtodos como se observa en el programa ejemplo.
La nica propiedad que no se menciona y se usa en todos estos objetos htmlcontrol es
runat="server" que se utiliza para indicarle al servidor de paginas que debe compilar y ejecutar el
programa.aspx usando el lenguaje apropiado y solo mandarle el resultado de esta compilacin a
la maquina cliente que lo pidi.
4.- El script o miniprograma empieza con <SCRIPT y termina con </SCRIPT>.
5.- Recordar respetar todas las ID de los objetos y las variables que se hayan declarado.
6.- La primera sopresa agradable comparada con los otros modelos de programacin es que de
los objetos htmlcontrols se pueden manipular directamente sus propiedades y mtodos, es
decir ya no hay necesidad ( aunque se puede) de usar los objetos tradicionales de ASP.
7.- Como se observa en el programa, se pueden manipular directamente los objetos HTML, y con
un solo rengln de instruccin en vbnet se puede resolver el problema completo.

Empleando Web Form con cdigos en Visual VB

Comienza con una directiva o instruccin PAGE que en principio es el compilador de paginas de
ASP.NET y su atributo INHERITS le indica a dicho compilador que use ejemplo.aspx y el codigo
fuente o SouRCe que esta en el archivo llamado ejemplo.aspx.VB

Aparte de la directiva PAGE, existen las siguientes:

ASP.NET PAG-LEVEL DIRECTIVES:

I.S.T.Idat 21 ASP.NET
Aplicaciones Web

DIRECTIVE DESCRIPCION

@ Page Define atributos usados para compilar paginas ASP.NET

@ Control Define atributos usados para compilar controles de usuarios

@ Import Importa NAMESPACES desde la librera de clases de .NET

@ Register Define alias, tais, y otros parmetros para controles de usuarios y


normales

@ Assembly Identifica otros archivos ( assemblies) para enlazar a esta pagina

Aplicacin.- Ingresando un radio muestra su area en una etiqueta e ingresando una cadena o
prrafo lo ordena de forma ascendente
Ejemplos:

Cdigos
Public Class SystemClass
Inherits System.Web.UI.Page
Protected WithEvents txtRadius As
System.Web.UI.WebControls.TextBox
Protected WithEvents butCalculate As
System.Web.UI.WebControls.Button
Protected WithEvents txtSort As
System.Web.UI.WebControls.TextBox
Protected WithEvents butSort As
System.Web.UI.WebControls.Button

I.S.T.Idat 22 ASP.NET
Aplicaciones Web

Protected WithEvents litResult As


System.Web.UI.WebControls.Literal

+ codigo Generado

Private Sub Page_Load(ByVal sender As System.Object, ByVal e


As System.EventArgs) Handles MyBase.Load
'Put user code to initialize the page here
End Sub

Private Sub butCalculate_Click(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles butCalculate.Click
' Declare variables.
Dim dblCircArea, dblRadius As Double
' Convert text input to a double (optional).
If txtRadius.Text <> "" Then _
dblRadius = System.Convert.ToDouble(txtRadius.Text)
' Calculate area.
dblCircArea = System.Math.PI * System.Math.Pow(dblRadius,
2)
' Display result.

ShowResult(dblCircArea)
End Sub

Private Sub butSort_Click(ByVal sender As System.Object, ByVal


e As System.EventArgs) Handles butSort.Click
' Declare an array.
Dim arrSort As String()
' Place each word in an array element
arrSort = txtSort.Text.Split(" ")
' Sort the array.
System.Array.Sort(arrSort)
' Display result.
ShowResult(String.Join(" ", arrSort))
End Sub

Sub ShowResult(ByVal Result As String)


litResult.Text = "<h3>Results</h3>"
litResult.Text += "<p>Sorted string: <b>" + Result +
"</b>"
End Sub

Sub ShowResult(ByVal Result As Double)


litResult.Text = "<h3>Results</h3>"
litResult.Text += "<p>The circle's area is: <b>" +
Result.ToString() + "</b>"
End Sub

End Class

I.S.T.Idat 23 ASP.NET
Aplicaciones Web

FUNCIONES CON NUMEROS

Funcion Devuelve
Abs Valor absoluto de un numero real
Int Parte entera de un real
Rnd Un numero al azr entre 0 y 1
Exp Exponecial de un numero real es decir e = 2.71828

El objeto Math.funciones
Math. Reunid (nov. - Redondea, con ciertos nmeros de decimal
Math. Round (3.45, 1) 'Returns 3.4.
Math.Round(3.46, 1) 'Returns 3.5.
Math.PI .- El valor de este campo es 3,14159265358979323846
Math.acos.- Devuelve el ngulo cuyo coseno es el nmero especificado
Math.ceiling.- Devuelve el nmero entero ms pequeo mayor o igual que el nmero especificado.
Math.ceiling(3.1) 4
Math.Floor.- Devuelve el nmero entero ms grande menor o igual que el nmero especificado
Math.Floor(3.1) 3
Math.sqrt(n).- Devuelve la raz cuadrada de un nmero especificado.
Math.pow(n).- Devuelve un nmero especificado elevado a la potencia especificada
Funciones Fechas.
Las fechas son cadenas especiales. Visual Basic sabe obtener y tratar la informacin relativa a la
fecha y la hora. Dispone para ello de una declaracin de variable: Date. Una variable declarada
como date puede contener una fecha, una fecha y una hora o una hora solamente.

Dim MyDate As Date


Dim MyMonth As Integer
MyDate = #2/12/1969# ' Assign a date.
MyMonth = Month(MyDate) ' MyMonth contains 2.
Now Devuelve la fecha y hora actual.
WeekDay Devuelve el da de la semana (En nmero, 1=Domingo, 2=Lunes,...)
Dim MyDate As Date
Dim MyWeekDay As Integer
MyDate = #2/12/1969# ' asigna una fecha
MyWeekDay = Weekday(MyDate) ' MyWeekDay contains 4
Day Obtiene el da, a partir de una fecha
Dim MyDate As Date
Dim MyDay As Integer
MyDate = #2/12/1969# .
MyDay = Microsoft.VisualBasic.Day(MyDate) ' MyDay contains 12.

Month Obtiene el mes a partir de una fecha.

MyMonth = Month(MyDate) ' MyMonth contains 2.

I.S.T.Idat 24 ASP.NET
Aplicaciones Web

Year Obtiene el ao a partir de una fecha.


MyYear = Year(MyDate) ' MyYear contains 1969.

Hour Obtiene la hora a partir de una hora

Minute Obtiene el minuto a partir de una hora.

Second Obtiene el segundo a partir de una hora.

DateAdd Aade un intervalo de tiempo a una fecha


Interval
Requerido. Valor de enumeracin DateInterval o expresin String que representa el
intervalo de tiempo que se desea agregar.
Number
Requerido. Double. Expresin de punto flotante que representa el nmero de intervalos
que se desea agregar. Number puede ser un valor positivo (para obtener fechas u horas
futuras) o negativo (para obtener fechas u horas pasadas). Puede contener una parte
decimal cuando Interval especifica horas, minutos o segundos. Para otros valores de
Interval, se omite cualquier parte decimal de Number.
DateValue
Requerido. Date. Expresin que representa la fecha y la hora a la que debe agregarse el
intervalo. El propio DateValue no se modifica en el programa que realiza la llamada.
Valores
El argumento Interval puede tener uno de los siguientes valores:
Valor de enumeracin Cadena Unidad de intervalo de tiempo agregada
DateInterval.Day d Da; truncado al valor integral
DateInterval.DayOfYear y Da; truncado al valor integral
DateInterval.Hour h Hora; redondeada al milisegundo ms cercano
DateInterval.Minute n Minuto; redondeado al milisegundo ms cercano
DateInterval.Month m Mes; truncado al valor integral
DateInterval.Quarter q Trimestre; truncado al valor integral
DateInterval.Second s Segundo; redondeado al milisegundo ms cercano
DateInterval.Weekday w Da; truncado al valor integral
DateInterval.WeekOfYear ww Semana; truncada al valor integral
DateInterval.Year yyyy Ao; truncado al valor integral

Dim NextTime As Date = Now ' Current date and time.


NextTime = NextTime.AddDays(3.4) ' Increment by 3 2/5 days.

En este ejemplo se toma una fecha y mediante la funcin DateAdd, se muestra la fecha
correspondiente un nmero especificado de meses en el futuro.

Dim Msg, Number, StartDate As String 'Declare variables.

I.S.T.Idat 25 ASP.NET
Aplicaciones Web

Dim Months As Double


Dim SecondDate As Date
Dim IntervalType As DateInterval
IntervalType = DateInterval.Month ' Especifica intervalos en meses.
StartDate = InputBox("Ingrese fecha ")
SecondDate = CDate(StartDate)
Number = InputBox("Ingrsa el numero de meses a adicionar")
Months = Val(Number)
Msg = "New date: " & DateAdd(IntervalType, Months, SecondDate)

Aplicacin con Datgrid pero sin conexin a BDD

RequieredFieldValidator.-(valida2)
Errormensage Campo oblugatorio
ControlTovalidate:Txtmon
RangeValidator (Valida1)
ErrorMessage.- Mes entre 6- 18
ControlTovalidate.- Txtmes

ValidationSummary .- Resumen de errores

Public Class WebForm3


Inherits System.Web.UI.Page
+codigo Generado
Dim dt As DataTable
Dim dr As DataRow

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles MyBase.Load
End Sub

Private Sub BtnCalcula_Click(ByVal sender As System.Object, ByVal e


As System.EventArgs) Handles BtnCalcula.Click
Dim m, mes As Integer

I.S.T.Idat 26 ASP.NET
Aplicaciones Web

Dim interes, monto, mactual As Double


Dim fecha As Date = Date.Now
mes = Val(txtmes.Text)
monto = Val(txtmon.Text)
dt = New DataTable()
dt.Columns.Add(New DataColumn("Mes"))
dt.Columns.Add(New DataColumn("Interes"))
dt.Columns.Add(New DataColumn("Monto"))
For m = 1 To mes
interes = monto * 0.01 * m
mactual = interes + monto
fecha = DateAdd("m", 1, fecha)
dr = dt.NewRow()
dr(0) = Format(fecha, "dd/MM/yy")
' si escribe la m con minuscula asumira como m en minutos
dr(1) = interes.ToString()
dr(2) = mactual.ToString
'Adiciona una fila al datatable
dt.Rows.Add(dr)
Next

DataGrid1.DataSource = New DataView(dt)


DataGrid1.DataBind()
End Sub
End Class

Aplicacion empleando Hipervnculos en un formulario


Se ingresa el cdigo del cliente, si existe muestra su orden y al hacer un clic en ver detalle
muestra el detalle de ese pedido

En el datagrid1 en generador de proiedades:

I.S.T.Idat 27 ASP.NET
Aplicaciones Web

Dar el encabezado
para cada columna en
columna enlzada

Y en columna
Hipervnculo llamar al
formulario
Frmdetalle.aspx
pasando el numero de
orden={0}

I.S.T.Idat 28 ASP.NET
Aplicaciones Web

Formulario FRMDETALLE.ASPX

Codificacin en el formulario FRMOrden.aspx

Imports System.Data.SqlClient
Public Class weborden
Inherits System.Web.UI.Page
Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox
Protected WithEvents BtnBusca As System.Web.UI.WebControls.Button
Protected WithEvents Lbmensaje As System.Web.UI.WebControls.Label
Protected WithEvents Label1 As System.Web.UI.WebControls.Label
Protected WithEvents Label2 As System.Web.UI.WebControls.Label
Protected WithEvents Label3 As System.Web.UI.WebControls.Label
Protected WithEvents DataGrid1 As System.Web.UI.WebControls.DataGrid

+ Cdigo generado por el Diseador de Web Forms "

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles MyBase.Load
End Sub
Private Sub BtnBusca_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnBusca.Click
Dim cn As New SqlConnection("uid=sa;database=northwind;server=(local)")
Dim objda As New SqlDataAdapter("select OrderId,OrderDate,Freight from orders
where customerid='" + TextBox1.Text + "'", cn)
Dim objds As New DataSet()
Dim NRO As Integer
objda.Fill(objds)
DataGrid1.DataSource = objds
DataGrid1.DataBind()
NRO = DataGrid1.Items.Count
If NRO > 0 Then

I.S.T.Idat 29 ASP.NET
Aplicaciones Web

Lbmensaje.Text = NRO
Else
Lbmensaje.Text = "NO EXISTE CLIENTE"
End If
End Sub
End Class

Codificacin FRMDETALLE.ASPX pasando el numero de pedido (orden)


Codificacin

Imports System.Data.SqlClient
Public Class FrmDetalle
Inherits System.Web.UI.Page
Protected WithEvents DataGrid1 As System.Web.UI.WebControls.DataGrid
Protected WithEvents Label1 As System.Web.UI.WebControls.Label
Protected WithEvents Label2 As System.Web.UI.WebControls.Label
Protected WithEvents Lbtot As System.Web.UI.WebControls.Label
Protected WithEvents HyperLink1 As System.Web.UI.WebControls.HyperLink
Protected WithEvents LBNRO As System.Web.UI.WebControls.Label

+Region " Cdigo generado por el Diseador de Web Forms "


Dim cn As New SqlConnection("uid=sa;database=northwind;server=(local)")
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
'Introducir aqu el cdigo de usuario para inicializar la pgina
Dim SQL As String
SQL = "SELECT ProductName,Quantity,p.UnitPrice,Total=Quantity*P.UnitPrice "
SQL += " from [order Details] D Inner Join Products P on P.Productid=D.ProductId "
SQL += " where OrderId=" + Request.QueryString("orden")
Dim objda As New SqlDataAdapter(SQL, cn)
Dim objds As New DataSet()
Dim NRO, F As Integer
Dim sm As Double
objda.Fill(objds)
DataGrid1.DataSource = objds
DataGrid1.DataBind()
LBNRO.Text = Request.QueryString("orden")
NRO = DataGrid1.Items.Count determina cuantas filas hay en el grid
If NRO > 0 Then
Dim dr As DataTable variable tipo tabla
dr = objds.Tables(0) asigna la tabla del dataset
sm = 0
For F = 0 To NRO 1 recorre la tabla pero de la columna total (3)
sm += dr.Rows(F).Item(3)
Next
Lbtot.Text = sm
End If

End Sub

I.S.T.Idat 30 ASP.NET
Aplicaciones Web

End Class
Aplicacin Consulta en cascada .- en un DropDownList1 colocar los nombres de los clientes
(CompanyName) pero cuando se elige un cliente que acceda a su cdigo CustomerId , mostrando
en DropDownList2 todos sus pedidos y al elegir un pedido que muestre el detalle de ese pedido

Controles empleados

DropDwonList2
(para Clientes)

DropDownList1
Para pedidos

Ambos colocar en la
propiedad:
AutoPostBack=True
Para que pueda
seleccionarse

Un Datagrid1 y una
etiquita LBtot

Imports System.Data.SqlClient
Public Class webpedidos
Inherits System.Web.UI.Page
Protected WithEvents DataGrid1 As System.Web.UI.WebControls.DataGrid
Protected WithEvents DropDownList1 As System.Web.UI.WebControls.DropDownList
Protected WithEvents DropDownList2 As System.Web.UI.WebControls.DropDownList
Protected WithEvents Label3 As System.Web.UI.WebControls.Label
Protected WithEvents Label4 As System.Web.UI.WebControls.Label
Protected WithEvents Lbtot As System.Web.UI.WebControls.Label
Protected WithEvents Label1 As System.Web.UI.WebControls.Label
Protected WithEvents Label5 As System.Web.UI.WebControls.Label

+ " Cdigo generado por el Diseador de Web Forms "

Dim cadcon = "uid=sa; database=northwind;server=(local)"


Dim cn As New SqlConnection(cadcon)

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles MyBase.Load
'Introducir aqu el cdigo de usuario para inicializar la pgina

I.S.T.Idat 31 ASP.NET
Aplicaciones Web

If Not IsPostBack Then


clientes() Si la pagina no ha sido cargada
End If
End Sub
Sub clientes()
Dim ds As New DataSet()
Dim da As New SqlDataAdapter("select Customerid, Companyname from
Customers", cn)
da.Fill(ds, "Cliente")
DropDownList2.DataSource = ds
DropDownList2.DataTextField = "Companyname" ' Muestra el Nombre
DropDownList2.DataValueField = "Customerid" 'Para acceder a su codigo
DropDownList2.DataBind()
da.Dispose()
cn.Dispose()
End Sub

Sub verpedidos()
Dim ds As New DataSet()
Dim da As New SqlDataAdapter("select * from orders where customerid='" +
DropDownList2.SelectedItem.Value + "'", cn)
da.Fill(ds, "orden")
DropDownList1.DataSource = ds
DropDownList1.DataTextField = "orderid"
'DropDownList1.DataValueField = "orderid"
DropDownList1.DataBind()
da.Dispose()
cn.Dispose()
End Sub
Sub VerDetalle()
Dim da As SqlDataAdapter
Dim sql As String
Dim ds As New DataSet()
sql = "SELECT ProductName,Quantity,p.UnitPrice,Total=Quantity*P.UnitPrice "
sql += " from [order Details] D Inner Join Products P on P.Productid=D.ProductId "
sql += " where OrderId=" + Me.DropDownList1.SelectedItem.Text
da = New SqlDataAdapter(sql, cn)
da.Fill(ds)
DataGrid1.DataSource = ds
DataGrid1.DataBind()
Dim sm As Single
Dim f As Integer
Dim dt As DataTable
sm = 0
dt = ds.Tables(0)
For f = 0 To dt.DefaultView.Count - 1
sm = sm + dt.Rows(f).Item(3)
Next
Lbtot.Text = sm.ToString
End Sub

I.S.T.Idat 32 ASP.NET
Aplicaciones Web

Private Sub DropDownList1_SelectedIndexChanged(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles DropDownList1.SelectedIndexChanged
VerDetalle()
End Sub

Private Sub DropDownList2_SelectedIndexChanged(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles DropDownList2.SelectedIndexChanged
verpedidos()
End Sub
End Class

Aplicacion.-
Empleando el espacio de trabajo system.data.oledb el cual se puede aplicar a cualquier BBD
como oracle, sysbase, Access , etc. Porque la conexin es a traves de un proveedor, la aplicacin
consiste en seleccionador un cliente desde un DropDwonList , ademas buscar el detalle pedido
del mayor monto.
Aspnet

I.S.T.Idat 33 ASP.NET
Aplicaciones Web

Imports System.Data.SqlClient
Imports System.Data.OleDb
Imports System.Text

Public Class Clientes


Inherits System.Web.UI.Page
Protected WithEvents CboCustomer As
System.Web.UI.WebControls.DropDownList
Protected WithEvents BtnBuscar As System.Web.UI.WebControls.Button
Protected WithEvents BtnRegresar As System.Web.UI.WebControls.Button
Protected WithEvents BtnMayor As System.Web.UI.WebControls.Button
Protected WithEvents Label2 As System.Web.UI.WebControls.Label
Protected WithEvents DgdOrdenes As
System.Web.UI.WebControls.DataGrid
Protected WithEvents Label3 As System.Web.UI.WebControls.Label
Protected WithEvents DgdDetalle As
System.Web.UI.WebControls.DataGrid
Protected WithEvents Label4 As System.Web.UI.WebControls.Label
Protected WithEvents Label1 As System.Web.UI.WebControls.Label

+ codigo Generado Cdigo generado por el Diseador de Web Forms "

Dim OCon As OleDb.OleDbConnection


Dim SCon As String

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles MyBase.Load
'Introducir aqu el cdigo de usuario para inicializar la pgina
Dim Sql As String
SCon =
"Provider=SqlOleDb;uid=sa;pwd=;database=northwind;server=(local)"
OCon = New OleDb.OleDbConnection(SCon)
Sql = "Select * From Customers"
Dim Cmd As OleDb.OleDbCommand
Cmd = New OleDb.OleDbCommand(Sql, OCon)

Cmd.Connection.Open()
Dim OReader As OleDb.OleDbDataReader
OReader = Cmd.ExecuteReader

While OReader.Read
CboCustomer.Items.Add(OReader.GetString(1))
CboCustomer.Items(CboCustomer.Items.Count - 1).Value =
OReader.GetString(0)
End While

OReader.Close()
End Sub

Private Sub BtnBuscar_Click(ByVal sender As System.Object, ByVal e


As System.EventArgs) Handles BtnBuscar.Click
Dim SSql As StringBuilder
Dim XCustomerId As String
SSql = New StringBuilder("Select O.OrderId, O.ShipCountry,
O.OrderDate, Sum(D.UnitPrice * D.Quantity) As Monto From Orders O,
[Order Details] D Where O.OrderId = D.OrderId And CustomerId = '")

I.S.T.Idat 34 ASP.NET
Aplicaciones Web

XCustomerId = Me.CboCustomer.SelectedItem.Value
SSql.Append(XCustomerId)
SSql.Append("' Group By O.CustomerId, O.OrderId, O.ShipCountry,
O.OrderDate")

Dim Cmd As New OleDb.OleDbCommand(SSql.ToString, OCon)


Dim OReader = Cmd.ExecuteReader

DgdOrdenes.DataSource = OReader
DgdOrdenes.DataBind()

DgdDetalle.DataSource = ""
DgdDetalle.DataBind()

End Sub

Private Sub BtnMayor_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles BtnMayor.Click
Dim WSql As String
Dim WCustomerId As String
Dim WOrderId As String

WCustomerId = Me.CboCustomer.SelectedItem.Value
WSql = "Select Top 1 O.OrderId, Sum(D.UnitPrice * D.Quantity) As
Monto From Orders O, [Order Details] D Where O.OrderId = D.OrderId And
CustomerId = '" + WCustomerId + "' Group By O.CustomerId, O.OrderId
Order By Monto Desc"

Dim WCmd As New OleDb.OleDbCommand(WSql, OCon)


Dim WReader As OleDb.OleDbDataReader
WReader = WCmd.ExecuteReader
While WReader.Read()
WOrderId = WReader(0)
End While
WReader.Close()

'Llenar el Detalle del Grid de Mayor Monto


Dim YSql As StringBuilder
Dim YCustomerId As String
YSql = New StringBuilder("Select D.OrderId, D.ProductId,
P.ProductName, D.UnitPrice, D.Quantity, D.UnitPrice * D.Quantity As
SubTotal From [Order Details] D, Products P Where D.ProductId =
P.ProductId And OrderId = '")
YSql.Append(WOrderId)
YSql.Append("' Order By P.ProductId")

Dim YCmd As New OleDb.OleDbCommand(YSql.ToString, OCon)

Dim YReader = YCmd.ExecuteReader

DgdDetalle.DataSource = YReader
DgdDetalle.DataBind()

End Sub

Private Sub BtnRegresar_Click(ByVal sender As System.Object, ByVal e


As System.EventArgs) Handles BtnRegresar.Click

I.S.T.Idat 35 ASP.NET
Aplicaciones Web

Response.Redirect("Menu.aspx")
End Sub
End Class

Aplicacin con Web Form Empleando la BDD Universidad

Adicin y eliminacin e datos sin emplear Store Procedure

Codificacin.-

Autor : A. Moreno
Imports System.Data.SqlClient
Public Class WebForm1
Inherits System.Web.UI.Page
Protected WithEvents DataGrid1 As System.Web.UI.WebControls.DataGrid
Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox
Protected WithEvents TextBox2 As System.Web.UI.WebControls.TextBox
Protected WithEvents TextBox3 As System.Web.UI.WebControls.TextBox

Dim cadcon = "uid=sa; database=Universidad;server=(local)"


Dim cn As New SqlConnection(cadcon)
Protected WithEvents Button3 As System.Web.UI.WebControls.Button
Dim ds As DataSet
+ Cdigo generado por el Diseador de Web Forms "

Dim da As SqlDataAdapter
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load

I.S.T.Idat 36 ASP.NET
Aplicaciones Web

'Introducir aqu el cdigo de usuario para inicializar la pgina


Button1.Enabled = False
llena()
End Sub
Sub llena()
ds = New DataSet() Para mostrar la lista de curso
da = New SqlDataAdapter("select * from curso", cn)
da.Fill(ds)
DataGrid1.DataSource = ds
DataGrid1.DataBind()
End Sub

Private Sub BtNuevo_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button2.Click
Dim nf, nro As Integer
Dim cad As String
nf = ds.Tables(0).DefaultView.Count - 1
nro = CInt(Right(ds.Tables(0).Rows(nf).Item(0), 3)) + 1
cad = "C" & Format(nro, "000")
TextBox1.Text = cad
Button1.Enabled = True

End Sub

Private Sub BtnGraba_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button1.Click
Dim cmd As SqlCommand
Dim prm As SqlParameter
Dim sql As String
sql = "insert into curso values(@codc,@nomc,@nhr)"
cn.Open()
cmd = New SqlCommand(sql, cn)
'Primera forma
'prm = cmd.Parameters.Add("@codc", SqlDbType.Char, 4)
'prm.Direction = ParameterDirection.Input
'prm.Value = TextBox1.Text
'prm = cmd.Parameters.Add("@nomc", SqlDbType.VarChar, 35)
'prm.Direction = ParameterDirection.Input
'prm.Value = TextBox2.Text
'prm = cmd.Parameters.Add("@nhr", SqlDbType.Int)
'prm.Direction = ParameterDirection.Input
'prm.Value = TextBox3.Text

'Segunda forma
cmd.Parameters.Add("@codc", TextBox1.Text)
cmd.Parameters.Add("@nomc", TextBox2.Text)
cmd.Parameters.Add("@nhr", CInt(TextBox3.Text))
cmd.ExecuteNonQuery()
cmd.Dispose()
cn.Close()
llena()

I.S.T.Idat 37 ASP.NET
Aplicaciones Web

Button1.Enabled = False
End Sub

Private Sub BTnAnula_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button3.Click
Dim sql As String
Dim prm As SqlParameter
cn.Open()
sql = "delete from curso where idcurso=@cod"
Dim cmd As New SqlCommand(sql, cn)
cmd.Parameters.Add("@codc", TextBox1.Text)
cmd.ExecuteNonQuery()
cmd.Dispose()
cn.Close()
llena()
End Sub
End Class

Aplicacin mantenimiento a una tabla.-


Mantenimento a la tabla alumno empleando Store Procedure
Para insertar o adicionar nuevos alumnos
create Procedure sP_ADIaLU
@COD CHAR(5),@APE VARCHAR(30),@Nom varchar(30), @idesp char(3), @pro as
char(1)
as
insert into alumno values(@cod,@ape,@nom,@idesp,@pro)
return

Para anular
create Procedure SP_DELALU
@COD CHAR(5)
as
delete from alumno where idalumno=@cod
return

I.S.T.Idat 38 ASP.NET
Aplicaciones Web

Autor: A. Moreno
Imports System.Data.OleDb
Imports System.Text
Public Class wegadiciona
Inherits System.Web.UI.Page
Protected WithEvents BtnAnula As System.Web.UI.WebControls.Button
Dim CN As New
OleDbConnection("PROVIDER=SQLOLEDB;UID=SA;DATABASE=UNIVERSIDAD;SERV
ER=(LOCAL)")
+ Cdigo generado por el Diseador de Web Forms "
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
'Introducir aqu el cdigo de usuario para inicializar la pgina
Dim CMD As New OleDbCommand()
If Page.IsPostBack = False Then
CN.Open()
With CMD
.Connection = CN
.CommandType = CommandType.Text
.CommandText = "SELECT * FROM ESPECIALIDAD"
End With
Dim DA As New OleDbDataAdapter(CMD)
Dim DS As New DataSet()

I.S.T.Idat 39 ASP.NET
Aplicaciones Web

DA.Fill(DS)
cbe.DataSource = DS
cbe.DataTextField = "NOMESP"
cbe.DataValueField = "IDESP"
cbe.DataBind()
DA.Dispose()
CMD.Dispose()
CN.Close()
DGD()
End If

End Sub
Public Function DGD()
Dim cmd As New OleDb.OleDbCommand()
CN.Open()
cmd.Connection = CN
cmd.CommandType = CommandType.Text
cmd.CommandText = "select * from alumno"
Dim da As New OleDbDataAdapter(cmd)
Dim ds As New DataSet()
da.Fill(ds)
Me.DataGrid1.DataSource = ds.Tables(0).DefaultView
Me.DataGrid1.DataBind()
cmd.Dispose()
CN.Close()
End Function

Private Sub btnuevo_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles btnuevo.Click
Dim CMD As New OleDbCommand()
CN.Open()
With CMD
.Connection = CN
.CommandType = CommandType.Text
.CommandText = "SELECT ISNULL(MAX(IDALUMNO),'A0000') FROM ALUMNO"
End With
Dim CAD As String = CMD.ExecuteScalar
Dim NRO As Integer
NRO = Val(CAD.Substring(1, 4)) + 1
TextBox1.Text = "A" + Format(NRO, "0000")
CN.Close()

End Sub
Private Sub btngraba_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btngraba.Click
Dim cmd As New OleDbCommand()
Dim prm As OleDbParameter
CN.Open()
With cmd
.Connection = CN
.CommandType = CommandType.StoredProcedure

I.S.T.Idat 40 ASP.NET
Aplicaciones Web

.CommandText = "sp_adialu"
End With
prm = cmd.Parameters.Add("@cod", OleDbType.Char, 5)
prm.Direction = ParameterDirection.Input
prm.Value = TextBox1.Text
prm = cmd.Parameters.Add("@ape", OleDbType.VarChar, 30)
prm.Direction = ParameterDirection.Input
prm.Value = txtape.Text
prm = cmd.Parameters.Add("@nom", OleDbType.VarChar, 30)
prm.Direction = ParameterDirection.Input
prm.Value = txtnom.Text
prm = cmd.Parameters.Add("@idesp", OleDbType.Char, 3)
prm.Direction = ParameterDirection.Input
prm.Value = cbe.SelectedItem.Value
prm = cmd.Parameters.Add("@pro", OleDbType.Char, 1)
prm.Direction = ParameterDirection.Input
prm.Value = rbp.SelectedItem.Value
cmd.ExecuteNonQuery()
cmd.Dispose()
CN.Close()
DGD()
End Sub
Private Sub BtnAnula_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnAnula.Click
Dim sql As String
Dim cmd As New OleDbCommand()
Dim prm As OleDbParameter
CN.Open()
With cmd
.Connection = CN
.CommandType = CommandType.StoredProcedure
.CommandText = "sp_delalu"
End With
prm = cmd.Parameters.Add("@cod", OleDbType.Char, 5)
prm.Direction = ParameterDirection.Input
prm.Value = TextBox1.Text
CN.Open()
cmd.ExecuteNonQuery()
cmd.Dispose()
CN.Close()
DGD() 'Llama al listado
End Sub
End Class

I.S.T.Idat 41 ASP.NET
Aplicaciones Web

Paginacion en un listado Cuando la lista de datos es muy grande es necesario hacer la


paginacin del listado

Imports System.Data
Imports System.Data.SqlClient
Public Class PAGINACION
Inherits System.Web.UI.Page
Protected WithEvents Label1 As System.Web.UI.WebControls.Label
Protected WithEvents DGDPRODUCTO As System.Web.UI.WebControls.DataGrid
+ Cdigo generado por el Diseador de Web Forms "
Public Sub CARGAR_DATO()
Dim CN As New
SqlConnection("UID=SA;PWD=;DATABASE=NORTHWIND;SERVER=.")
Dim DA As New SqlDataAdapter("SELECT Codigo=ProductId,Descripcion
=Productname, Precio=UnitPrice ,Stock=UnitsinStock FROM PRODUCTS", CN)
Dim DS As New DataSet()
DA.Fill(DS)
DGDPRODUCTO.DataSource = DS.Tables(0).DefaultView
DGDPRODUCTO.DataBind()
End Sub
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
If(not Page.ispostBack) then
CARGAR_DATO()
End if
End Sub
Public Sub PAGINAR(ByVal MIOBJETO As Object, ByVal MIEVENTO As
DataGridPageChangedEventArgs)
DGDPRODUCTO.CurrentPageIndex = MIEVENTO.NewPageIndex
CARGAR_DATO()
End Sub

I.S.T.Idat 42 ASP.NET
Aplicaciones Web

End Class

I.S.T.Idat 43 ASP.NET
Aplicaciones Web

Edicin, y Eliminacin de Registros en Lnea

Editar registros significa cambiar el contenido de algunos de los campos o columnas por nueva
informacin o para corregir algn error de captura original o para agregar alguna columna que no
exista por modificacin de la tabla o la base de datos.
En general se tiene otro problema de SQL UPDATE, sin embargo ahora se aprovechan algunos
elementos nuevos del objeto datagrid, como son la capacidad que tiene de crearle columnas de
edicin a los renglones que muestra el dataset, estas columnas de edicin traen sus propios
mtodos, mismos que se pueden cargar con codigo para procesar
Instrucciones empleadas.-
Itemcommand Se produce cuando se hace clic en cualquier botn del control DataGrid.

El controlador de eventos recibe un argumento de tipo DataGridCommandEventArgs que contiene


datos relacionados con el evento. Las siguientes propiedades de

DataGridCommandEventArgs proporcionan informacin especfica para el evento


Propiedad Descripcin
CommandArgument (se hereda de Obtiene el argumento del comando.
CommandEventArgs)
CommandName (se hereda de Obtiene el nombre del comando.
CommandEventArgs)
CommandSource Obtiene el origen del comando.
Item Obtiene el elemento que contiene el origen
del comando en el control DataGrid.

Este evento suele utilizarse para controlar los controles de botones con un valor CommandName
personalizado en el control DataGrid

Utilice en Propiedades del datagrid la coleccin DataKeys para obtener acceso a los valores
clave de cada registro (que se muestra en forma de fila) de un control de lista de datos. Esto
permite almacenar el campo clave con un control de lista de datos, sin mostrarlo en el propio
control. La coleccin se llena automticamente con los valores del campo especificado por la
propiedad DataKeyField.
El campo clave se suele utilizar en un controlador de evento, como por ejemplo ItemCommand o
DeleteCommand, como parte de una cadena de consulta de actualizacin para la revisin de un
registro especfico del origen de datos. El campo clave ayuda a la cadena de consulta de
actualizacin a identificar el registro apropiado que se debe modificar.
Para obtener ms informacin sobre cmo obtener acceso a datos con ASP.NET, vea Acceso a
datos con ASP.NET.

I.S.T.Idat 44 ASP.NET
Aplicaciones Web

DatakeyField
Obtiene o establece el campo clave del origen de datos especificado por la propiedad
DataSource.
Valor de la propiedad
Nombre del campo clave del origen de datos especificado por la propiedad DataSource.
Comentarios
Utilice la propiedad DataKeyField para especificar el campo clave del origen de datos indicado
por la propiedad DataSource. El campo especificado se utiliza para rellenar la coleccin
DataKeys. Esto permite almacenar el campo clave con un control de lista de datos, sin mostrarlo
en el propio control. El campo clave se suele utilizar en un controlador de evento, como por
ejemplo ItemCommand o DeleteCommand, como parte de una cadena de consulta de
actualizacin para la revisin de un registro especfico del origen de datos. El campo clave ayuda
a la cadena de consulta de actualizacin a identificar el registro apropiado que se debe modificar

La propiedad CommandArgument puede contener cualquier cadena establecida por el


programador. La propiedad CommandArgument complementa la propiedad CommandName ya
que permite facilitar informacin adicional para el comando. Por ejemplo, se puede establecer la
propiedad CommandName en Sort y la propiedad CommandArgument en Ascending para
especificar un comando con el fin de organizar en orden ascendente.

Utilice la propiedad CommandName para determinar el comando que se va a ejecutar. La


propiedad CommandName puede contener cualquier cadena establecida por el programador.
Posteriormente, el programador podr identificar el nombre de comando en el cdigo y llevar a
cabo las tareas pertinentes.

La propiedad Item se utiliza para obtener acceso a las propiedades del elemento seleccionado en
el control DataGrid.
Ejemplo
[Visual Basic, C#] En el siguiente ejemplo se muestra cmo recuperar la descripcin y el precio de
un elemento del control DataGrid mediante la propiedad Item.
[Visual Basic]

Sub Grid_CartCommand(sender As Object, e As DataGridCommandEventArgs)

' e.Item Es una fila de la tabla que es seleccionada.


' Para las columnas enlazadas, Los valores almacenados con la propiedad TableCell.
Dim itemCell As TableCell = e.Item.Cells(2)
Dim priceCell As TableCell = e.Item.Cells(3)
Dim item As String = itemCell.Text
Dim price As String = priceCell.Text

I.S.T.Idat 45 ASP.NET
Aplicaciones Web

If CType(e.CommandSource, Button).CommandName = "AddToCart" Then

' Insert code to add an item to the cart.

Else

' Insert code to remove an item from the cart.

End If

ShoppingCart.DataBind()
End Sub 'Grid_CartCommand
Edicin y Modificacin

DataGrid.- con el nombre


Grid
DataKeyField: Cli_codigo,
colocar en las cajas de textos :
Txtncod, Txtnom,
txtdireccion y txtruc

Pasos :
a) En el datagrid hacer Clic derecho: utilizar generador de propiedades:

I.S.T.Idat 46 ASP.NET
Aplicaciones Web

Enlazar en cada columna con los nombres de los campos en forma a priori, estos campos
tienen que ser seleccionados en la instruccin select
Codifiacion:

<%@Import Namespace="System.Data.SqlClient"%>
<%@Import Namespace="System.Data"%>
<%@Import Namespace="Microsoft.VisualBasic"%>
<HTML>
<HEAD>
<SCRIPT language="vb" runat="server">
Dim Cn as SqlConnection
Dim Cmd as SqlCommand
Dim StrSql as String
Sub Page_Load
Cn=New SqlConnection("Server=(Local);Uid=Sa;Database=Bdfactura")
if Not Page.Ispostback then
EnlaceGrid
End if
End Sub

Sub EnlaceGrid
Cmd= new SqlCommand("Select
cli_codigo,Cli_nombre,cli_direccion,Cli_Ruc From Clientes",Cn)
Cn.Open()

I.S.T.Idat 47 ASP.NET
Aplicaciones Web

Grid.datasource=Cmd.executeReader()
Grid.databind()
Cn.close()
End Sub
Sub Grid_Editar(s as Object,e as DatagridCommandEventArgs)
Grid.EditItemIndex=e.Item.ItemIndex
EnlaceGrid
End Sub
Sub Grid_Update(s as Object,e as DatagridCommandEventArgs)
Dim vCod_Cli as String
Dim txtNombre as Textbox
Dim txtDireccion as Textbox
Dim txtRuc as Textbox
Dim vNombre as String
Dim vDireccion as String
Dim vRuc as String

vCod_Cli=Grid.DataKeys(e.Item.ItemIndex)
txtNombre=e.Item.Cells(1).Controls(0)
txtDireccion=e.Item.Cells(2).Controls(0)
txRuc=e.Item.Cells(3).Controls(0)
vNombre=txtNombre.text
vDireccion=txtDireccion.text
vRuc=txtRuc.text

StrSql="Update clientes set


cli_nombre=@Nombre,Cli_direccion=@direccion,Cli_ruc=@Ruc where
Cli_codigo=@codigo"
cmd=new SqlCommand(StrSql,Cn)
cmd.parameters.add("@Nombre",vNombre)
cmd.parameters.add("@direccion",vDireccion)
cmd.parameters.add("@ruc",Cdbl(vRuc))
cmd.Parameters.add("@codigo",vCod_Cli)
Cn.open()
Cmd.executeNonQuery()
Cn.Close()
Cmd.Dispose()
Grid.EditItemIndex=-1
EnlaceGrid
End Sub
Sub Grid_Cancel(s as Object,e as DatagridCommandEventArgs)
Grid.EditItemIndex=-1
EnlaceGrid
End Sub
Sub Grid_Delete(s as Object,e as DatagridCommandEventArgs)
Dim vCodigo as String
vCodigo=Grid.DataKeys(e.item.ItemIndex)

I.S.T.Idat 48 ASP.NET
Aplicaciones Web

cmd=new SqlCommand("Delete From Clientes Where cli_Codigo=@codigo",Cn)


cmd.parameters.add("@codigo",vCodigo)
Cn.open()
Cmd.executeNonQuery()
Cn.close()
Grid.EditItemIndex=-1
EnlaceGrid
End Sub
public Sub MNuevo(sender As Object, e As System.EventArgs)
Cmd=New SqlCommand("Select Count(*) From Clientes",Cn)
Cn.Open()
Dim xValor as Integer
xValor=Cmd.ExecuteScalar()
Cn.Close()
txtCod.text="":txtNom.text="":txtFec.text="":txtdir.text=""
txtCod.text="C"+Right("0000"+ Trim(Str(xValor+1)),4)
End Sub
public Sub MGrabar(sender As Object, e As System.EventArgs)
StrSql="Insert Into Clientes (cli_codigo,cli_nombre,cli_direccion,cli_ruc)
values(@cod_cli,@nom_cli,@direccion,@ruc)"
cmd=New SqlCommand(StrSql,Cn)
cmd.parameters.add("@cod_cli",txtCod.text)
cmd.parameters.add("@nom_cli",txtNom.text)
cmd.parameters.add("@direccion",txtDir.text)
cmd.parameters.add("@ruc",txtFec.text)
cn.open()
cmd.executeNonQuery()
cn.close()
txtCod.text="":txtNom.text="":txtFec.text="":txtdir.text=""
EnlaceGrid
End Sub
</SCRIPT>
</HEAD>
<body>
<FORM id="Form1" method="post" runat="server">
<TABLE border="1" height="154">
<TR>
<TD align="right" width="35">Codigo:</TD>
<TD><asp:textbox id="txtCod" Runat="server">
txtCod</asp:textbox></TD>
</TR>
<TR>
<TD align="right" width="35">Nombre:</TD>
<TD><asp:textbox id="txtNom" Runat="server"
Width="303px">Txtnom</asp:textbox></TD>
</TR>
<TR>

I.S.T.Idat 49 ASP.NET
Aplicaciones Web

<TD align="right" width="35">Direccion:</TD>


<TD><asp:textbox id="txtDir" Runat="server"
Width="285px">Txtdireccion</asp:textbox></TD>
</TR>
<TR>
<TD align="right" width="35">Ruc</TD>
<TD><asp:textbox id="txtFec"
Runat="server"></asp:textbox></TD>
</TR>
<TR>
<TD width="35"></TD>
<TD><asp:button id="BtnNuevo"
onclick="MNuevo" Runat="server" text="Nuevo"></asp:button><asp:button
id="BtnGrabar" onclick="MGrabar" Runat="server"
Text="Grabar"></asp:button></TD>
</TR> Estas lineas agrege para
</TABLE> asignar los eventos
<P>
<asp:datagrid id="Grid" Runat="server" OnEditCommand="Grid_Editar"
OnUpdateCommand="Grid_Update" OnDeleteCommand="Grid_Delete"
OnCancelCommand="Grid_Cancel" DataKeyField="Cli_codigo"

CellPadding="10" HeaderStyle-BackColor="#6666ff" AutoGenerateColumns="False"


Font-Bold="True">
<HeaderStyle ForeColor="Black"
BackColor="WhiteSmoke"></HeaderStyle>
<Columns>
<asp:BoundColumn DataField="cli_Codigo"
ReadOnly="True" HeaderText="CODIGO"></asp:BoundColumn>
<asp:BoundColumn DataField="cli_nombre"
HeaderText="Nombres y Apellidos"></asp:BoundColumn>
<asp:BoundColumn DataField="cli_ruc"
HeaderText="Ruc"></asp:BoundColumn>
<asp:ButtonColumn Text="Eliminar"
HeaderText="Borrar" CommandName="Delete"></asp:ButtonColumn>
<asp:EditCommandColumn
ButtonType="LinkButton" UpdateText="Actualizar" HeaderText="Modificar"
CancelText="Cancelar" EditText="Editar"></asp:EditCommandColumn>
</Columns>
</asp:datagrid></P>
</FORM>
</body>
</HTML>

I.S.T.Idat 50 ASP.NET
Aplicaciones Web

CRYSTAL REPORTS

Crystal Reports se conecta a bases de datos mediante controladores de bases de datos. Cada
controlador se escribe para controlar un tipo de base de datos especfico o la tecnologa de
acceso a bases de datos.

Modelos de extraccin e insercin


Con el fin de ofrecer el acceso a datos ms flexible para los programadores, los controladores de
base de datos de Crystal Reports se han diseado para proporcionar un modelo de extraccin e
insercin de acceso a datos.
Modelo de extraccin

En un modelo de extraccin, el controlador se conectar a la base de datos y


extraer datos cuando se necesiten. Con este modelo, Crystal Reports controla
tanto la conexin a la base de datos como el comando SQL que se ejecuta para
obtener los datos y no necesita ninguna codificacin del programador. Si no se
escribe ningn cdigo especial en tiempo de ejecucin, se utiliza el modelo de
extraccin.
Modelo de insercin

En comparacin, el modelo de insercin necesita que el programador escriba cdigo para


conectarse a la base de datos, ejecutando un comando SQL para crear un conjunto de registros o
de datos que se ajusten a los campos del informe y enviando ese objeto al informe. Este mtodo
le permite crear recursos compartidos de conexin en la aplicacin y filtrar los datos antes de que
Crystal Reports los reciba.

Los controladores de bases de datos se utilizan durante el tiempo de creacin y de


procesamiento.

I.S.T.Idat 51 ASP.NET
Aplicaciones Web

Durante el tiempo de creacin, el controlador de la base de datos se utiliza para identificar el


esquema de los datos. Con los controladores OLEDB, ODBC y Access/Excel, este proceso

implica la conexin a una base de datos y la seleccin de las tablas, vistas o procedimientos
almacenados para especificar el esquema. Con los controladores ADO.NET y de definicin de
campos, este proceso implica la seleccin de un esquema con la forma de un archivo XML (*.xml)
o de un archivo de definicin de datos (*.ttx).

Durante el tiempo de procesamiento, el informe utilizar el mismo controlador de base de datos


utilizado para crear el informe. No obstante, si los datos se insertan en el informe, el informe
seleccionar el controlador adecuado para controlar el conjunto de registros o el conjunto de
datos.

Controladores de bases de datos con Crystal Reports para Visual Studio


.NET

Controlador de Base de datos a las que se Mtodo de acceso a datos


base de datos tiene acceso
OLEDB Cualquier base de datos que Admite tanto la extraccin de
tenga un proveedor OLEDB. datos de la base de datos como
la insercin de datos en el
informe de un conjunto de
registros ADO.
ODBC Cualquier base de datos que Admite tanto la extraccin de
tenga un proveedor ODBC. datos de la base de datos como
la insercin de datos en el
informe de un conjunto de
registros RDO.
Access/Excel Bases de datos de Microsoft Admite tanto la extraccin de
Access y libros de Microsoft datos de la base de datos como
Excel. la insercin de datos en el
informe de un conjunto de
registros DAO.
ADO.NET Cualquier base de datos con Admite la insercin de datos en
un proveedor gestionado. el informe desde un conjunto
de datos ADO.NET.

Este controlador no extraer


datos por s mismo.
Definicin de Ninguna. El controlador se incluye
campo principalmente para la
Este controlador especial se compatibilidad con versiones
utiliza para crear informes anteriores y slo se utiliza
basados nicamente en un durante el proceso de creacin

I.S.T.Idat 52 ASP.NET
Aplicaciones Web

de informes.
esquema sin datos reales.
En tiempo de ejecucin, debe
enviarse un conjunto de
registros o un conjunto de
datos a un informe creado con
el controlador.
Objeto de datos Ninguna. Este controlador se incluye
Crystal (CDO) principalmente para la
Este controlador especial compatibilidad con versiones
obtiene acceso a datos que anteriores.
no residen en una base de
datos tradicional. Este controlador slo admite la
insercin de datos en un
informe desde un conjunto de
registros CDO; no extraer
datos por s mismo. Utilice la
biblioteca de objetos de datos
Crystal para llenar un conjunto
de registros CDO.

Nota Este
controlador no
est disponible
durante el perodo
de creacin del
informe.
Seleccione uno
de los
controladores
disponibles para
crearlo.

Crear un reporte

Independientemente de cmo se har la presentacin, el reporte se define en un archivo ".RPT",


que forma parte de su proyecto. Ese archivo especifica el modo en que se har la presentacin
del reporte, pero no incluye los datos propiamente dichos. Los datos se definirn en el tiempo de
ejecucin.

Crystal Reports se basa en un concepto muy comn de la definicin de reportes: los reportes se
componen de "secciones", y cada seccin es un espacio horizontal en la pgina. Existen diversos
tipos de secciones, por ejemplo:

I.S.T.Idat 53 ASP.NET
Aplicaciones Web

Encabezado del reporte, aparece en la primera pgina.


Encabezado de pgina, aparece en la parte superior de todas las pginas.
Detalle: lo ms importante. En el tiempo de ejecucin, se genera una de estas secciones
para cada lnea (registro) en la base de datos.
Pie de pgina, aparece en la parte inferior de todas las pginas.
Pie de reporte, aparece al final del reporte.

En un principio, todos los reportes presentan estas cinco secciones. Otras secciones son
opcionales, como por ejemplo:

Encabezado de grupo, aparece antes de un grupo.


Pie de grupo, aparece al final del grupo.

Se podr omitir una o ms secciones, en caso de que no sean necesarias.

Acceder a la base de datos

Antes de crear el reporte, hay que decidir cul ser el mecanismo utilizado para acceder a la base
de datos. Crystal Reports puede obtener datos de una infinidad de fuentes, pero una buena
cantidad de ellas, como DAO, ADO y OLE/DB, no est "administrada", o sea, es cdigo.NET
"puro". En una aplicacin.NET, probablemente sea deseable realizar el acceso a travs de
ADO.NET. Para ello, lo ms fcil es definir un Conjunto de datos tipificado, aun antes de crear el
reporte.

Un Reporte Sencillo en ASP Net

Creamos una Aplicacin Web ASP .Net Nueva, para el ejemplo WebAPLIR1

I.S.T.Idat 54 ASP.NET
Aplicaciones Web

Agregamos un nuevo elemento, y seleccionamos Crystal Report, para el ejemplo


RepProductos.rpt

I.S.T.Idat 55 ASP.NET
Aplicaciones Web

en la ventana del Asistente del Registro del Producto, presionamos despus, luego nos muestra la
siguiente ventana:

Asistente de Informes
Estandar

En la ventana de Asistente de informe estndar, nos ubicamos en OLE DB (ADO) y


seleccionamos un proveedor adecuado, en este caso: Microsoft OLE DB Provider for SQL Server

I.S.T.Idat 56 ASP.NET
Aplicaciones Web

Presionamos siguiente y debemos configurar la siguiente ventana

Y presionamos Finalizar.

I.S.T.Idat 57 ASP.NET
Aplicaciones Web

Luego Expandimos OLE DB (ADO) hasta ubicar la tabla que utilizaremos para el reporte, para el
ejemplo la tabla Products y presionamos Insertar Tabla

Presionamos siguiente y ahora debemos configurar los campos que deseamos mostrar
en el informe

I.S.T.Idat 58 ASP.NET
Aplicaciones Web

Y para este ejemplo presionamos Finalizar, el cual nos mostrara el diseo del informe creado por
el asistente de Crystal Report

I.S.T.Idat 59 ASP.NET
Aplicaciones Web

Luego en el formulario Web agregamos el Control Web: CrystalReportViewer, y le damos en su


propiedad ID el nombre CrVProductos

Finalmente ingresamos al cdigo del programa y digitamos lo siguiente:

Private Sub Page_Load(ByVal sender As System.Object, _


ByVal e As System.EventArgs) Handles MyBase.Load
With CrVProductos
'Establecemos como su origen al reporte creado anteriormente
.ReportSource = Server.MapPath("RepProductos.rpt")
.DataBind()
End With
End Sub

Quedando el informe como la ventana siguiente:

I.S.T.Idat 60 ASP.NET
Aplicaciones Web

Ahora para poder darle un poco mas de dinamismo al Reporte, vamos a filtrar segn una
categora, para esto debemos agregar un control DropDownList y lo colocaremos antes del
CrystalReportViewer y le daremos el nombre (ID) ddlcategorias y en su propiedad AutoPostBack
lo establecemos en True, quedando la pantalla en modo de diseo de la siguiente manera:

Control Propiedad Valor


DropdownList ID ddlcategorias
AutoPostBack True

CrystalReportViewer ID CrVProductos
DisplayGroupTree False

I.S.T.Idat 61 ASP.NET
Aplicaciones Web

Finalmente el cdigo para que funcione el filtro de productos por categora seria:

Imports System.Data.Sqlclient
Public Class WebForm1

Private Sub Page_Load(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles MyBase.Load
If Not Page.IsPostBack Then
CrVProductos.Visible = False
Cargar_Categorias()
EnlaceReporte()
End If
End Sub

Private Sub EnlaceReporte()


With CrVProductos
.ReportSource = Server.MapPath("RepProductos.rpt")
.DataBind()
End With
End Sub
Private Sub Cargar_Categorias()
Dim odst As New DataSet()
Dim ocn As New
SqlConnection("uid=sa;server=(local);database=northwind")
Dim odap As New SqlDataAdapter("select * from categories", ocn)
odap.Fill(odst)
With ddlcategorias
.DataTextField = "categoryname"
.DataValueField = "categoryid"
.DataSource = odst
.DataBind()
End With
End Sub

Private Sub ddlcategorias_SelectedIndexChanged(ByVal sender As


System.Object, ByVal e As System.EventArgs) Handles
ddlcategorias.SelectedIndexChanged
'Capturamos el valor del codigo de la categoria
Dim id As Integer = CInt(ddlcategorias.SelectedItem.Value)
Dim StrFormula As String
CrVProductos.Visible = True
'Filtramos los registros por el campo Codigo de Categora, respetando la
sintaxis
'de Cristal Report {Tabla.Campo}=Valor
StrFormula = "{Products.categoryid}=" & id
'Asignando nuestra formula
CrVProductos.SelectionFormula = StrFormula

I.S.T.Idat 62 ASP.NET
Aplicaciones Web

'Volviendo a enlazar el origen de datos del reporte


EnlaceReporte()
End Sub
End Class

Finalmente el Reporte en ejecucin al seleccionar una Categora quedaria:

Web service
Los servicios Web XML se componen de dos partes: el punto de entrada al servicio Web XML y el
cdigo que implementa la funcionalidad del servicio Web XML. En ASP.NET, el archivo .asmx es
un archivo de texto que sirve de punto de entrada direccionable del servicio Web XML. Hace
referencia al cdigo de ensamblados precompilados, a un archivo de cdigo subyacente o a un
cdigo contenido en el propio archivo .asmx.
Nota Si el cdigo est contenido directamente en el archivo .asmx, ASP.NET lo compilar bajo
peticin en el servidor.
La directiva de procesamiento WebService situada en la parte superior del archivo .asmx
determina dnde se buscar la implementacin del servicio Web XML. De forma predeterminada,
Visual Studio utiliza archivos de cdigo en segundo plano, como Service1.asmx.vb o
Service1.asmx.cs, cuando se crea un servicio Web XML con la plantilla de proyecto de servicio
Web ASP.NET.

I.S.T.Idat 63 ASP.NET
Aplicaciones Web

El atributo WebMethod se asocia a un mtodo Public para indicar que se desea exponer dicho
mtodo como parte del servicio Web XML. Tambin se pueden utilizar las propiedades de este
atributo para configurar an ms el comportamiento del mtodo de servicio Web XML.

Clase System.Web.Services.WebService
La clase System.Web.Services.WebService, que define la clase base opcional de los servicios
Web XML, proporciona acceso directo a los objetos ASP.NET comunes, como los destinados a
estados de aplicacin y de sesin. De forma predeterminada, los servicios Web XML creados en
cdigo administrado con Visual Studio se heredan de esta clase. El servicio Web XML se puede
heredar de esta clase para obtener acceso a objetos intrnsecos de ASP.NET, como Request y
Session.

I.S.T.Idat 64 ASP.NET
Aplicaciones Web

Aplicacin .- Empleando la BDD universidad, realizar la siguiente consulta.-

Controles:
RequiredFieldValidator
Convierte el control de
entrada asociado en un
campo obligatorio.
Propiedades
Controltovalidate:
Textbox1 (enlzar con el
campo textbox1 del
codigo)
ErrorMessage:
Campo Obligatorio
ValidationSummary
Muestra un resumen de
todos los errores de
validacin en lnea en una
pgina Web, en un cuadro
de mensaje o en ambos.

Resultado Final:

Pasos para crear la aplicacin

Paso 1.- Elaborar los store procedure:

a)Para buscar el nombre del alumno y su especialidad a la que pertenece

I.S.T.Idat 65 ASP.NET
Aplicaciones Web

Create procedure sp_datos


@cod as char(5)
as
select Nombre=Apealumno+', '+Nomalumno, Nomesp
from alumno a inner join especialidad e
on e.idesp=a.idesp where idalumno=@cod

b) para ver sus notas

Create procedure sp_nota


@cod char(5)
as
select c.Idcurso,Nomcurso,Exaparcial,exaFinal ,
promedio=str((exaparcial+2*exafinal )/3,4,1)
from notas n inner join curso c on c.idcurso=n.idcurso
where idalumno=@cod

paso 2.- Elegir nuevo proyecto : (sevivio web Asp)

I.S.T.Idat 66 ASP.NET
Aplicaciones Web

Paso 3.- Codificar los metodos.


Autor Alberto Moreno
Imports System.Web.Services
Imports System.Data.OleDb
<WebService(Namespace := "http://tempuri.org/")> _
Public Class Service2
Inherits System.Web.Services.WebService
Dim Cn As New
OleDbConnection("Provider=SqlOledb;Uid=sa;Database=Universidad;Server=(loc
al)")
Dim Cmd As New OleDbCommand()
Dim Pm As OleDbParameter
+ Cdigo generado por el Diseador de servicios Web "

' EJEMPLO DE SERVICIO WEB


' El servicio de ejemplo HelloWorld() devuelve la cadena Hello World.
' Para generar, quite los comentarios de las siguientes lneas y, a continuacin,
guarde y genere el proyecto.
' Para probar este servicio Web, compruebe que la pgina de inicio es el
archivo .asmx
' y pulse F5.
'
'<WebMethod()> Public Function HelloWorld() As String
' HelloWorld = "Hello World"
' End Function

<WebMethod()> Public Function verNotas(ByVal cod As String) As DataSet


Cn.Open()
With Cmd
.Connection = Cn
.CommandType = CommandType.StoredProcedure
.CommandText = "sp_nota"
End With
Pm = Cmd.Parameters.Add("@cod", OleDbType.Char, 5)
Pm.Direction = ParameterDirection.Input
Pm.Value = cod
Dim da As New OleDbDataAdapter(Cmd)
Dim ds As New DataSet()
da.Fill(ds)
Return ds
da.Dispose()
Cmd.Dispose()
Cn.Dispose()

End Function

I.S.T.Idat 67 ASP.NET
Aplicaciones Web

<WebMethod()> Public Function promedio(ByVal ds As DataSet, ByVal ncol As


Byte) As Single
Dim sm, pro As Single
Dim can, f As Integer
sm = 0
can = ds.Tables(0).DefaultView.Count
For f = 0 To ds.Tables(0).DefaultView.Count - 1
sm += ds.Tables(0).Rows(f).Item(ncol)
Next
If can > 0 Then
pro = Math.Round(sm / can, 1)
Else
pro = 0
End If
Return (pro)
End Function
<WebMethod()> Public Function Datos(ByVal cod As String) As DataSet
Cn.Open()
With Cmd
.Connection = Cn
.CommandType = CommandType.StoredProcedure
.CommandText = "sp_datos"
End With
Pm = Cmd.Parameters.Add("@cod", OleDbType.Char, 5)
Pm.Direction = ParameterDirection.Input
Pm.Value = cod
Dim da As New OleDbDataAdapter(Cmd)
Dim ds As New DataSet()
da.Fill(ds)
Return ds
da.Dispose() dispose Libera los recursos utilizados por Component.
Cmd.Dispose()
Cn.Dispose()
End Function
<WebMethod()> Public Function veresp() As DataSet
cn.Open()
With cmd
.Connection = cn
.CommandType = CommandType.StoredProcedure
.CommandText = "sp_especialidad"
End With
Dim da As New OleDbDataAdapter(cmd)
Dim ds As New DataSet()
da.Fill(ds)
Return ds
da.Dispose()
cmd.Dispose()

I.S.T.Idat 68 ASP.NET
Aplicaciones Web

cn.Dispose()
End Function

End Class

Paso 4.- Generar el Webser_notas o tambien pulsando F5

Paso 5.- del menu Archivo Agregar proyecto Nuevo proyecto


El explorador de Windows agregando y cambiando al proyecto web_asp

Hacer Clic derecho en References


Agregar Referencia Web
Y copiar la direccin anterior:
Como se muestra en la siguiente figura.

Paso 6.- Agregar los formularios de trabajo ,


por ejemplo WebForm1 es el diseo de la
boleta de nota donde se hace referencia al
Web_service ,
Webalumnos.- Para el mantenimiento de la
tabla alumnos.

I.S.T.Idat 69 ASP.NET
Aplicaciones Web

La codificacin en el formulario 1 Webform1

Public Class WebForm1


Inherits System.Web.UI.Page
Protected WithEvents Label1 As System.Web.UI.WebControls.Label
Protected WithEvents Label2 As System.Web.UI.WebControls.Label
Protected WithEvents TextBox1 As
System.Web.UI.WebControls.TextBox
Protected WithEvents Label3 As System.Web.UI.WebControls.Label
Protected WithEvents Label5 As System.Web.UI.WebControls.Label
Protected WithEvents Label7 As System.Web.UI.WebControls.Label
Protected WithEvents btnok As System.Web.UI.WebControls.Button
Protected WithEvents lbmen As System.Web.UI.WebControls.Label
Protected WithEvents lbnom As System.Web.UI.WebControls.Label
Protected WithEvents lbesp As System.Web.UI.WebControls.Label
Protected WithEvents DgNota As
System.Web.UI.WebControls.DataGrid
Protected WithEvents ValidationSummary1 As
System.Web.UI.WebControls.ValidationSummary
Protected WithEvents RequiredFieldValidator1 As
System.Web.UI.WebControls.RequiredFieldValidator
Protected WithEvents HyperLink1 As
System.Web.UI.WebControls.HyperLink
Protected WithEvents lbpro As System.Web.UI.WebControls.Label

+ Cdigo generado por el Diseador de Web Forms

Dim servicio As New localhost.Service2()


Private Sub Page_Load(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles MyBase.Load
'Introducir aqu el cdigo de usuario para inicializar la
pgina
End Sub

Private Sub btnok_Click(ByVal sender As System.Object, ByVal e


As System.EventArgs) Handles btnok.Click
Dim ds As New DataSet()
Dim ds2 As New DataSet()
Dim fila As DataRow
Dim canr As Integer
Dim cod As String
Dim pro As Single
cod = TextBox1.Text
ds = servicio.Datos(cod)
canr = ds.Tables(0).DefaultView.Count
ds2 = servicio.verNotas(cod)
DgNota.DataSource = ds2
DgNota.DataBind()
If canr = 0 Then
lbnom.Text = ""
lbesp.Text = ""
lbmen.Text = "codigo no existe "

I.S.T.Idat 70 ASP.NET
Aplicaciones Web

lbpro.Text = ""
Exit Sub
End If
lbmen.Text = ""
lbnom.Text = ds.Tables(0).Rows(0).Item(0)
lbesp.Text = ds.Tables(0).Rows(0).Item(1)
pro = servicio.promedio(ds2, 4)
lbpro.Text = pro.ToString
If pro > 10.5 Then
lbpro.ForeColor = System.Drawing.Color.Blue
Else
lbpro.ForeColor = System.Drawing.Color.Red
End If
End Sub
End Class

Aplicacin 2.- seleccionando en un combo DropDwonList1 una especialidad llenado desde un


servicio , que muestre todos los alumnos de es aespecialidad.

DropDownList1.-
En propiedades
establecer
AutopostBack =True
true si se produce
una devolucin de
exposicin
automtica cundo el
usuario cambia la
seleccin de la lista;
de lo contrario,
false.
Dgalumno (Dtagrid)
Lbnro la Etiqueta

Codificacin

Imports System.Data.OleDb

Public Class webalumnos


Inherits System.Web.UI.Page
Protected WithEvents DropDownList1 As System.Web.UI.WebControls.DropDownList
Protected WithEvents Label1 As System.Web.UI.WebControls.Label
Protected WithEvents DgAlumno As System.Web.UI.WebControls.DataGrid

I.S.T.Idat 71 ASP.NET
Aplicaciones Web

Protected WithEvents Label4 As System.Web.UI.WebControls.Label


Protected WithEvents Lbnro As System.Web.UI.WebControls.Label
Protected WithEvents HyperLink1 As System.Web.UI.WebControls.HyperLink
Protected WithEvents Label2 As System.Web.UI.WebControls.Label

+" Cdigo generado por el Diseador de Web Forms "


Dim cn As New OleDbConnection("provider=sqloledb; uid=sa;database=universidad;
server=(local)")

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles MyBase.Load
If Not IsPostBack Then Si la pagina no ha sido cargada
listar1()
End If
End Sub

Sub listar1()
Dim servicio As New localhost.Service2()
Dim ds As New DataSet()
ds = servicio.veresp
DropDownList1.DataSource = ds
DropDownList1.DataTextField = "nomesp"
DropDownList1.DataValueField = "idesp"
DropDownList1.DataBind()
End Sub
Sub listar2()
Dim code As String
code = DropDownList1.SelectedItem.Value
Dim Sql As String = "select Idalumno, Nombre=apealumno+', '+nomalumno,proce
from alumno where idesp='" + code + "'"
Dim cmd As New OleDbCommand(Sql, cn)
cmd.Connection.Open()
Dim oreader As OleDbDataReader = cmd.ExecuteReader
DgAlumno.DataSource = oreader
DgAlumno.DataBind()
Lbnro.Text = DgAlumno.Items.Count
cmd.Dispose()
End Sub
Private Sub DropDownList1_SelectedIndexChanged(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles DropDownList1.SelectedIndexChanged
listar2()
End Sub

End Class

I.S.T.Idat 72 ASP.NET
Aplicaciones Web

Aplicacion2.-

Servicios Web Northwind (Tabla Products - Categories)

Creamos un Proyecto de Tipo Visual Basic con la plantilla Servicio Web ASP
.NET y le damos el nombre de WSNorthwind

En el Explorador de Soluciones, seleccionamos el archivo Service1.asmx y lo renombramos a:


Northwind.asmx

Luego debemos ingresar al cdigo de este archivo y en la primera lnea debemos agregar la
clsica cadena que nos permita utilizar al proveedor de datos Sqlclient.

Imports System.Data.SqlClient
Imports System.Web.Services

No olvidar cambiar el nombre de la clase Service1 por Servicio_Northwind

<WebService(Namespace := "http://tempuri.org/")> _
Public Class Servicio_Northwind
Inherits System.Web.Services.WebService

Luego debemos escribir el cdigo que nos permita crear funciones y que nos
devolvera los registros necesarios.

I.S.T.Idat 73 ASP.NET
Aplicaciones Web

Dim oCn As New SqlConnection(Conexion)


Dim odst As DataSet = Nothing

Private Function Conexion() As String


Conexion = "uid=sa;server=(local);database=northwind"
End Function

<WebMethod(Description:="Listado de Productos")> _
Public Function Listar_Productos() As DataSet

Creamos un Obj. DataAdapter que liste todos los productos


Dim odap As New SqlDataAdapter( _
"select productid,productname,unitprice,categoryid " & _
" from products order by productname", ocn)

odst = New DataSet()

Llenamos el Obj. Dataset, con el resultado de las filas del DataAdapter


odap.Fill(odst)

Devolvemos el Obj. Dataset


Return odst
End Function

<WebMethod(Description:="Listado de Productos por Categoria")> _


Public Function Listar_Prod_x_Categoria(ByVal codcat As Integer) As DataSet

Creamos un Obj. DataAdapter que liste todos los productos que pertenezcan al
codigo de categoria enviado como parmetro
Dim odap As New SqlDataAdapter( _
"select productid,productname,unitprice,categoryid " & _
" from products where categoryid=@codigo order by productname", ocn)

Creando el parmetro que utiliza la consulta SELECT del Obj. DataAdapter


odap.SelectCommand.Parameters.Add("@codigo", SqlDbType.Int).Value =
codcat

odst = New DataSet()

Llenamos el Obj. Dataset, con el resultado de las filas del DataAdapter


odap.Fill(odst)
Return odst
End Function

I.S.T.Idat 74 ASP.NET
Aplicaciones Web

<WebMethod(Description:="Listado de Categorias")> _
Public Function Listar_Categorias() As DataSet
Creando un Obj. SQlCommand que va a utilizar un Procedimiento Almacenado
Dim ocmd As New SqlCommand("usp_lst_categorias", ocn)
ocmd.CommandType = CommandType.StoredProcedure
ocn.Open()

Dim odap As New SqlDataAdapter(ocmd)


odst = New DataSet()

odap.Fill(odst, "categorias")
ocn.Close()
Return odst
End Function

Luego para probar si el servicio web esta funcionando debemos seleccionar el


servicio en el explorador de soluciones (WSNorthwind.asmx) y clic derecho
Generar y examinar.

En donde podemos probar individualmente cada funcin el cual nos devuelve de


acuerdo a los valores enviados un archivo en formato XML

Luego al final debemos ejecutar la aplicacin (F5), el cual nos muestra la misma
pantalla anterior solo que lo muestra en una pagina web:

I.S.T.Idat 75 ASP.NET
Aplicaciones Web

Lo importante aqu es la direccin URL, desde donde carga este servicio web,
que para el ejemplo es:

http://localhost/WSNorthwind/Northwind.asmx

Finalmente debemos probar este servicio desde un cliente, el cual puede ser una
Aplicacin Windows o una Aplicacin Web

Aplicacin Web

Creamos un nuevo Proyecto de Visual Basic de tipo de plantilla Aplicacin Web


ASP NET y le damos el nombre de: ClienteASPNet_WSNorthwind

Luego al formulario web le damos el nombre de WebCliente.aspx y su diseo


ser parecido a:

I.S.T.Idat 76 ASP.NET
Aplicaciones Web

Luego sobre el explorador de soluciones, ubicamos la carpeta REFERENCES y


hacemos clic derecho y seleccionamos la opcin Agregar Referencia Web , en
el cual ingresaremos la cadena URL del Servicio Web Anterior (WSNorthwind) en
el texto de Direccin, y presionamos el botn que tiene el smbolo de la flecha
(color verde), si encuentra el servicio este aparecer en la columna de la
izquierda todos los mtodos web declarados, para lo cual lo nico que
necesitaremos es presionar el botn Agregar referencia

I.S.T.Idat 77 ASP.NET
Aplicaciones Web

Ahora solo quedara ingresar el cdigo respectivo, no olvidar verificar las


siguientes propiedades:

Control Propiedad Valor


DropDownListBox1 ID ddlcategorias
AutoPostBack True

Label1 Text Categories

Label2 ID lblcat

Datagrid1 ID dgdproductos

No olvidar darle un formato al Datagrid, para lo cual puede utilizar el formato Automtico (clic
derecho sobre el datagrid), as como tambin establecer una paginacin adecuada (clic derecho
sobre el datagrid y escoger Generador de Propiedades y ubicarse en la ficha Paginacin), para el
ejemplo se ha escogido Permitir paginacin, Tamao de Pagina: 5, en Posicin: Superior e
Inferior, en Modo: nmeros de Pagina

Codigo del formulario Web

I.S.T.Idat 78 ASP.NET
Aplicaciones Web

Dim obj As New localhost.Servicio_Northwind()


Dim odst As New DataSet()
Dim xcat As Int16

Private Sub dgdproductos_PageIndexChanged(ByVal source As Object, _


ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) _
Handles dgdproductos.PageIndexChanged
dgdproductos.CurrentPageIndex = e.NewPageIndex
Cargar_Productos(xcat)
End Sub

Private Sub Page_Load(ByVal sender As System.Object, _


ByVal e As System.EventArgs) Handles MyBase.Load
'Introducir aqu el cdigo de usuario para inicializar la pgina
'Si la pagina se esta cargando por primera vez el codigo categora es cero
If Not Page.IsPostBack Then
Call Cargar_Categorias()
xcat = 0
Else
'SI NO se recupera el codigo desde una variable de session
xcat = CInt(Session("codcat"))
End If

'Establecemos la primera pagina como activa del datagrid


dgdproductos.CurrentPageIndex = 0
lblcat.Text = xcat

'llamamos al procedimiento que nos mostrara los productos de acuerdo a la


categora seleccionada
Call Cargar_Productos(xcat)
End Sub

Sub Cargar_Categorias()
'Obteniendo el listado de categoras a travs del servicio web
odst = obj.Listar_Categorias

'Estableciendo las propiedades para el dropdownlist de las categorias


With ddlcategorias
.DataSource = odst.Tables(0).DefaultView
.DataTextField = "categoryname"
.DataValueField = "categoryid"
.DataBind()
End With
End Sub

I.S.T.Idat 79 ASP.NET
Aplicaciones Web

Sub Cargar_Productos(ByVal cat As Integer = 0)


'si no se ha seleccionado ninguna categora que liste todos los productos
If cat = 0 Then
odst = obj.Listar_Productos
Else
'SI NO Listar solo los que pertenezcan a la categora seleccionada
odst = obj.Listar_Prod_x_Categoria(xcat)
End If

'Enlazar el dataset con el Datagrid


dgdproductos.DataSource = odst.Tables(0).DefaultView
dgdproductos.DataBind()
End Sub

Private Sub ddlcategorias_SelectedIndexChanged(ByVal sender As


System.Object, ByVal e As System.EventArgs) Handles
ddlcategorias.SelectedIndexChanged
'Obteniendo el codigo de categora del objeto ddlcategorias
xcat = CInt(ddlcategorias.SelectedItem.Value)
lblcat.Text = xcat.ToString

'Almacenando el codigo de categora en la variable de session


Session("codcat") = xcat
Cargar_Productos(xcat)
End Sub

I.S.T.Idat 80 ASP.NET
Aplicaciones Web

Script Utilizado

Create Proc usp_lst_categorias


As
Select * From categories Order By categoryname
Go

Exec usp_lst_categorias
Go

ALGUNOS TRUCOS EN ASP .NET

Esta nota se centrar en responder algunas de las preguntas ms frecuentes que surgen al
momento de comenzar a trabajar con ASP .NET.

I.S.T.Idat 81 ASP.NET
Aplicaciones Web

No se harn grandes explicaciones tcnicas, sino ms bien, mostraremos cdigo para resolver
algunos de los problemas ms comunes con los que nos encontramos al momento de escribir una
aplicacin, por ejemplo, cmo enviar un mensaje, cmo subir un archivo, cmo escribir en el Visor
de Eventos o cmo escribir un contador de Performance.

As que vamos directamente a los temas:

Cmo enviar correo electrnico por medio de ASP .NET?

En el namespace System.Web.Mail encontramos la clase necesaria para el envo de mail.

Esta clase usa el objeto CDOSYS que viene en Windows 2000, en reemplazo del antiguo
CDONTS que venia con WinNT 4.

En el siguiente ejemplo, en el evento Load de una pgina ASP.NET realizamos en envo del
correo:

' Importamos el namespace


Imports System.Web.Mail

Public Class EnviarMail


Inherits System.Web.UI.Page
Protected WithEvents Label1 As System.Web.UI.WebControls.Label

Private Sub Page_Load(ByVal sender As System.Object, _


ByVal e As System.EventArgs) Handles MyBase.Load

En la siguiente lnea creamos el objeto mensaje:

Dim Mensaje As New MailMessage()

Adems, como tambin interesa enviar un archivo adjunto al mensaje, creamos un "attach". En
esta clase el constructor tiene dos posibilidades, una de ellas como en el ejemplo, es simplemente
agregar el nombre del archivo, la otra opcin es incluir tambin el modo de encoding
seleccionando el tipo con el numerador System.Web.Mail.MailEncoding.

Dim oAttach As New Mail.MailAttachment(Server.MapPath("Archivo.zip"))

Se agrega a continuacin a quien va dirigido el mensaje, el origen, el tema:

Mensaje.To = "juanperez@dominio.com"
Mensaje.From = "msdnlatam@midominio.com"
Mensaje.Subject = "Mensaje de Prueba"

En la lnea a continuacin se define el tipo del formato del cuerpo del mensaje, HTML o texto.

Mensaje.BodyFormat = MailFormat.Html
Mensaje.Body = "<html><body><h1>Este es un mensaje de prueba</h1>" _
& "</body></html>"

I.S.T.Idat 82 ASP.NET
Aplicaciones Web

Se agrega el archivo adjunto a la lista de Attachments:

Mensaje.Attachments.Add(oAttach)

Y se enva el mensaje.

SmtpMail.Send(Mensaje)
Mensaje = Nothing
oAttach = Nothing
End Sub
End Class

Cmo subir un archivo con ASP.NET?

En el namespace System.Web.UI.HtmlControls tenemos el control HtmlInputFile que cumple


con las funcionalidades necesarias para poder subir un archivo ya sea de texto o binario.

Este control trabaja con el tipo de codificacin multipart/form-data, veamos el ejemplo:

La primera parte se compone de la pgina HTMl que se le presenta al usuario para que pueda
seleccionar el archivo a subir.

Se define el formulario con el atributo "enctype" correspondiente:

<form id="Form1" method="post" enctype="multipart/form-data" runat="server">

Colocamos la etiqueta HTML que permita seleccionar el archivo:

<INPUT id="File1" type="file" name="File1" runat="server" >


<DIV>Seleccione el Archivo a Enviar:</DIV>
<asp:Label id="Mensaje" runat="server" ></asp:Label>

Y por ltimo el botn para confirmar el envo:

<asp:Button id="cmdEnviar" runat="server" Text="Enviar"></asp:Button>


</form>

Esta segunda parte comprende el cdigo necesario para poder grabar el archivo enviado en el
directorio correspondiente.

'Importamos System.IO
Imports System.IO

Public Class Upload


Inherits System.Web.UI.Page
Protected WithEvents Mensaje As System.Web.UI.WebControls.Label
Protected WithEvents cmdEnviar As System.Web.UI.WebControls.Button
Protected WithEvents File1 As System.Web.UI.HtmlControls.HtmlInputFile

I.S.T.Idat 83 ASP.NET
Aplicaciones Web

Definimos el directorio destino del archivo de la siguiente manera, en el control File1, hay un
objeto de la clase HTTPPostedFile que entre algunas de las propiedades que tiene es la del
nombre del archivo:

Private Sub cmdEnviar_Click(ByVal sender As System.Object, ByVal e As _


System.EventArgs) Handles cmdEnviar.Click
Dim Destino As String = "E:\Inetpub\wwwroot\Upload\" & _
Path.GetFileName(File1.PostedFile.FileName)

Como paso siguiente, con un simple paso, se graba el archivo en el destino definido. Es
importante recordar de que el usuario que se este impersonando en ASP.NET (ya sea annimo u
otro) tenga permiso para poder escribir en el directorio destino.

File1.PostedFile.SaveAs(Destino)

En el paso final, se coloca en una etiqueta la cantidad de bytes que contiene el archivo enviado.

Mensaje.Text = "Su archivo ha sido cargado en : <b>" & Destino & _


"</b><br>Tamao: " & File1.PostedFile.ContentLength() & " bytes."
End Sub

Cmo escribir en el Visor de Eventos?

Una de la problemtica ms comn, es la forma de como grabar informacin, ya sea de errores o


descripciones de eventos, etc. En Windows se cuenta con una herramienta, el Visor de Eventos,
que tiene varias caractersticas tiles como ser la posibilidad de hacer filtros por diferentes
condiciones o exportar esa informacin para ser tratada por otra herramienta.

Pero en general no se lo utiliza en los sistemas porque se mezcla con toda la informacin que
genera el propio sistema operativo, entonces muchas veces resulta confuso poder encontrar la
informacin que nos interesa.

En este ejemplo veremos de qu forma podemos crear una nueva seccin en el Visor de Eventos
y de que manera escribimos las diferentes entradas en ese log.

Como primer paso, se verifica que si existe la seccin en el Visor de Eventos, en caso contrario es
creada:

'Creo la entrada si no existe


If Not System.Diagnostics.EventLog.SourceExists("MiFuente","NombreMaquina) Then
System.Diagnostics.EventLog.CreateEventSource("MiFuente", "NombreDelLog",
"NombreMaquina")
End If

I.S.T.Idat 84 ASP.NET
Aplicaciones Web

Importante: de acuerdo a la configuracin de seguridad definida en la aplicacin ASP.NET es


probable que un usuario annimo o no tenga los permisos necesarios y no pueda ejecutar el
cdigo necesario para crear la seccin en el Visor de Eventos o escribir en l. Es conveniente
para crear la seccin impersonar un usuario que si tenga esos permisos.

En este punto declaramos el objeto "log", definimos en que seccin escribimos:

Dim Log As New System.Diagnostics.EventLog()


Log.Source = NombreLog

Y por ltimo escribimos los mensajes correspondientes, ya sean del tipo de error o del tipo de
informacin.

Log.WriteEntry("Este es un mensaje de Error", _


System.Diagnostics.EventLogEntryType.Error)
Log.WriteEntry("Este es un mensaje de Aviso", _
System.Diagnostics.EventLogEntryType.Information)

En mtodo WriteEntry permite diferentes alternativas, en este ejemplo hemos utilizado una de las
mas simples, pero se pueden ingresar otros parmetros como: categora, Id del evento, etc.

Para finalizar con este punto, tambin se puede decir que hay un mtodo
Log.Delete(NombreDeLog) que permite tambin borrar completamente una seccin en el Visor
de Eventos.

Cmo crear un contador de Performance?

Una opcin muy interesante es la de poder crear contadores para el Monitor de Performance y
actualizarlos de acuerdo a alguna particularidad que sea de inters. Por ejemplo, puede interesar
ver la carga que tiene una determinada pgina o un determinado componente.

En el ejemplo siguiente se vern cules son los pasos necesarios para realizar estas operaciones.

El PerformanceCounter se encuentra en el namespace System.Diagnotics.

Imports System.Diagnostics

Public Class PerfMon


Inherits System.Web.UI.Page

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As _


System.EventArgs) Handles MyBase.Load

Definimos una variable del tipo PerfomanceCounter.

Dim MiContador As PerformanceCounter


Dim NombreContador As String = "Ejemplo"

I.S.T.Idat 85 ASP.NET
Aplicaciones Web

Dim NombreCategoria As String = "DevDays"

En el caso de que no exista la categora y el contador, se crean. En este punto se aplica lo


explicado anteriormente en la parte del Visor de Eventos, en lo que respecta a la seguridad y los
permisos que pueda tener el usuario de realizar esta operacin. Una alternativa es la de tener
creado previamente el contador y la categora.

'Creo la Categora y el Contador


If Not PerformanceCounterCategory.CounterExists(NombreContador, NombreCategoria) Then
PerformanceCounterCategory.Create(NombreCategoria, "Descripcin de la categora", _
NombreContador, "Descripcin del Tipo de Contador")
End If

Se abre el contador de una determinada Categora, l ultimo parmetro (False), esta indicando
que el contador es abierto en modo Lectura/Escritura.

MiContador = New PerformanceCounter(NombreCategoria, NombreContador, False)

Se incrementa el contador en 1.

MiContador.IncrementBy(1)
End Sub
End Class

En el caso que estamos presentando, el incremento se hace linealmente, por unidad, pero
tambin esta la posibilidad con la propiedad CounterType, de poder definir que tipo de datos va a
manejar el contador, como ser: porcentajes, promedios, tasas, multibase, inversiones, u otras.

Para terminar, se han presentado algunos de los casos que ms preguntas generan, y tambin se
puede observar de que manera el Framework .NET ha facilitado estas tareas que en casos
anteriores eran complicadas de implementar y requera conocimientos profundos sobre el API de

Windows.

CMO CREAR Y LEER CONTROLES DINMICAMENTE EN ASP .NET

En este artculo se muestra como crear controles dinmicamente, almacenarlos en contenedores


de controles y posteriormente obtener la informacin que se ha ingresado en ellos.

En el ejemplo de este artculo se utilizan los controles de uso tpico, cuando se lee informacin
de una base de datos. Estos controles son, en la mayora de los casos, los botones radiales
(RadioButton), cajas de seleccin (CheckBox), cajas de texto (TextBox) y las listas de seleccin
(DropDownList).

I.S.T.Idat 86 ASP.NET
Aplicaciones Web

Adems se utilizarn los elementos de una tabla ASPX, como son las filas (TableRow) y
columnas (TableCell). Estas clases forman parte del Framework de .NET.

Para el ejemplo se evita la codificacin directa en la pgina ASPX, realizndose en cdigo


subyacente (codebehind) de la pgina ASPX creada.

Mas informacin de cdigo subyacente se puede encontrar en el artculo E303247.

Contenido

Cuando se necesita construir un editor de los valores almacenadas en


una base de datos, especficamente en una tabla, la cantidad de
registros contenidos en esta no es conocida de antemano. Por este mismo motivo, no se
puede disear una pgina con los controles creados con antelacin, sino que deben ser creados
dinmicamente adecundose a las necesidades.

Para el funcionamiento correcto, se utilizar la propiedad de almacenamiento de estado de los


controles. Se podr encontrar ms informacin de sta propiedad en el documento Estado de los
controles de ASP.NET: Al rescate de los programadores.

Creacin de controles

Los controles que se utilizarn en el ejemplo son los que tradicionalmente se encuentran en
cualquier pgina html, como las cajas de texto, botones radiales, listas de seleccin y cajas de
seleccin.

Estos controles sern almacenados en otros controles que llamaremos contenedores. Muchos
controles pueden comportarse como contenedores de otros controles, pero en el ejemplo se
utilizar una tabla ASPX.

Las clases que se utilizarn como contenedores son las siguientes

Panel
PlaceHolder
Table con sus clases TableRow (fila) y TableCell (columna)

Al final del documento se encontrarn links a las definiciones de todos


los controles utilizados en el ejercicio.

Representacin en html de los contenedores

I.S.T.Idat 87 ASP.NET
Aplicaciones Web

El objeto Panel es representado en html como un elemento DIV. El PlaceHolder no tiene un


representante en html, pero su contenido es transformado en html directamente. El objeto Table
es una tabla html.

El Panel y el PlaceHolder se comportan de manera similar, teniendo el primero una gran cantidad
de propiedades para el formateo grfico, alineamiento, estilos, etc. Para el PlaceHolder, las nicas
propiedades en tiempo de diseo son Visible y EnableViewState, ambas tambin disponibles
para los otros contenedores.

Funciones para agregar controles

Los objetos Panel o PlaceHolder permiten un despliegue poco controlado de los controles
agregados a estos ya que slo es posible definir el orden dentro del contenedor, pero no una
posicin especfica en la pgina. Si se quiere un despliegue mas acabado, es recomendable la
utilizacin de tablas, definiendo las filas y columnas donde sern agregados los controles.

Para el Panel y el PlaceHolder, al momento de agregar un control a un contenedor, se utiliza la


funcin Add de la coleccin de controles Controls.

Los objetos objPanel y objPlaceHolder estn creados en la pgina en tiempo de diseo


El objeto objControl, es cualquier tipo de control.

objPanel.Controls.Add(objControl)

objPlaceHolder.Controls.Add(objControl)

Adicionalmente a la funcin Add existe la funcin AddAt que permite agregar un control en
alguna posicin en especial dentro del contenedor.

objPanel.Controls.AddAt(intPos, objControl)
objPlaceHolder.Controls.AddAt(intPos, objControl)

Si se utiliza una tabla como contenedor de controles, el elemento apto para el almacenamiento es
la celda. Por definicin, una tabla esta compuesta por una o muchas filas y cada fila esta
compuesta por una o muchas celdas.

La insercin de controles en una tabla se realiza a travs de la funcin Add de la coleccin de


controles Controls de la celda.

I.S.T.Idat 88 ASP.NET
Aplicaciones Web

El objeto objTable est creado en la pgina aspx en tiempo de diseo.

El objeto objControl, es cualquier tipo de control

Dim objRow As TableRow

Dim objCell As TableCell

objRow = New TableRow() Se crea una fila de la tabla

objCell = New TableCell() Se crea una columna

objCell.Controls.Add(objControl) Se le agrega el control a la celda


objRow.Cells.Add(objCell) Se inserta la celda con el control en la fila creada anteriormente
objTable.Rows.Add(objRow) Se inserta la fila en la tabla creada en la pgina

Adicionalmente a la funcin Add existe la funcin AddAt que permite agregar un control en
alguna posicin en especial dentro del contenedor.

objCell.Controls.AddAt(intPos, objControl)

En la prctica

La aplicacin constar de dos formularios, el primero con controles de texto y listas de seleccin,
y el segundo con botones radiales y cajas de seleccin.

Para esto es necesario iniciar una aplicacin de tipo ASP.NET Web Application.

I.S.T.Idat 89 ASP.NET
Aplicaciones Web

Una vez creada la aplicacin, se puede utilizar el archivo


WebForm1.aspx creado inicialmente o generar otro con la opcin Add
Web Form del men del proyecto.

I.S.T.Idat 90 ASP.NET
Aplicaciones Web

Primer Formulario

En el primer formulario se permitir la edicin de los valores desde una tabla de categoras,
permitiendo modificar el nombre de la categora y el acceso. El nombre se escribir en campos de
texto y el tipo de acceso en listas de seleccin.

Despus de ingresar los controles, la pantalla de pruebas quedar de la siguiente forma.

I.S.T.Idat 91 ASP.NET
Aplicaciones Web

Los controles creados en esta pgina son los siguientes:

Tabla ASPX donde se almacenarn los controles dinmicos (representada por ###)
Botn Jerarqua
Botn Form.Keys
Label de despliegue del resultado de la grabacin

Se utilizarn dos botones ya que se mostrarn dos formas de recorrer los controles de una
pgina. La de jerarqua corresponde a la navegacin a travs de los controles anidados y la de las
llaves (keys), de la coleccin request.form.

Si bien no existe una jerarqua real de controles, estos se pueden recorrer como si as fuera, ya
que dentro de la pgina hay un formulario, dentro del formulario estn la tabla aspx y los botones.
A su vez, dentro de la tabla aspx existen las filas y dentro de cada fila estn las celdas. Por ltimo,
en las celdas estn los controles de texto y listas de seleccin.

Creacin de los controles

I.S.T.Idat 92 ASP.NET
Aplicaciones Web

En el evento Page_Load se cargan los controles dentro de la tabla. El cdigo para lograr esto se
muestra en las siguientes secciones de cdigo, separadas por partes. A todo control que se quiera
identificar despus de que el usuario presiona grabar, se le debe asignar una nombre para
identificarlo. Esta propiedad es ID.

Primero se llena el encabezado de la tabla.

Dim objCell As TableCell

Dim objRow As TableRow

objRow = New TableRow()

objCell = New TableCell()


objCell.Text = "Id. categora"
objRow.Cells.Add(objCell)

objCell = New TableCell()


objCell.Text = "Nombre categora"
objRow.Cells.Add(objCell)

objCell = New TableCell()


objCell.Text = "Utilizacin"
objRow.Cells.Add(objCell)

tblCategorias.Rows.Add(objRow)

La tabla tblCategorias est creada en tiempo de diseo. En este cdigo, se crea el encabezado de
sta. Primero se crea la fila de la tabla con la instruccin New TableRow(), despus se crea cada
celda con la instruccin New TableCell() y se le asigna el texto a desplegar en la propiedad Text.
Cuando la celda est lista, se inserta en la fila llamando a objRow.Cells.Add(objCell). El proceso
se repite tres veces para las tres columnas del encabezado de la tabla. Al final, se inserta la fila en
la tabla con la instruccin tblCategorias.Rows.Add(objRow).

Para la creacin de las filas y columnas con la informacin, se utiliza un DataReader (almacenado
en objRs) de una base de datos en Access. El ciclo que crea las dems filas y columnas es el
siguiente:

While objRs.Read

I.S.T.Idat 93 ASP.NET
Aplicaciones Web

objTextBox = New TextBox()

objTextBox.ID = "categ" & "-" & CStr(objRs("codigo"))

objTextBox.Text = CStr(objRs("descripcion"))

objTextBox.CssClass = "texto"

objDropDownList = New DropDownList()

objDropDownList.Items.Add(New ListItem("Publica", "1"))

objDropDownList.Items.Add(New ListItem("Privada", "2"))

objDropDownList.Items.Add(New ListItem("Ambas", "3"))

objDropDownList.ID = "acceso" & "-" & CStr(objRs("codigo"))

objRow = New TableRow()

objCell = New TableCell()

objCell.Text = CStr(objRs("codigo"))

objRow.Cells.Add(objCell)

objCell = New TableCell()

objCell.Controls.Add(objTextBox)

objRow.Cells.Add(objCell)

objCell = New TableCell()

objCell.Controls.Add(objDropDownList)

objRow.Cells.Add(objCell)

tblCategorias.Rows.Add(objRow)

End While

La informacin extrada de la base de datos, est en tres columnas.

codigo : identifica a la categora

I.S.T.Idat 94 ASP.NET
Aplicaciones Web

descripcion : la descripcin misma de la categora


acceso : el acceso a sta (privado, pblico y ambos)

La pgina que se construye es de la siguiente forma:

El cdigo de la categora es desplegado en la primera columna, el texto en la segunda y por


ltimo, en la tercera se genera una lista de seleccin con las distintas opciones de acceso. En la
base de datos, el valor almacenado del acceso es 1, 2 3 para las opciones Pblica, Privada o
Ambas, respectivamente.

Como se mencion antes, cuando el usuario presione grabar, es necesario identificar los controles
individualmente. Por esta razn es importante asignar un nombre a cada uno. Para el ejemplo, a
las cajas de texto se les asigna el nombre "categ-" & codigo, donde codigo es el cdigo de la
categora en la base de datos. Para las listas de seleccin, el nombre asignado es "acceso-" &
codigo. Si se observa el cdigo origen de la pgina HTML generada, se puede constatar el
resultado de esto:

I.S.T.Idat 95 ASP.NET
Aplicaciones Web

Se sabe entonces que si se tienen N elementos en la base de datos, se crearn la misma


cantidad de cajas de texto y listas de seleccin, con los nombres acceso-1 hasta acceso-N y
categ-1 hasta categ-N.

Lectura de los controles utilizando la jerarqua de navegacin.

Al presionar el botn jerarqua, se graban los valores en la tabla, producindose el siguiente


resultado:

I.S.T.Idat 96 ASP.NET
Aplicaciones Web

El cdigo del botn jerarqua es el siguiente:

Private Sub btnJerarquia_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs)

Handles btnJerarquia.Click

Dim i As Integer

Dim strNombre As String

Dim lngCodigo As Long


Dim objCeldaDescripcion As TableCell
Dim objCeldaAcceso As TableCell

Dim objDescripcion As TextBox

Dim objAcceso As DropDownList


Dim lngAcceso As Long

lblResultado.Text = "GRABADO UTILIZANDO NAVEGACION SOBRE


CONTROLES<br><br>"

I.S.T.Idat 97 ASP.NET
Aplicaciones Web

'Las filas parten desde 0, pero como en la fila 0 est el texto


de

'Id., Descripcin y Acceso, desde la nmero 1 ya estn los


textboxs

For i = 1 To tblCategorias.Rows.Count 1
'la celda 0 es la del ID, la 1 la de la descripcin y la
2 del acceso
objCeldaDescripcion = tblCategorias.Rows(i).Cells(1)
objCeldaAcceso = tblCategorias.Rows(i).Cells(2)

'Se captura el primer control de cada celda, ya que ste


es el de texto

'y el de acceso para cada columna de la tabla


objDescripcion = objCeldaDescripcion.Controls(0)
objAcceso = objCeldaAcceso.Controls(0)

If Left(objDescripcion.ID, 5) = "categ" Then


strNombre = objDescripcion.Text
lngCodigo = CLng(Split(objDescripcion.ID,
"-").GetValue(1))
lngAcceso = objAcceso.SelectedItem.Value
GrabarCategoria(lngCodigo, strNombre, lngAcceso)
End If

Next

End Sub

En el evento del botn se realiza un ciclo por todas las filas de la tabla tblCategorias, creada en
tiempo de diseo. Se comienza de la fila 1 ya que en la 0 estn los textos de encabezado de la
tabla. El ciclo termina naturalmente en Count-1.

En cada ciclo se obtienen las celdas donde estn los controles. Con la instruccin
tblCategorias.Rows(i).Cells(1) se obtiene una celda, de tipo TableCell. Se est leyendo para la
fila i del ciclo, y se toma la celda 1. Al igual que las filas, las celdas tambin comienzan desde 0 y
van hasta Count-1, pero como en la primera est el id de la categora, se captura la 1 en la
variable objCeldaDescripcion, y la 2 en objCeldaAcceso. Ahora, en las variables

objCeldaDescripcion y objCeldaAcceso est cada celda de las columnas

I.S.T.Idat 98 ASP.NET
Aplicaciones Web

2 y 3 (con el nombre y el acceso). Slo se deben buscar los controles dentro de cada celda para
obtener lo que el usuario ha ingresado.

El primer control es el nmero 0 (y se sabe que no hay ms), que se carga en objDescripcion,
variable de tipo TextBox, con la instruccin objDescripcion = objCeldaDescripcion.Controls(0).
Lo mismo se hace para la lista de seleccin de accesos, con la instruccin objAcceso =
objCeldaAcceso.Controls(0).

Ya se tiene entonces los controles donde el usuario hizo los cambios. Ahora, se debe identificar a
que categora corresponde. El identificador de la categora se haba almacenado junto al nombre
de la caja de texto y de la lista de seleccin con el formato "categ-" & codigo, en la propiedad ID.

Entonces, en la variable lngCodigo se almacena el cdigo de la categora. Para esto, se utiliza la


instruccin lngCodigo = CLng(Split(objDescripcion.ID, "-").GetValue(1)). Lo que hace esta
lnea es mas simple de lo que aparenta. El la propiedad ID de objDescripcion est el texto con
"categ-1". Con la funcin Split, se divide una frase o palabra, con algn carcter. En este caso, el
carcter es "-"., y al dividir categ-1 con -, se generan 2 palabras. Una es categ y la otra es 1.
Con la instruccin GetValue se obtiene la palabra deseada, siendo 0 la primera (categ) y 1 la
segunda (1). Finalizando, la palabra 1 es convertida en un nmero Long y almacenada en la
variable lngCodigo. Obviamente, en cada iteracin del For, ir cambiando el valor de la segunda
palabra del Split, con el nmero del identificador de la categora.

Anteriormente se haba almacenado en la variable strNombre el texto de la descripcin. En la


variable lngAcceso se carga el valor de la seleccin que ha hecho el usuario con respecto al
acceso de la categora.

Por ltimo, se llama a una funcin GrabarCategoria, que graba los valores en la base de datos.

Lectura de los controles utilizando la coleccin request.form.keys.

Al presionar el botn form.keys, se graban los valores en la tabla, producindose el siguiente


resultado:

I.S.T.Idat 99 ASP.NET
Aplicaciones Web

El cdigo del botn Form.Keys es el siguiente, bastante ms simple que


el anterior:

Private Sub btnKeys_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles

btnKeys.Click

Dim lngCodigo As Long

Dim strNombre As String

Dim objKey As String

Dim lngAcceso As Long

lblResultado.Text = "GRABADO UTILIZANDO REQUEST.FORM.KEYS<br><br>"

For Each objKey In Request.Form.Keys

If Left(objKey, 5) = "categ" Then

I.S.T.Idat 100 ASP.NET


Aplicaciones Web

lngCodigo = CLng(Split(objKey, "-").GetValue(1))

strNombre = Request.Form.Item(objKey)

lngAcceso = CLng(Request.Form.Item("acceso-" &


lngCodigo.ToString))

GrabarCategoria(lngCodigo, strNombre, lngAcceso)

End If

Next

End Sub

La primera diferencia es que al recorrer la coleccin Keys del objeto Request.Form, no se pueden
obtener los controles, sino que la informacin que se envi al momento de grabar el formulario
(POST).

Haciendo un ciclo For Each, en la variable objKey se almacenan todos los nombres y valores de
los controles que estaban en la pgina al momento de presionar el botn de grabar.

El funcionamiento es muy simple. Por cada elemento que se mand al servidor al presionar
grabar, se revisa que el nombre sea del tipo que se defini, es decir, categ-1 y los sucesivos. La
forma de hacerlo es comparar los primeros 5 caracteres para que calce con categ. Si es as, es
uno de los controles buscados.

Entonces, siguiendo un proceso similar al del ejemplo anterior, en la variable lngCodigo se


almacena el cdigo de la categora, con la instruccin lngCodigo = CLng(Split(objKey,
"-").GetValue(1)). La explicacin de esta lnea es idntica al caso anterior.

Posteriormente se almacena en la variable strNombre el texto de la descripcin. Esto debe


hacerse utilizando la tradicional sentencia Request.Form(objKey), conocida por todos los
programadores del ASP tradicional.

En la variable lngAcceso se carga el valor de la seleccin que ha hecho el usuario con respecto al
acceso de la categora, utilizando tambin Request.Form, pero solicitando el campo acceso- y el

cdigo de la categora, almacenado en la variable lng Codigo. La sentencia que


realiza esto es lngAcceso = CLng(Request.Form.Item("acceso-" &
lngCodigo.ToString)).

Por ltimo, se llama a una funcin GrabarCategoria, que graba los valores en la base de datos.

I.S.T.Idat 101 ASP.NET


Aplicaciones Web

A continuacin se utilizarn cajas de seleccin y botones radiales. Para esos casos, es casi
trasparente el uso para el programador.

Segundo Formulario

En el segundo formulario se permitir la seleccin de los valores de la tabla de categoras, en


listas de seleccin y botones radiales.

Despus de ingresar los controles, la pantalla de pruebas quedar de la siguiente forma:

Los controles creados en esta pgina son los siguientes:

CheckBoxList para la lista de cajas de seleccin


RadioButtonList para la lista de botones radiales
Botn Aceptar que despliega las selecciones del usuario
Label de despliegue del resultado de la seleccin

Creacin de los controles

I.S.T.Idat 102 ASP.NET


Aplicaciones Web

En el evento Page_Load se cargan los controles dentro de ambas listas,


la de CheckBox y la de RadioButton, llamadas chkList y radList
respectivamente. El cdigo para lograr esto se despliega a
continuacin. Al igual que en el ejemplo anterior, los datos se cargan en
un DataReader (objRs).

While objRs.Read

chkList.Items.Add(New
ListItem(CStr(objRs("descripcion")), CStr(objRs("codigo"))))

radList.Items.Add(New
ListItem(CStr(objRs("descripcion")), CStr(objRs("codigo"))))

End While

As de simple, y las dos listas estn pobladas. El resultado de esto se


despliega en la siguiente pantalla:

Se pueden hacer algunas selecciones y presionar el botn Aceptar.

I.S.T.Idat 103 ASP.NET


Aplicaciones Web

El cdigo detrs del botn Aceptar es el siguiente:

lblResultado.Text = "Items marcados en checkbox<br><br>"

For i = 0 To chkList.Items.Count 1

objListItem = chkList.Items.Item(i)

If objListItem.Selected Then

lngCodigo = objListItem.Value

lblResultado.Text &= objListItem.Text & "<br>"

End If

Next

I.S.T.Idat 104 ASP.NET


Aplicaciones Web

lblResultado.Text &= "<br>tem marcados en radiobutton<br><br>"

Try

lngCodigo = radList.SelectedItem.Value

lblResultado.Text &= radList.SelectedItem.Text & "<br>"

Catch ex As NullReferenceException

lblResultado.Text &= "NO SE HA SELECCIONADO NINGN TEM"

End Try

Para la lista de cajas de seleccin se debe recorrer verificando si cada elemento est o no
seleccionado. Al igual que los dems contadores, este va desde 0 hasta Count-1.

Los elementos de estas listas son del tipo ListItem (referencia al final), los cuales poseen las
propiedades Value con el identificador de la categora, Text con el nombre de la categora y
Selected, que retorna verdadero o falso si est seleccionado. ListItem tiene una gran cantidad de
propiedades, pero slo se han destacado las necesarias en este caso.

Durante el ciclo, se comprueba que est seleccionada, y en caso positivo, se obtiene el cdigo y
el nombre.

Para los botones radiales, es mas simple an, pero se debe tener en cuenta un condicin
especial.

El elemento seleccionado de la lista radial se almacena en radList.SelectedItem. Si no hay


ningn elemento seleccionado, lo anterior es NULO y se genera un error si se trata de acceder
directamente. En caso que haya algn elemento seleccionado, tanto el identificador como el
nombre de la categora se obtienen de las propiedades Value y Text respectivamente.

En caso de error, se utiliza el capturador de errores Try...Catch (referencia al final), validando que
la excepcin sea por error de NULO (NullReferenceException).

Conclusiones

La utilizacin de controles dinmicos permite construir pantallas ms completas y poderosas.


Lamentablemente no siempre es simple de construir.

I.S.T.Idat 105 ASP.NET


Aplicaciones Web

Para los controles RadioButtonList y CheckBoxList de ASP.NET, su utilizacin se ha simplificado


al mximo. Con algunas lneas de cdigo se pueden crear y leer los controles rpidamente.

Para las listas de seleccin y cajas de texto, se complica el funcionamiento. Existen varias formas
de hacer lo mismo del primer formulario, de diversa complejidad, y la opcin queda abierta al
programador a encontrar la forma que ms le acomode a su trabajo. A su vez, la lectura de los
controles, las opciones presentadas son las ms utilizadas, pudiendo encontrar algunas variantes
sobre la segunda. Ambas tienen sus ventajas y desventajas.

La jerarqua de controles es ms engorrosa de construir, pero no se producen errores en caso de


haber controles con el mismo comienzo de nombre. Los controles se identifican con categ-N,
pero si existe algn otro control con el nombre categoras, por ejemplo, al aplicar la funcin left
con 5, el resultado calza con categ, pero realmente ste no es un control de los que se busca.
Nuevamente, es el programador el que debe elegir la que ms le acomode, o buscar variaciones
de estas.

Referencias

Las definiciones de los controles (en ingls) se pueden encontrar en los siguientes artculos

RadioButton Web Server Control


CheckBox Web Server Control
DropDownList Web Server Control
TextBox Web Server Control
Panel Web Server Control
PlaceHolder Web Server Control
Table Web Server Control
TableRow Web Server Control
TableCell Web Server Control
ListItem Class
Label Web Server Control

Funciones, mtodos y definiciones (en ingls)

TryCatchFinally Statements
Split Function
GetValue Method

VIII BIBLIOGRAFA:
CHARTE Francisco Programacin con Visual Net
Edit. ANAYA Espaa 2001

I.S.T.Idat 106 ASP.NET


Aplicaciones Web

CHARTE Francisco Programacin con Visual Net (Programacin de


Bases de Datos )
Edit. ANAYA Espaa 2002

EVANGELUS Petroulsos Visual Basic Net


Editorial Anaya, Madrid 2002

MICROSOFT Manual del Programador 6.0


Editorial Mac Graw Hill Mxico 1999

CEVALLOS fco. Javier Programacin Visual Basic 6.0


Editorial Rama Madrid 2000

Direcciones Web

http://www.godot.net
http://www.manualesgratis.com
http://www.microsoft.com
http://www.microsoft.com/spanish/msdn/articulos/archivo/040403/voices/treeview.asp#Tre
eView_References
http://www.microsoft.es
http://www.guille.costasol.net
http://www.programacion.net/cursos
http://www.willydev.net/DesktopDefault.Aspx
http://es.gotdotnet.com/quickstart/aspplus/doc/ecommerceapp.aspx
http://www.microsoft.com/spanish/msdn/comunidad/mtj.net/voices/art185.asp

I.S.T.Idat 107 ASP.NET

Vous aimerez peut-être aussi