manual asp .net

140
Aplicaciones Web INDICE 1.- ASP NET 1.1 Asp Net 1.2 ADO NET 1.3 Clases Básicas para gestión 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 Numéricas, cadenas y Fechas 2.- Aplicaciones 2.1 Web- form calculo matemáticos 2.2 Empleando el Datgrid1 2.3 Consultas con Hipervínculos 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 diseño 3.2 Creación de unos reportes simple con campos enlazados 3.3 Ejecución de un reporte desde un formulario 3.4 Filtros en un reporte 4.- Web Service 4.1 Definición 4.2 Web Method 4.3 Publicación de los Web Service 4.4 Acceso a los servicios I.S.T.”Idat” 1 ASP.NET

Upload: aegoavl

Post on 03-Aug-2015

913 views

Category:

Documents


9 download

DESCRIPTION

Manual ASP.Net

TRANSCRIPT

Page 1: Manual ASP .Net

Aplicaciones Web

INDICE

1.- ASP NET

1.1 Asp Net

1.2 ADO NET

1.3 Clases Básicas para gestión 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 Numéricas, cadenas y Fechas

2.- Aplicaciones

2.1 Web- form calculo matemáticos

2.2 Empleando el Datgrid1

2.3 Consultas con Hipervínculos

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 diseño

3.2 Creación de unos reportes simple con campos enlazados

3.3 Ejecución de un reporte desde un formulario

3.4 Filtros en un reporte

4.- Web Service

4.1 Definición

4.2 Web Method

4.3 Publicación de los Web Service

4.4 Acceso a los servicios

4.5 Aplicación con web Services

Anexo:

Algunos trucos en ASP .NET

Cómo crear y leer controles dinámicamente en ASP .NET

I.S.T.”Idat” 1 ASP.NET

Page 2: Manual ASP .Net

Aplicaciones Web

PLATAFORMA MICROSOF.NET

Microsoft .NET se compone de un conjunto de recursos que hacen posible su implementación,

estos componentes se muestran en la siguiente ilustración:

VISUAL STUDIO.NET Internet

.NET Framework

.NET Enterprise Servers

.NET Building Block Services

2. Servidores Empresariales.NET

Microsoft Exchange Server: Ofrece servicios de mensajería (correo electrónico) y

colaboración entre aplicaciones (workflow).

Microsoft Host Integration Server: Realiza la comunicación entre sistemas Cliente/Servidor,

aplicaciones Intranet o Internet con los sistemas legados por el negocio, tales como

Mainframe o AS/400.

Microsoft Internet Security and Aceleration Server: Antes llamado Proxy Server, ISA Server se

usa para brindar seguridad en las comunicaciones por Internet.

Microsoft SQL Server: Es el servidor de datos de Microsoft que permite crear soluciones de

Data Warehouse y se integra con Microsoft Office.

3. Bloque de Servicios .NET

El Bloque de Servicios .NFT se está construyendo como un conjunto de Servicios Web XML que

permitan la integración entre los usuarios y las aplicaciones clientes que corran en diferentes

dispositivos (PCs, dispositivos móviles, etc). Actualmente Microsoft tiene construido dos servicios

que ofrecen ventajas para los usuarios:

Microsoft Passport: Tiene un conjunto de servicios como el Single Sign In (SSI) que permite

autenticar si un usuario es válido y puede participar en un sitio Web, aparte tiene otras

ventajas como reducir el tiempo de autenticación, guardar contenido personalizado. etc.

Hotmail utiliza el servicio de Passport para la autenticación de usuarios y guardar información

de éste en el Web.

Microsoft Hailstorm: Usa los servicios de Passport para guardar información personalizada del

usuario, pero su uso principal es almacenar Servicios Web que puedan ser usados por

aplicaciones de Visual Studio .NET o cualquier lenguaje compatible con .NET

El Marco. NET

Definiendo el Marco .NET

I.S.T.”Idat” 2 ASP.NET

Page 3: Manual 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 creación, distribución y ejecución de servicios Web, así como de

otros tipos de aplicaciones.

Se compone de cuatro partes principales que son:

1. Tiempo de F-jccución en Lenguaje Común (CLR)

Es el RunTime común para todos los lenguajes que soportan el Marco .NET y realiza la mayor

parte de funciones para que corran las aplicaciones.NET, es el que se encarga de compilar \

ejecutar una aplicación, así como administrar su trabajo con el sistema.

2. Librería de Clases .NET

Son un conjunto de componentes que sirven para acceder a través de objetos a la mayor parte de

servicios del sistema, labor que era realizada antes por las APIs de Windows, la

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 creación, distribución y mantenimiento de aplicaciones

Web así como de Servicios Web XML que son la razón de ser de la plataforma .NET

TIEMPO DE EJECUCIÓN EN LENGUAJE COMÚN (CLR)

Introducción al RunTime y al CLR

Un RunTime es la aplicación responsable de manejar la asignación de memoria, inicio y

eliminación de procesos mientras un programa se está ejecutando, así como de brindar seguridad

al código, y también gestionar su relación con otros programas o componentes.

l.os RunTime lian sido usados por los lenguajes de programación como Visual Basic cuyo nombre

es el VBRLN, Visual C++ cuyo nombre es MSVCRT. Pero también Visual FoxPro, JScnpt,

SmaIlTalk. Per!, Python. Java, etc. tienen su propio RunTime.

Cada aplicación Visual Basic 6 que se quería distribuir tenia que distribuirse con el RunTime, lo

mismo en Visual C-H-, la diferencia que el primero ocupaba demasiado espacio y no era tan

poderoso como el segundo.

EL RunTime de .NET se llama el CLR (Common Language RunTime o Tiempo de Ejecución en

Lenguaje Común) y es la solución a los diferentes tipos de RunTime que manejan los diferentes

lenguajes de programación antes mencionados, que ahora serán

Gestionados en ejecución por un único RunTime común.

La ventaja de tener un solo RunTime son múltiples ya que se podrá compartir las mismas

estructuras, tipos de datos, clases, etc. en todos los lenguajes que cumplan las especificaciones

del Marco .NET.

Servidos del CLR

I.S.T.”Idat” 3 ASP.NET

Page 4: Manual ASP .Net

Aplicaciones Web

El CLR es el motor de ejecución de las aplicaciones del Marco .NET. Proporciona una serie de

servicios, entre los que se incluyen los siguientes:

Administración del código (carga y ejecución).

Aislamiento de la memoria de la aplicación.

Comprobación de la seguridad de los tipos.

Conversión del (Lenguaje Intermedio) a código nativo

Acceso a los metadatos (información de tipo mejorada)

Administración de memoria para los objetos administrados

Aplicación de seguridad de acceso al código

Control de excepciones, incluyendo excepciones en varios lenguajes

Interoperabilidad entre el código administrado, los objetos COM y las DLL anteriores (datos y

código no administrados)

Automatización del diseño de objetos

Suporte para servicios de desarrolladores (creación de perfiles, depuración, etc.)

Sistema de auto registro o auto descripción de componentes (no es necesario registrar el

componente en el sistema)

No es necesario los elementos de COM como GUIDs, interfases iLnknow, etc.

Nota: Con esto decimos adiós al problema de la compatibilidad de versiones de las dll.

Esta información se utiliza en tiempo de ejecución para resolver referencias, aplicar las directivas

del enlace de versiones y validar la integridad de los ensambladores cargados. El tiempo de

ejecución puede determinar y ubicar el ensamblador para cualquier objeto de ejecución, ya que

todos los tipos se cargan en el contexto de un ensamblador.

Asimismo, los ensambladores constituyen la unidad en la que se aplican los permisos de

seguridad de acceso al código. La prueba de identidad de cada ensamblador se considera

individualmente cuando .Se determinan los permisos que contiene para otorgar al código.

Espacio de Nombre

Un espacio de nombre (NameSpace) es un esquema de denominación lógica para los tipos en los

que un nombre de tipo sencillo, como OLEDB. Va precedido de un nombre jerárquico separado

por puntos. Dicho esquema se encuentra totalmente bajo el control del desarrollador.

Las herramientas de diseño pueden utilizar los espacios de nombre para facilitar a los

desarrolladores el proceso de exploración y referencia a los tipos en su código. El concepto de

espacio de nombre no está relacionado con el del ensamblador. Un único ensamblador puede

contener tipos cuyos nombres jerárquicos dispongan de distintas raíces de espacio de nombre y

una raíz lógica de este tipo puede abarcar varios ensambladores.

I.S.T.”Idat” 4 ASP.NET

Page 5: Manual ASP .Net

Aplicaciones Web

En el Marco .NET. un espacio de nombre es una conveniencia lógica de denominación en tiempo

de diseño, mientras que un ensamblador establece el ámbito de nombre para los tipos en tiempo

de ejecución.

En Visual Basic, por ejemplo para hacer uso de un Assemblie hay que usar los espacios de

nombre con la declaración Imports, por ejemplo si quisiéramos acceder a datos con SQL Server y

manejar archivos de texto en una aplicación Windows realizaríamos la siguiente declaración:

Imports Systein.Windows.Forms

Imports System.Data.SQL

Imports System.10

CAPITULO 2: VISUAL STUDIO .NET

Introducción a Visual Studio .NET

Definiendo Visual Studio .NET

Visual Sludio .NET es la Herramienta Rápida de Desarrollo (RAD) de Microsoft para la siguiente

generación de Internet que son los Servicios Web XML. Esta herramienta permite la creación de

aplicaciones usando el Marco .NET, es decir usando el CLR, la Librería 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 algún programa

editor, por ejemplo el Bloc de Notas, pero el tiempo que llevaría el desarrollo no justificaría el

ahorro de costos, en cambio, si se utiliza una herramienta como Visual Studio.NET el tiempo de

desarrollo se reduciría enormemente.

Visual Studio .NET permite también la integración y el uso cruzado de lenguajes de programación:

Visual Basic .NET. Visual C# .NET, Visual C-H- .NET y JScript .NET

A diferencia de la versión anterior no existe Visual InterDev, ni Visual J++-, además Visual FoxPro

.NET no comparte tas características unificadas del Marco .NET

Herramienta Rápida de Desarrollo (RAD)

La principal ventaja de Visual Studio .NET es realizar la creación de aplicaciones de forma fácil y

rápida, 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:

Creación de Páginas Web mediante Formularios Web

Visual Studio .NET incluye un diseñador de páginas Web HTML y ASP .NET basado en

formularios Web. El diseñador permite arrastrar controles, clases de datos, y otros objetos y

configurar sus propiedades como si fuese un formulario de una aplicación para Windows.

I.S.T.”Idat” 5 ASP.NET

Page 6: Manual ASP .Net

Aplicaciones Web

Creación de Servicios Web XML

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. También podemos usar un Servicio Web

haciendo referencia desde un proyecto mediante la opción "Add Web Referente" del menú

"Project".

Creación 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 características de un objeto a otro, esto este presente en

todos los objetos creados en Visual Studio .NET, sean visuales o no.

Creación de archivos XML

Con el diseñador de XML, crear un archivo XML es más fácil que nunca, ya que se muestra de

colores el código y sé auto completan los Tags que uno va escribiendo. Este

Maneja 3 vistas: XML, esquemas y datos.

Existen mas características RAD en Visual Studio .NET, las cuales trataremos mas adelante.

Lenguajes en .NET

En Visual Studio .NET vienen los siguientes Lenguajes de Programación:

Visual Basic .NET

Visual C# .NET

Visual C++ .NET

Visual FoxPro .NET (No administrado por el Marco .NET)

Visual JScript .NET

Qué es ASP.net?

El 20 de Enero del 2002 una nueva versión del tradicional Active Server Pages se ha lanzado al

público, 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 versión mejorada de C++) hasta incluso JScript.net.

Pero, ¿cúal es la diferencia de ASP.net con el ASP común que conocemos?

Mucha, realmente es mucha. Mientras ASP se escribía 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 leído, ya no puedes utilizar VBScript sino que debes utilizar VB.net que es lo que más se

aproxima. Otro cambio radical es que ASP.net es un lenguaje totalmente orientado a objetos.

I.S.T.”Idat” 6 ASP.NET

Page 7: Manual ASP .Net

Aplicaciones Web

¿Que mejoras trae ASP.net? ¿Es realmente mejor que ASP?

Sin duda, es mucho mejor que el ASP tradicional, ASP.net trae diversas mejoras entre las cuales

se destacan:

Rendimiento: la aplicación de compila en una sola vez al lenguaje nativo, y luego, en

cada petición tiene una compilación Just In Time, es decir se compila desde el código nativo, lo

que permite mucho mejor rendimiento. También permite el almacenamiento del caché en el

servidor

Rapidez en programación: mediante diversos controles, podemos con unas pocas líneas y en

menos de 5 minutos mostrar toda una base de datos y hacer rutinas complejas.

Servicios Web: trae herramientas para compartir datos e información 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 tecnología 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 capítulo 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 aplicación 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 orígenes 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 raíz 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

Page 8: Manual ASP .Net

Aplicaciones Web

fuente microsoft.net

El problema es comunicar un programa o aplicación con una base de datos y más que comunicar

se pretende que el programa o aplicación 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 continuación:

 

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 conexión alguna con un

origen de datos, sino que simplemente representan los datos en sí mismos.

 System.Data.Common: ofrece clases comunes entre distintos orígenes de datos. Para lo que

vamos a tratar en este artículo, podemos decir que estas clases sirven de clase base para las que

están contenidas en los dos espacios de nombres que vienen a continuación.

 

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, según decíamos, no tienen conexión

alguna con dicho origen de datos. Las clases de System.Data.OleDb usan OLEDB como

tecnología subyacente.

 

I.S.T.”Idat” 8 ASP.NET

Page 9: Manual ASP .Net

Aplicaciones Web

System.Data.SqlClient: contiene clases que permiten interactuar con orígenes de datos SQL

Server de un modo mucho más 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 prácticamente equivalente al de las que se encuentran en

System.Data.OleDb.

 

 

LAS CLASES BÁSICAS DE ADO.NET Las he llamado básicas porque, realmente, serán el pilar fundamental para casi cualquier

aplicación que tenga que acceder a un origen de datos con unos mínimos requisitos de eficiencia

y escalabilidad. Las clases más importantes del espacio de nombres System.Data son:

 

DataSet: Es la piedra angular del modelo de objetos: Esta clase permite tener en memoria una

auténtica "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 físico

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 también 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 colección de objetos

DataTable, y dicha colección 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

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 utilizarImports System.Data.SqlClient     'Para acceder a SQL ServerImports System.Data.OleDb.         'Para cualquier origen de datos

Page 10: Manual 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 relación entre dos objetos DataTable. También pertenece al

espacio de nombres System.Data. Todas las relaciones que haya en un DataSet se encuentran

en la colección Relations, de la clase DataRelationCollection.

 

Las clases más 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 más o menos equivalentes

a la clase Connection del antiguo ADO, en tanto en cuanto que proporcionan la conexión con el

origen de datos y mantiene algunas de sus antiguas propiedades y métodos, como son

ConnectionString, ConnectionTimeOut, Open y Close. Sin embargo, al igual que las otras clases

que también tienen un equivalente (más o menos) en la tecnología antigua, ten presente que no

se manejan exactamente igual, como tendremos ocasión de ver más adelante.

 

SqlCommand: su equivalente en OleDb es OleDbCommand. También 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 parámetro

dentro de la colección Parameters del objeto SqlCommand u OleDbCommand, según el caso. La

colección 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, según proceda) en sus propiedades SelectCommand, InsertCommand,

UpdateCommand y DeleteCommand. Cuando se invoca el método 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 método Update, el

DataAdapter ejecuta el comando establecido en su propiedad InsertCommand para añadir al

origen de datos las filas nuevas añadidas 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

Page 11: Manual ASP .Net

Aplicaciones Web

datos físico. Si la conexión estaba cerrada antes de ejecutar los métodos Fill o Update, el

DataAdapter se ocupa de abrir dicha conexión para efectuar la operación requerida, cerrando de

nuevo la conexión una vez que ha terminado. Si la conexión estaba abierta, el DataAdapter deja

que dicha conexión siga abierta después de haber terminado.

SqlCommandBuilder: su equivalente en OleDb es OleDbCommandBuilder. Tampoco había

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 métodos

GetInsertCommand, GetUpdateCommand y GetDeleteCommand.

Resumiendo

Objetos de Proveedores de Datos .NET

Propósito Objeto SQL Server 7.0 o 2000

Objeto para un origen OLEDB

ConnectionProvee conectividad a un Origen de Datos

SqlConnection OleDBConnection

CommandProvee acceso a comandos de Base de Datos como Select, Delete, Insert y Update

SqlCommand OleDBCommand

DataReaderProvee acceso a datos de solo lectura

SqlDataReader OleDBDataReader

DataAdapter

Utiliza el objeto Connection para enlazar un objeto DataSet con un Proveedor de Datos. También permite actualizar los Datos en el origen a partir de las modificaciones hechas en el DataSet.

SqlDataAdapterOleDBDataAdapter

I.S.T.”Idat” 11 ASP.NET

Un DataSet guarda información en un entorno desconectado. Después de que usted establece una conexión 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 conexión con el origen de datos. La conexión se reestablece recién cuando usted necesita actualizar los cambios

Page 12: Manual ASP .Net

Aplicaciones Web

Los datos siempre viajan en formato XML ASP.NET y ADO.NET transforman en forma automática XML en un DataSet.

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

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

Hacer la conexión 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

configuración anterior.

I.S.T.”Idat” 12 ASP.NET

Vamos a crear una Base de Datos en el Servidor:

• Haga click en el nombre de su servidor. Presione el botón derecho del Mouse. Seleccione 'Nueva Base de Datos'

Control datagrid1

Page 13: Manual ASP .Net

Aplicaciones Web

Acciones de ida y vuelta

Uno de los conceptos principales que debe comprender es la división del trabajo en una página de

formularios Web Forms. El explorador presenta el formulario al usuario y éste interactúa con él,

causando que el formulario se envíe de vuelta al servidor. Sin embargo, como todo procesamiento

que interactúa con componentes de servidor debe ocurrir en el servidor, esto significa que, para

cada acción que necesita procesamiento, el formulario debe enviarse al servidor, procesarse y ser

devuelto al explorador

Servidor .NET (Active Server Pages .NET). Es una tecnología para generar páginas

dinámicas en el servidor y enviarlas al cliente (navegador Web) que las ha solicitado,

ejecutando previamente el código que contienen (código Visual Basic, C#, etc.) y

convirtiendo el resultado a código HTML, que es el único que puede interpretar

adecuadamente el cliente.

I.S.T.”Idat” 13 ASP.NET

Page 14: Manual ASP .Net

Aplicaciones Web

La clave de este proceso es que, a diferencia de la navegación clásica en que el sevidor

espera (escucha) peticiones del cliente y, cuando las recibe, envía automáticamente la

respuesta (generalmente un documento HTML que es mostrado en el navegador Web),

aquí el servidor ejecuta algún tipo de procesamiento a raíz de la petición del

cliente y elabora dinámicamente la respuesta que devuelve. En esquema sería:

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

El cliente envía una petición al servidor (solicita una página Web). El cliente puede

ejecutar código (en el lado del cliente), con secuencias de comandos que se utilizan para

generar efectos dinámicos en el cliente (DHTML). Este código no se procesa en el

servidor

El servidor busca la página solicitada y ejecuta el código contenido en ella. Este código

del lado del servidor se escribe en secuencias de comandos (para tareas simples) pero

también en lenguajes compilados (Visual Basic, C#, etc., para tareas complejas como son

cálculos matemáticos, recuperación de datos, gestión de sitios, comercio electrónico, etc.)

El servidor traduce el resultado de la ejecución del código a HTML y lo envía al cliente

El cliente muestra al usuario el documento recibido. Si el usuario consulta el código fuente

del documento que visita, no verá el código original del archivo que reside en el servidor,

sino solamente código HTML en que la tecnología ASP .NET ha convertido el resultado

del procesamiento

CONFIGURACIÓN DE ASP .NET: para poder ejecutar páginas 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 tecnología de servidor, requiere un servidor Web en ejecución, de ahí la

necesidad de IIS.

Teóricamente no se puede utilizar en Windows XP Home ya que no aparece

como opción 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 también 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 páginas ASP .NET. La instalación de Visual Studio .NET

conlleva automáticamente la del SDK de .NET Framework.

I.S.T.”Idat” 14 ASP.NET

Page 15: Manual ASP .Net

Aplicaciones Web

Las páginas ASP .NET tienen la extensión aspx. Para visualizar adecuadamente una

página 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 página

aspx funcione, debe ser filtrada por el servidor Web, por lo que es necesario dirigir el

navegador Web a http://localhost (dirección de la máquina local) y ahí a la dirección

correcta del archivo aspx.

COMPONENTES BÁSICOS DE UNA PÁGINA ASP .NET:

En la primera línea destaca la directiva

<%@ Page Language="Vb" %>

que dice al servidor Web que se trata de una página ASP .NET y que usa Visual

Basic .NET como lenguaje de programación. También podría ser

<%@ Page Language="Cs" %>

en caso de usar C# como lenguaje de programación.

Después de la directiva @ Page vienen bloques de declaración de código, en

lenguaje Visual Basic .NET, incluidos en la etiqueta

<script runat=server><script>

Aquí es donde debe ir todo o la mayor parte del código Visual Basic ya que este

código es el único compilado a MSIL

Después comienza el código HTML. Este código, junto con el resultado del código

ASP .NET, es enviado al cliente. En esta sección puede haber bloques

proveedores de código 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 declaración de código

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 página 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 añadidas por ASP .NET

SEPARACIÓN DE CÓDIGO VB Y CONTENIDO HTML: En muchas ocasiones es útil

mantener el contenido HTML de las páginas fuera del código Visual Basic, aumenta la

I.S.T.”Idat” 15 ASP.NET

Page 16: Manual ASP .Net

Aplicaciones Web

legibilidad del código fuente de los archivos y facilita su modificación por el

programador. Se pueden usar formularios con código de apoyo, llevando a estos

formularios o archivos de código *.vb todo el código Visual Basic del archivo aspx y

declarando en ellos versiones públicas de los controles de servidor que se usan en la

página. Por ejemplo, para una etiqueta llamada lbEtiqueta en el archivo aspx, se puede

escribir en el archivo de código:

Public lbEtiqueta As Label

de esa manera, el control de servidor lbEtiqueta (Label) de la página aspx es una instancia de la

variable lbEtiqueta de la clase datagridVb declarada en el archivo vb y, desde el código 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 código de apoyo:

- la página Asp .NET datagrid.aspx contiene solamente código HTML con controles de servidor

- el archivo de código de apoyo datagrid.aspx.vb contiene el código Visual Basic .NET con

declaraciones de variables y procedimientos

Ambos archivos han de estar juntos en la misma carpeta para que funcione el código actual pero,

como se verá más adelante, pueden estar situados en carpetas diferentes. El archivo

datagrid.aspx necesita de estos atributos en la directiva @ Page al comienzo del código:

- 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 página aspx (puede ser cualquier

clase derivada de la clase Page), y el atributo Src, que especifica el archivo de código fuente en

el que se define la clase heredada (es compilado dinámicamente cuando se solicita la página

aspx); este archivo puede estar situado en cualquier carpeta del servidor, sólo hay que

especificarlo correctamente en la ruta.

Así es como debe ser configurado al colocar las páginas en el servidor Web:

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

(aquí la página aspx hereda la clase datagridVb, que está descrita en el archivo

datagrid.aspx.vb, que es compilado en tiempo de ejecución)

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 página (el

I.S.T.”Idat” 16 ASP.NET

Page 17: Manual ASP .Net

Aplicaciones Web

diseñador de formularios Web Forms de Visual Studio .NET usa este atributo para averiguar

dónde 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 diseño) (Codebehind no se usa en

tiempo de ejecución), y el atributo Inherits, que define la clase que hereda la página aspx.

Así es como debe ser configurado mientras se trabaja con la página dentro de Visual Studio .NET:

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

%>

(aquí la página 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 página a medida que se va construyendo)

ESPACIOS DE NOMBRES Y HERENCIA: A su vez, en el archivo de código 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 código va en la página aspx

(Asp .NET lo hace automáticamente por nosotros) y también 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 también 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

^ Exponenciacion

* , / Multiplicación y división real

\ división entera

Mod residuo de una división entera

A=23\4 la respuesta es 5

A= 23 mod 4 resultado 3

Operadores de comparación

Igualdad (=)

Desigualdad (<>)

I.S.T.”Idat” 17 ASP.NET

Otros operadores complementariosAsigna y opera+=, -= ,*= , /= , ^=a=a+5 equivale a+=5

Page 18: Manual ASP .Net

Aplicaciones Web

Menor o mayor que (<,>)

Mayor o igual que (>=)

Menor o igual que (<=)

Like

Explicación

TypeOf...Is

Conversión de tipos

Var = CType(Val("10 * 25"), Integer)

Con esto le estamos diciendo al VB que primero convierta la cadena en un número mediante la

función Val, (que devuelve un número de tipo Double), después le decimos que ese número

Double lo convierta en un valor Integer.

También podríamos hacerlo de esta otra forma:

i = CInt(Val("10 * 25"))

Nombre de la función

Tipo de datos que devuelve

Valores del argumento "expresion"

CBool(expresion) Boolean Cualquier valor de cadena o expresión numérica.

CByte(expresion) Byte de 0 a 255; las fracciones se redondean.

CChar(expresion) Char Cualquier expresión de cadena; los valores deben ser de 0 a 65535.

CDate(expresion) Date Cualquier representación válida 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

Page 19: Manual ASP .Net

Aplicaciones Web

Enlaces de datos con los controles Web FormAplicación 1.- Sin incluir controles Form

Resultado

Codificación.-<%@ 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

Page 20: Manual ASP .Net

Aplicaciones Web

</body></HTML>

Aplicación 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 elección: " + 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 también se puede emplear un arreglo dinámicoDim values() as string={“Visual Net”,” Power Builder”,” Macromedia Mx”,”sql server”}

I.S.T.”Idat” 20 ASP.NET

Page 21: Manual ASP .Net

Aplicaciones Web

Dropdown1.datasource=values

1.- Lo primero y más importante a recordar es que en este modelo de programación el codigo en

vbNet estará embebido o empotrado junto con codigo html.

2.- Este codigo mezcla instrucciones y objetos de dos lenguajes de programación diferentes, ellos

son HTML y vbNet.

3.- El problema es que los objetos HTML no tienen suficientes propiedades y métodos para

resolver muchos problemas de programación, por esta razón Microsoft.Net crea unas

cubiertas?(WRAPPERS) para cada uno de ellos, en su librería System.Web.UI.Control, o

colección 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 métodos 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 compilación 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 programación es que de

los objetos htmlcontrols se pueden manipular directamente sus propiedades y métodos, 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 renglón de instrucción en vbnet se puede resolver el problema completo.

Empleando Web Form con códigos en Visual VB

Comienza con una directiva o instrucción 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

Page 22: Manual 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 librería de clases de .NET

@ Register Define alias, tais, y otros parámetros para controles de usuarios y normales

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

Aplicación.- Ingresando un radio muestra su area en una etiqueta e ingresando una cadena o

párrafo lo ordena de forma ascendente

Ejemplos:

CódigosPublic 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

Page 23: Manual 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

Page 24: Manual ASP .Net

Aplicaciones Web

FUNCIONES CON NUMEROS

Funcion DevuelveAbs Valor absoluto de un numero realInt Parte entera de un realRnd Un numero al azr entre 0 y 1Exp Exponecial de un numero real es decir e = 2.71828

El objeto Math.funciones

Math. Reunid (nov. - Redondea, con ciertos números 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 número especificado

Math.ceiling.- Devuelve el número entero más pequeño mayor o igual que el número especificado.

Math.ceiling(3.1) 4

Math.Floor.- Devuelve el número entero más grande menor o igual que el número especificado

Math.Floor(3.1) 3

Math.sqrt(n).- Devuelve la raíz cuadrada de un número especificado.

Math.pow(n).- Devuelve un número especificado elevado a la potencia especificada

Funciones Fechas.

Las fechas son cadenas especiales. Visual Basic sabe obtener y tratar la información relativa a la

fecha y la hora. Dispone para ello de una declaración de variable: Date. Una variable declarada

como date puede contener una fecha, una fecha y una hora o una hora solamente.

Dim MyDate As DateDim MyMonth As IntegerMyDate = #2/12/1969# ' Assign a date.MyMonth = Month(MyDate) ' MyMonth contains 2.Now Devuelve la fecha y hora actual.WeekDay Devuelve el día de la semana (En número, 1=Domingo, 2=Lunes,...)Dim MyDate As DateDim MyWeekDay As IntegerMyDate = #2/12/1969# ' asigna una fechaMyWeekDay = Weekday(MyDate) ' MyWeekDay contains 4 Day Obtiene el día, a partir de una fecha Dim MyDate As DateDim MyDay As IntegerMyDate = #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

Page 25: Manual ASP .Net

Aplicaciones Web

Year Obtiene el año 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 Añade un intervalo de tiempo a una fecha

Interval

Requerido. Valor de enumeración DateInterval o expresión String que representa el

intervalo de tiempo que se desea agregar.

Number

Requerido. Double. Expresión de punto flotante que representa el número 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. Expresión 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.

ValoresEl argumento Interval puede tener uno de los siguientes valores:

Valor de enumeración Cadena Unidad de intervalo de tiempo agregada DateInterval.Day d Día; truncado al valor integral DateInterval.DayOfYear y Día; truncado al valor integral DateInterval.Hour h Hora; redondeada al milisegundo más cercano DateInterval.Minute n Minuto; redondeado al milisegundo más cercano DateInterval.Month m Mes; truncado al valor integral DateInterval.Quarter q Trimestre; truncado al valor integral DateInterval.Second s Segundo; redondeado al milisegundo más cercano DateInterval.Weekday w Día; truncado al valor integral DateInterval.WeekOfYear ww Semana; truncada al valor integral DateInterval.Year yyyy Año; 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 función DateAdd, se muestra la fecha

correspondiente un número especificado de meses en el futuro.

I.S.T.”Idat” 25 ASP.NET

Page 26: Manual ASP .Net

Aplicaciones Web

Dim Msg, Number, StartDate As String 'Declare variables.Dim Months As DoubleDim SecondDate As DateDim IntervalType As DateIntervalIntervalType = 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)

Aplicación con Datgrid pero sin conexión a BDD

Public Class WebForm3 Inherits System.Web.UI.Page+codigo GeneradoDim 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

I.S.T.”Idat” 26 ASP.NET

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

ValidationSummary .- Resumen de errores

Page 27: Manual ASP .Net

Aplicaciones Web

Dim m, mes As Integer 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 SubEnd Class

Aplicacion empleando Hipervínculos en un formulario

Se ingresa el código 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

Page 28: Manual ASP .Net

Aplicaciones Web

I.S.T.”Idat” 28 ASP.NET

Dar el encabezado para cada columna en columna enlzada

Y en columna Hipervínculo llamar al formularioFrmdetalle.aspx pasando el numero de orden={0}

Page 29: Manual ASP .Net

Aplicaciones Web

Formulario FRMDETALLE.ASPX

Codificación en el formulario FRMOrden.aspx

Imports System.Data.SqlClientPublic 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

+ Código generado por el Diseñador 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

Page 30: Manual ASP .Net

Aplicaciones Web

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

Codificación FRMDETALLE.ASPX pasando el numero de pedido (orden)

Codificación

Imports System.Data.SqlClientPublic 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 " Código generado por el Diseñador 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 código de usuario para inicializar la página 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

Page 31: Manual ASP .Net

Aplicaciones Web

End ClassAplicación Consulta en cascada .- en un DropDownList1 colocar los nombres de los clientes

(CompanyName) pero cuando se elige un cliente que acceda a su código CustomerId , mostrando

en DropDownList2 todos sus pedidos y al elegir un pedido que muestre el detalle de ese pedido

Imports System.Data.SqlClientPublic 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

+ " Código generado por el Diseñador 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 código de usuario para inicializar la página

I.S.T.”Idat” 31 ASP.NET

Controles empleados

DropDwonList2(para Clientes)

DropDownList1Para pedidos

Ambos colocar en la propiedad:AutoPostBack=TruePara que pueda seleccionarse

Un Datagrid1 y una etiquita LBtot

Page 32: Manual 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

Page 33: Manual 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 SubEnd 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 conexión es a traves de un proveedor, la aplicación

consiste en seleccionador un cliente desde un DropDwonList , ademas buscar el detalle pedido

del mayor monto.

Aspnet

I.S.T.”Idat” 33 ASP.NET

Page 34: Manual ASP .Net

Aplicaciones Web

Imports System.Data.SqlClientImports System.Data.OleDbImports 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 Código generado por el Diseñador 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 código de usuario para inicializar la página 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

Page 35: Manual 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

Page 36: Manual ASP .Net

Aplicaciones Web

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

Aplicación con Web Form Empleando la BDD Universidad

Adición y eliminación e datos sin emplear Store Procedure

Codificación.-

‘Autor : A. MorenoImports System.Data.SqlClientPublic 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+ Código generado por el Diseñador 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

Page 37: Manual ASP .Net

Aplicaciones Web

'Introducir aquí el código de usuario para inicializar la página 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

Page 38: Manual 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 SubEnd Class

Aplicación 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)asinsert into alumno values(@cod,@ape,@nom,@idesp,@pro)return

Para anularcreate Procedure SP_DELALU@COD CHAR(5)asdelete from alumno where idalumno=@codreturn

I.S.T.”Idat” 38 ASP.NET

Page 39: Manual ASP .Net

Aplicaciones Web

‘Autor: A. MorenoImports System.Data.OleDbImports System.TextPublic 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;SERVER=(LOCAL)")+ Código generado por el Diseñador de Web Forms "Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Introducir aquí el código de usuario para inicializar la página 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

Page 40: Manual 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

I.S.T.”Idat” 40 ASP.NET

Page 41: Manual ASP .Net

Aplicaciones Web

.CommandType = CommandType.StoredProcedure .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 SubEnd Class

I.S.T.”Idat” 41 ASP.NET

Page 42: Manual ASP .Net

Aplicaciones Web

Paginacion en un listado Cuando la lista de datos es muy grande es necesario hacer la paginación del listado

Imports System.DataImports System.Data.SqlClientPublic 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+ Código generado por el Diseñador 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

Page 43: Manual ASP .Net

Aplicaciones Web

End Class

I.S.T.”Idat” 43 ASP.NET

Page 44: Manual ASP .Net

Aplicaciones Web

Edición, y Eliminación de Registros en Línea

Editar registros significa cambiar el contenido de algunos de los campos o columnas por nueva

información o para corregir algún error de captura original o para agregar alguna columna que no

existía por modificación 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

edición a los renglones que muestra el dataset, estas columnas de edición traen sus propios

métodos, mismos que se pueden cargar con codigo para procesar

Instrucciones empleadas.-

Itemcommand Se produce cuando se hace clic en cualquier botón 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 información específica para el eventoPropiedad DescripciónCommandArgument (se hereda de CommandEventArgs)

Obtiene el argumento del comando.

CommandName (se hereda de CommandEventArgs)

Obtiene el nombre del comando.

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 colección 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 colección se llena automáticamente 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 actualización para la revisión de un

registro específico del origen de datos. El campo clave ayuda a la cadena de consulta de

actualización a identificar el registro apropiado que se debe modificar.

Para obtener más información sobre cómo obtener acceso a datos con ASP.NET, vea Acceso a

datos con ASP.NET.

I.S.T.”Idat” 44 ASP.NET

Page 45: Manual 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 colección

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

actualización para la revisión de un registro específico del origen de datos. El campo clave ayuda

a la cadena de consulta de actualización 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 información 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 código 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 cómo recuperar la descripción 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

Page 46: Manual 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

Edición y Modificación

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

I.S.T.”Idat” 46 ASP.NET

DataGrid.- con el nombre Grid DataKeyField: Cli_codigo, colocar en las cajas de textos : Txtncod, Txtnom, txtdireccion y txtruc

Page 47: Manual 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 instrucción 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 SqlConnectionDim Cmd as SqlCommandDim StrSql as StringSub Page_Load Cn=New SqlConnection("Server=(Local);Uid=Sa;Database=Bdfactura") if Not Page.Ispostback then EnlaceGrid End ifEnd 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

Page 48: Manual ASP .Net

Aplicaciones Web

Grid.datasource=Cmd.executeReader() Grid.databind() Cn.close() End SubSub Grid_Editar(s as Object,e as DatagridCommandEventArgs) Grid.EditItemIndex=e.Item.ItemIndex EnlaceGridEnd SubSub 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 SubSub Grid_Cancel(s as Object,e as DatagridCommandEventArgs) Grid.EditItemIndex=-1

EnlaceGridEnd SubSub 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

Page 49: Manual 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 Subpublic 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 Subpublic 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="" EnlaceGridEnd 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

Page 50: Manual 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></TABLE><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

Estas lineas agrege para asignar los eventos

Page 51: Manual 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 específico o la tecnología de

acceso a bases de datos.

Modelos de extracción e inserción

Con el fin de ofrecer el acceso a datos más flexible para los programadores, los controladores de

base de datos de Crystal Reports se han diseñado para proporcionar un modelo de extracción e

inserción de acceso a datos.

Modelo de extracción

En un modelo de extracción, el controlador se conectará a la base de datos y extraerá datos cuando se necesiten. Con este modelo, Crystal Reports controla tanto la conexión a la base de datos como el comando SQL que se ejecuta para obtener los datos y no necesita ninguna codificación del programador. Si no se escribe ningún código especial en tiempo de ejecución, se utiliza el modelo de extracción.Modelo de inserción

En comparación, el modelo de inserción necesita que el programador escriba código 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 método

le permite crear recursos compartidos de conexión en la aplicación y filtrar los datos antes de que

Crystal Reports los reciba.

Los controladores de bases de datos se utilizan durante el tiempo de creación y de

procesamiento.

I.S.T.”Idat” 51 ASP.NET

Page 52: Manual ASP .Net

Aplicaciones Web

Durante el tiempo de creación, 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 conexión a una base de datos y la selección de las tablas, vistas o procedimientos

almacenados para especificar el esquema. Con los controladores ADO.NET y de definición de

campos, este proceso implica la selección de un esquema con la forma de un archivo XML (*.xml)

o de un archivo de definición 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

Base de datos a las que se tiene acceso

Método de acceso a datos

OLEDB Cualquier base de datos que tenga un proveedor OLEDB.

Admite tanto la extracción de datos de la base de datos como la inserción de datos en el informe de un conjunto de registros ADO.

ODBC Cualquier base de datos que tenga un proveedor ODBC.

Admite tanto la extracción de datos de la base de datos como la inserción de datos en el informe de un conjunto de registros RDO.

Access/Excel Bases de datos de Microsoft Access y libros de Microsoft Excel.

Admite tanto la extracción de datos de la base de datos como la inserción de datos en el informe de un conjunto de registros DAO.

ADO.NET Cualquier base de datos con un proveedor gestionado.

Admite la inserción de datos en el informe desde un conjunto de datos ADO.NET.

Este controlador no extraerá datos por sí mismo.

Definición de campo

Ninguna.

Este controlador especial se utiliza para crear informes basados únicamente en un

El controlador se incluye principalmente para la compatibilidad con versiones anteriores y sólo se utiliza durante el proceso de creación

I.S.T.”Idat” 52 ASP.NET

Page 53: Manual ASP .Net

Aplicaciones Web

esquema sin datos reales.de informes.

En tiempo de ejecución, debe enviarse un conjunto de registros o un conjunto de datos a un informe creado con el controlador.

Objeto de datos Crystal (CDO)

Ninguna.

Este controlador especial obtiene acceso a datos que no residen en una base de datos tradicional.

Este controlador se incluye principalmente para la compatibilidad con versiones anteriores.

Este controlador sólo admite la inserción 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 período de creación del informe. Seleccione uno de los controladores disponibles para crearlo.

Crear un reporte

Independientemente de cómo se hará la presentación, el reporte se define en un archivo ".RPT",

que forma parte de su proyecto. Ese archivo especifica el modo en que se hará la presentación

del reporte, pero no incluye los datos propiamente dichos. Los datos se definirán en el tiempo de

ejecución.

Crystal Reports se basa en un concepto muy común de la definición de reportes: los reportes se

componen de "secciones", y cada sección es un espacio horizontal en la página. Existen diversos

tipos de secciones, por ejemplo:

I.S.T.”Idat” 53 ASP.NET

Page 54: Manual ASP .Net

Aplicaciones Web

Encabezado del reporte, aparece en la primera página.

Encabezado de página, aparece en la parte superior de todas las páginas.

Detalle: lo más importante. En el tiempo de ejecución, se genera una de estas secciones

para cada línea (registro) en la base de datos.

Pie de página, aparece en la parte inferior de todas las páginas.

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 más secciones, en caso de que no sean necesarias.

Acceder a la base de datos

Antes de crear el reporte, hay que decidir cuál 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 código.NET

"puro". En una aplicación.NET, probablemente sea deseable realizar el acceso a través de

ADO.NET. Para ello, lo más fácil es definir un Conjunto de datos tipificado, aun antes de crear el

reporte.

Un Reporte Sencillo en ASP Net

Creamos una Aplicación Web ASP .Net Nueva, para el ejemplo WebAPLIR1

I.S.T.”Idat” 54 ASP.NET

Page 55: Manual ASP .Net

Aplicaciones Web

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

RepProductos.rpt

I.S.T.”Idat” 55 ASP.NET

Page 56: Manual ASP .Net

Aplicaciones Web

en la ventana del Asistente del Registro del Producto, presionamos después, luego nos muestra la

siguiente ventana:

Asistente de Informes Estandar

En la ventana de Asistente de informe estándar, 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

Page 57: Manual ASP .Net

Aplicaciones Web

Presionamos siguiente y debemos configurar la siguiente ventana

Y presionamos Finalizar.

I.S.T.”Idat” 57 ASP.NET

Page 58: Manual 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

Page 59: Manual ASP .Net

Aplicaciones Web

Y para este ejemplo presionamos Finalizar, el cual nos mostrara el diseño del informe creado por

el asistente de Crystal Report

I.S.T.”Idat” 59 ASP.NET

Page 60: Manual 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 código 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 WithEnd Sub

Quedando el informe como la ventana siguiente:

I.S.T.”Idat” 60 ASP.NET

Page 61: Manual ASP .Net

Aplicaciones Web

Ahora para poder darle un poco mas de dinamismo al Reporte, vamos a filtrar según una

categoría, 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 diseño de la siguiente manera:

Control Propiedad Valor DropdownList ID ddlcategorias

AutoPostBack True

CrystalReportViewer ID CrVProductosDisplayGroupTree False

I.S.T.”Idat” 61 ASP.NET

Page 62: Manual ASP .Net

Aplicaciones Web

Finalmente el código para que funcione el filtro de productos por categoría seria:

Imports System.Data.SqlclientPublic 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 IfEnd Sub

Private Sub EnlaceReporte() With CrVProductos .ReportSource = Server.MapPath("RepProductos.rpt") .DataBind() End WithEnd SubPrivate 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 WithEnd 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 Categoría, 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

Page 63: Manual ASP .Net

Aplicaciones Web

'Volviendo a enlazar el origen de datos del reporte EnlaceReporte()End SubEnd Class

Finalmente el Reporte en ejecución al seleccionar una Categoría quedaria:

Web service

Los servicios Web XML se componen de dos partes: el punto de entrada al servicio Web XML y el

código 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 código de ensamblados precompilados, a un archivo de código subyacente o a un

código contenido en el propio archivo .asmx.

Nota   Si el código está contenido directamente en el archivo .asmx, ASP.NET lo compilará bajo

petición en el servidor.

La directiva de procesamiento WebService situada en la parte superior del archivo .asmx

determina dónde se buscará la implementación del servicio Web XML. De forma predeterminada,

Visual Studio utiliza archivos de código 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

Page 64: Manual ASP .Net

Aplicaciones Web

El atributo WebMethod se asocia a un método Public para indicar que se desea exponer dicho

método como parte del servicio Web XML. También se pueden utilizar las propiedades de este

atributo para configurar aún más el comportamiento del método 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 aplicación y de sesión. De forma predeterminada, los servicios Web XML creados en

código administrado con Visual Studio se heredan de esta clase. El servicio Web XML se puede

heredar de esta clase para obtener acceso a objetos intrínsecos de ASP.NET, como Request y

Session.

I.S.T.”Idat” 64 ASP.NET

Page 65: Manual ASP .Net

Aplicaciones Web

Aplicación .- Empleando la BDD universidad, realizar la siguiente consulta.-

Resultado Final:

Pasos para crear la aplicación

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

Controles:RequiredFieldValidatorConvierte el control de entrada asociado en un campo obligatorio.PropiedadesControltovalidate:Textbox1 (enlzar con el campo textbox1 del codigo)ErrorMessage:Campo ObligatorioValidationSummaryMuestra un resumen de todos los errores de validación en línea en una página Web, en un cuadro de mensaje o en ambos.

Page 66: Manual ASP .Net

Aplicaciones Web

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

b) para ver sus notas

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

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

I.S.T.”Idat” 66 ASP.NET

Page 67: Manual ASP .Net

Aplicaciones Web

Paso 3.- Codificar los metodos.‘Autor Alberto Moreno

Imports System.Web.ServicesImports 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=(local)") Dim Cmd As New OleDbCommand() Dim Pm As OleDbParameter+ Código generado por el Diseñador 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 líneas y, a continuación, guarde y genere el proyecto. ' Para probar este servicio Web, compruebe que la página 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

Page 68: Manual 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

Page 69: Manual 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

I.S.T.”Idat” 69 ASP.NET

Hacer Clic derecho en References Agregar Referencia WebY copiar la dirección anterior:Como se muestra en la siguiente figura.

Paso 6.- Agregar los formularios de trabajo , por ejemplo WebForm1 es el diseño de la boleta de nota donde se hace referencia al Web_service , Webalumnos.- Para el mantenimiento de la tabla alumnos.

Page 70: Manual ASP .Net

Aplicaciones Web

La codificación 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

+ Código generado por el Diseñador 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 código de usuario para inicializar la página 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

Page 71: Manual 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 SubEnd Class

Aplicación 2.- seleccionando en un combo DropDwonList1 una especialidad llenado desde un

servicio , que muestre todos los alumnos de es aespecialidad.

Codificación

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

DropDownList1.- En propiedades establecerAutopostBack =Truetrue si se produce una devolución de exposición automática cundo el usuario cambia la selección de la lista; de lo contrario, false. Dgalumno (Dtagrid)Lbnro la Etiqueta

Page 72: Manual 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

+" Código generado por el Diseñador 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

Page 73: Manual 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 código de este archivo y en la primera línea debemos agregar la clásica cadena que nos permita utilizar al proveedor de datos Sqlclient.

Imports System.Data.SqlClientImports 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 código que nos permita crear funciones y que nos devolvera los registros necesarios.

I.S.T.”Idat” 73 ASP.NET

Page 74: Manual 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 parámetroDim odap As New SqlDataAdapter( _"select productid,productname,unitprice,categoryid " & _" from products where categoryid=@codigo order by productname", ocn)

‘Creando el parámetro que utiliza la consulta SELECT del Obj. DataAdapterodap.SelectCommand.Parameters.Add("@codigo", SqlDbType.Int).Value = codcat

odst = New DataSet()

‘Llenamos el Obj. Dataset, con el resultado de las filas del DataAdapterodap.Fill(odst)Return odstEnd Function

I.S.T.”Idat” 74 ASP.NET

Page 75: Manual 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 odstEnd 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 función el cual nos devuelve de acuerdo a los valores enviados un archivo en formato XML

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

I.S.T.”Idat” 75 ASP.NET

Page 76: Manual ASP .Net

Aplicaciones Web

Lo importante aquí es la dirección 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 Aplicación Windows o una Aplicación Web

Aplicación Web

Creamos un nuevo Proyecto de Visual Basic de tipo de plantilla Aplicación Web ASP NET y le damos el nombre de: ClienteASPNet_WSNorthwind

Luego al formulario web le damos el nombre de WebCliente.aspx y su diseño será parecido a:

I.S.T.”Idat” 76 ASP.NET

Page 77: Manual ASP .Net

Aplicaciones Web

Luego sobre el explorador de soluciones, ubicamos la carpeta REFERENCES y hacemos clic derecho y seleccionamos la opción Agregar Referencia Web …, en el cual ingresaremos la cadena URL del Servicio Web Anterior (WSNorthwind) en el texto de Dirección, y presionamos el botón que tiene el símbolo de la flecha (color verde), si encuentra el servicio este aparecerá en la columna de la izquierda todos los métodos web declarados, para lo cual lo único que necesitaremos es presionar el botón Agregar referencia

I.S.T.”Idat” 77 ASP.NET

Page 78: Manual ASP .Net

Aplicaciones Web

Ahora solo quedaría ingresar el código 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 Automático (clic

derecho sobre el datagrid), así como también establecer una paginación adecuada (clic derecho

sobre el datagrid y escoger Generador de Propiedades y ubicarse en la ficha Paginación), para el

ejemplo se ha escogido Permitir paginación, Tamaño de Pagina: 5, en Posición: Superior e

Inferior, en Modo: números de Pagina

Codigo del formulario Web

I.S.T.”Idat” 78 ASP.NET

Page 79: Manual 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 código de usuario para inicializar la página 'Si la pagina se esta cargando por primera vez el codigo categoría 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 categoría seleccionada Call Cargar_Productos(xcat)End Sub

Sub Cargar_Categorias() 'Obteniendo el listado de categorías a través 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 WithEnd Sub

I.S.T.”Idat” 79 ASP.NET

Page 80: Manual ASP .Net

Aplicaciones Web

Sub Cargar_Productos(ByVal cat As Integer = 0) 'si no se ha seleccionado ninguna categoría que liste todos los productos If cat = 0 Then odst = obj.Listar_Productos Else 'SI NO Listar solo los que pertenezcan a la categoría 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 categoría del objeto ddlcategorias xcat = CInt(ddlcategorias.SelectedItem.Value) lblcat.Text = xcat.ToString

'Almacenando el codigo de categoría en la variable de session Session("codcat") = xcat Cargar_Productos(xcat)End Sub

I.S.T.”Idat” 80 ASP.NET

Page 81: Manual ASP .Net

Aplicaciones Web

Script Utilizado

Create Proc usp_lst_categoriasAsSelect * From categories Order By categorynameGo

Exec usp_lst_categoriasGo

ALGUNOS TRUCOS EN ASP .NET

Esta nota se centrará en responder algunas de las preguntas más frecuentes que surgen al

momento de comenzar a trabajar con ASP .NET.

I.S.T.”Idat” 81 ASP.NET

Page 82: Manual ASP .Net

Aplicaciones Web

No se harán grandes explicaciones técnicas, sino más bien, mostraremos código para resolver

algunos de los problemas más comunes con los que nos encontramos al momento de escribir una

aplicación, por ejemplo, cómo enviar un mensaje, cómo subir un archivo, cómo escribir en el Visor

de Eventos o cómo escribir un contador de Performance.

Así que vamos directamente a los temas:

¿Cómo enviar correo electrónico por medio de ASP .NET?

En el namespace System.Web.Mail encontramos la clase necesaria para el envío 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 página ASP.NET realizamos en envío del correo:

' Importamos el namespaceImports System.Web.Mail

Public Class EnviarMailInherits System.Web.UI.PageProtected 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 línea creamos el objeto mensaje:

Dim Mensaje As New MailMessage()

Además, como también 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 opción es incluir también 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 continuación a quien va dirigido el mensaje, el origen, el tema:

Mensaje.To = "[email protected]"Mensaje.From = "[email protected]"Mensaje.Subject = "Mensaje de Prueba"

En la línea a continuación se define el tipo del formato del cuerpo del mensaje, HTML o texto.

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

I.S.T.”Idat” 82 ASP.NET

Page 83: Manual ASP .Net

Aplicaciones Web

Se agrega el archivo adjunto a la lista de Attachments:

Mensaje.Attachments.Add(oAttach)

Y se envía el mensaje.

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

¿Cómo 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 codificación multipart/form-data, veamos el ejemplo:

La primera parte se compone de la página 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 botón para confirmar el envío:

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

Esta segunda parte comprende el código necesario para poder grabar el archivo enviado en el directorio correspondiente.

'Importamos System.IOImports System.IO

Public Class UploadInherits System.Web.UI.PageProtected WithEvents Mensaje As System.Web.UI.WebControls.LabelProtected WithEvents cmdEnviar As System.Web.UI.WebControls.ButtonProtected WithEvents File1 As System.Web.UI.HtmlControls.HtmlInputFile

I.S.T.”Idat” 83 ASP.NET

Page 84: Manual 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 anónimo 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>Tamaño: " & File1.PostedFile.ContentLength() & " bytes."

End Sub

¿Cómo escribir en el Visor de Eventos?

Una de la problemática más común, es la forma de como grabar información, ya sea de errores o

descripciones de eventos, etc. En Windows se cuenta con una herramienta, el Visor de Eventos,

que tiene varias características útiles como ser la posibilidad de hacer filtros por diferentes

condiciones o exportar esa información para ser tratada por otra herramienta.

Pero en general no se lo utiliza en los sistemas porque se mezcla con toda la información que

genera el propio sistema operativo, entonces muchas veces resulta confuso poder encontrar la

información que nos interesa.

En este ejemplo veremos de qué forma podemos crear una nueva sección 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 sección en el Visor de Eventos, en caso contrario es

creada:

'Creo la entrada si no existeIf Not System.Diagnostics.EventLog.SourceExists("MiFuente","NombreMaquina) ThenSystem.Diagnostics.EventLog.CreateEventSource("MiFuente", "NombreDelLog", "NombreMaquina")End If

I.S.T.”Idat” 84 ASP.NET

Page 85: Manual ASP .Net

Aplicaciones Web

Importante: de acuerdo a la configuración de seguridad definida en la aplicación ASP.NET es

probable que un usuario anónimo o no tenga los permisos necesarios y no pueda ejecutar el

código necesario para crear la sección en el Visor de Eventos o escribir en él. Es conveniente

para crear la sección impersonar un usuario que si tenga esos permisos.

En este punto declaramos el objeto "log", definimos en que sección 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 información.

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 método WriteEntry permite diferentes alternativas, en este ejemplo hemos utilizado una de las

mas simples, pero se pueden ingresar otros parámetros como: categoría, Id del evento, etc.

Para finalizar con este punto, también se puede decir que hay un método

Log.Delete(NombreDeLog) que permite también borrar completamente una sección en el Visor

de Eventos.

¿Cómo crear un contador de Performance?

Una opción muy interesante es la de poder crear contadores para el Monitor de Performance y

actualizarlos de acuerdo a alguna particularidad que sea de interés. Por ejemplo, puede interesar

ver la carga que tiene una determinada página o un determinado componente.

En el ejemplo siguiente se verán cuáles son los pasos necesarios para realizar estas operaciones.

El PerformanceCounter se encuentra en el namespace System.Diagnotics.

Imports System.Diagnostics

Public Class PerfMonInherits 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 PerformanceCounterDim NombreContador As String = "Ejemplo"

I.S.T.”Idat” 85 ASP.NET

Page 86: Manual ASP .Net

Aplicaciones Web

Dim NombreCategoria As String = "DevDays"

En el caso de que no exista la categoría 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 operación. Una alternativa es la de tener

creado previamente el contador y la categoría.

'Creo la Categoría y el ContadorIf Not PerformanceCounterCategory.CounterExists(NombreContador, NombreCategoria) ThenPerformanceCounterCategory.Create(NombreCategoria, "Descripción de la categoría", _

NombreContador, "Descripción del Tipo de Contador")End If

Se abre el contador de una determinada Categoría, él ultimo parámetro (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

también 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 más preguntas generan, y también se

puede observar de que manera el Framework .NET ha facilitado estas tareas que en casos

anteriores eran complicadas de implementar y requería conocimientos profundos sobre el API de

Windows.

CÓMO CREAR Y LEER CONTROLES DINÁMICAMENTE EN ASP .NET

En este artículo se muestra como crear controles dinámicamente, almacenarlos en contenedores

de controles y posteriormente obtener la información que se ha ingresado en ellos.

En el ejemplo de este artículo se utilizan los controles de uso típico, cuando se lee información

de una base de datos. Estos controles son, en la mayoría de los casos, los botones radiales

(RadioButton), cajas de selección (CheckBox), cajas de texto (TextBox) y las listas de selección

(DropDownList).

I.S.T.”Idat” 86 ASP.NET

Page 87: Manual ASP .Net

Aplicaciones Web

Además se utilizarán 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 codificación directa en la página ASPX, realizándose en código

subyacente (codebehind) de la página ASPX creada.

Mas información de código subyacente se puede encontrar en el artículo E303247.

Contenido

Cuando se necesita construir un editor de los valores almacenadas en

una base de datos, específicamente en una tabla, la cantidad de

registros contenidos en esta no es conocida de antemano. Por este mismo motivo, no se

puede diseñar una página con los controles creados con antelación, sino que deben ser creados

dinámicamente adecuándose a las necesidades.

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

controles. Se podrá encontrar más información de ésta propiedad en el documento Estado de los

controles de ASP.NET: Al rescate de los programadores.

Creación de controles

Los controles que se utilizarán en el ejemplo son los que tradicionalmente se encuentran en

cualquier página html, como las cajas de texto, botones radiales, listas de selección y cajas de

selección.

Estos controles serán 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 utilizarán como contenedores son las siguientes

Panel

PlaceHolder

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

Al final del documento se encontrarán links a las definiciones de todos los controles utilizados en el ejercicio.

Representación en html de los contenedores

I.S.T.”Idat” 87 ASP.NET

Page 88: Manual 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 gráfico, alineamiento, estilos, etc. Para el PlaceHolder, las únicas

propiedades en tiempo de diseño son Visible y EnableViewState, ambas también 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 sólo es posible definir el orden dentro del contenedor, pero no una

posición específica en la página. Si se quiere un despliegue mas acabado, es recomendable la

utilización de tablas, definiendo las filas y columnas donde serán agregados los controles.

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

función Add de la colección de controles Controls.

‘Los objetos objPanel y objPlaceHolder están creados en la página en tiempo de diseño

‘El objeto objControl, es cualquier tipo de control.

objPanel.Controls.Add(objControl)

objPlaceHolder.Controls.Add(objControl)

Adicionalmente a la función Add existe la función AddAt que permite agregar un control en

alguna posición 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 definición, una tabla esta compuesta por una o muchas filas y cada fila esta

compuesta por una o muchas celdas.

La inserción de controles en una tabla se realiza a través de la función Add de la colección de

controles Controls de la celda.

I.S.T.”Idat” 88 ASP.NET

Page 89: Manual ASP .Net

Aplicaciones Web

‘El objeto objTable está creado en la página aspx en tiempo de diseño.

‘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 página

Adicionalmente a la función Add existe la función AddAt que permite agregar un control en

alguna posición en especial dentro del contenedor.

objCell.Controls.AddAt(intPos, objControl)

En la práctica

La aplicación constará de dos formularios, el primero con controles de texto y listas de selección,

y el segundo con botones radiales y cajas de selección.

Para esto es necesario iniciar una aplicación de tipo ASP.NET Web Application.

I.S.T.”Idat” 89 ASP.NET

Page 90: Manual ASP .Net

Aplicaciones Web

Una vez creada la aplicación, se puede utilizar el archivo WebForm1.aspx creado inicialmente o generar otro con la opción Add Web Form del menú del proyecto.

I.S.T.”Idat” 90 ASP.NET

Page 91: Manual ASP .Net

Aplicaciones Web

Primer Formulario

En el primer formulario se permitirá la edición de los valores desde una tabla de categorías,

permitiendo modificar el nombre de la categoría y el acceso. El nombre se escribirá en campos de

texto y el tipo de acceso en listas de selección.

Después de ingresar los controles, la pantalla de pruebas quedará de la siguiente forma.

I.S.T.”Idat” 91 ASP.NET

Page 92: Manual ASP .Net

Aplicaciones Web

Los controles creados en esta página son los siguientes:

Tabla ASPX donde se almacenarán los controles dinámicos (representada por ###)

Botón Jerarquía

Botón Form.Keys

Label de despliegue del resultado de la grabación

Se utilizarán dos botones ya que se mostrarán dos formas de recorrer los controles de una

página. La de jerarquía corresponde a la navegación a través de los controles anidados y la de las

llaves (keys), de la colección request.form.

Si bien no existe una jerarquía real de controles, estos se pueden recorrer como si así fuera, ya

que dentro de la página hay un formulario, dentro del formulario están la tabla aspx y los botones.

A su vez, dentro de la tabla aspx existen las filas y dentro de cada fila están las celdas. Por último,

en las celdas están los controles de texto y listas de selección.

Creación de los controles

I.S.T.”Idat” 92 ASP.NET

Page 93: Manual ASP .Net

Aplicaciones Web

En el evento Page_Load se cargan los controles dentro de la tabla. El código para lograr esto se

muestra en las siguientes secciones de código, separadas por partes. A todo control que se

quiera identificar después 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. categoría"objRow.Cells.Add(objCell)

objCell = New TableCell()objCell.Text = "Nombre categoría"objRow.Cells.Add(objCell)

objCell = New TableCell()objCell.Text = "Utilización"objRow.Cells.Add(objCell)

tblCategorias.Rows.Add(objRow)

La tabla tblCategorias está creada en tiempo de diseño. En este código, se crea el encabezado de

ésta. Primero se crea la fila de la tabla con la instrucción New TableRow(), después se crea cada

celda con la instrucción 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 instrucción tblCategorias.Rows.Add(objRow).

Para la creación de las filas y columnas con la información, se utiliza un DataReader (almacenado

en objRs) de una base de datos en Access. El ciclo que crea las demás filas y columnas es el

siguiente:

While objRs.Read

I.S.T.”Idat” 93 ASP.NET

Page 94: Manual 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 información extraída de la base de datos, está en tres columnas.

codigo : identifica a la categoría

I.S.T.”Idat” 94 ASP.NET

Page 95: Manual ASP .Net

Aplicaciones Web

descripcion : la descripción misma de la categoría

acceso : el acceso a ésta (privado, público y ambos)

La página que se construye es de la siguiente forma:

El código de la categoría es desplegado en la primera columna, el texto en la segunda y por

último, en la tercera se genera una lista de selección con las distintas opciones de acceso. En la

base de datos, el valor almacenado del acceso es 1, 2 ó 3 para las opciones Pública, Privada o

Ambas, respectivamente.

Como se mencionó antes, cuando el usuario presione grabar, es necesario identificar los

controles individualmente. Por esta razón 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 código

de la categoría en la base de datos. Para las listas de selección, el nombre asignado es "acceso-"

& codigo. Si se observa el código origen de la página HTML generada, se puede constatar el

resultado de esto:

I.S.T.”Idat” 95 ASP.NET

Page 96: Manual ASP .Net

Aplicaciones Web

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

cantidad de cajas de texto y listas de selección, con los nombres acceso-1 hasta acceso-N y

categ-1 hasta categ-N.

Lectura de los controles utilizando la jerarquía de navegación.

Al presionar el botón jerarquía, se graban los valores en la tabla, produciéndose el siguiente

resultado:

I.S.T.”Idat” 96 ASP.NET

Page 97: Manual ASP .Net

Aplicaciones Web

El código del botón jerarquía 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 LongDim objCeldaDescripcion As TableCellDim objCeldaAcceso As TableCell

Dim objDescripcion As TextBox

Dim objAcceso As DropDownListDim lngAcceso As Long

lblResultado.Text = "GRABADO UTILIZANDO NAVEGACION SOBRE CONTROLES<br><br>"

I.S.T.”Idat” 97 ASP.NET

Page 98: Manual ASP .Net

Aplicaciones Web

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

'Id., Descripción y Acceso, desde la número 1 ya están los textboxs

For i = 1 To tblCategorias.Rows.Count – 1'la celda 0 es la del ID, la 1 la de la descripción y la

2 del accesoobjCeldaDescripcion = 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 tablaobjDescripcion = objCeldaDescripcion.Controls(0)objAcceso = objCeldaAcceso.Controls(0)

If Left(objDescripcion.ID, 5) = "categ" ThenstrNombre = objDescripcion.TextlngCodigo = CLng(Split(objDescripcion.ID,

"-").GetValue(1))lngAcceso = objAcceso.SelectedItem.ValueGrabarCategoria(lngCodigo, strNombre, lngAcceso)

End If

Next

End Sub

En el evento del botón se realiza un ciclo por todas las filas de la tabla tblCategorias, creada en

tiempo de diseño. Se comienza de la fila 1 ya que en la 0 están los textos de encabezado de la

tabla. El ciclo termina naturalmente en Count-1.

En cada ciclo se obtienen las celdas donde están los controles. Con la instrucción

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 también comienzan desde 0 y

van hasta Count-1, pero como en la primera está el id de la categoría, 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

Page 99: Manual ASP .Net

Aplicaciones Web

2 y 3 (con el nombre y el acceso). Sólo se deben buscar los controles dentro de cada celda para

obtener lo que el usuario ha ingresado.

El primer control es el número 0 (y se sabe que no hay más), que se carga en objDescripcion,

variable de tipo TextBox, con la instrucción objDescripcion = objCeldaDescripcion.Controls(0).

Lo mismo se hace para la lista de selección de accesos, con la instrucción objAcceso =

objCeldaAcceso.Controls(0).

Ya se tiene entonces los controles donde el usuario hizo los cambios. Ahora, se debe identificar a

que categoría corresponde. El identificador de la categoría se había almacenado junto al nombre

de la caja de texto y de la lista de selección con el formato "categ-" & codigo, en la propiedad ID.

Entonces, en la variable lngCodigo se almacena el código de la categoría. Para esto, se utiliza la

instrucción lngCodigo = CLng(Split(objDescripcion.ID, "-").GetValue(1)). Lo que hace esta

línea es mas simple de lo que aparenta. El la propiedad ID de objDescripcion está el texto con

"categ-1". Con la función Split, se divide una frase o palabra, con algún carácter. En este caso, el

carácter es "-"., y al dividir “categ-1” con “-“, se generan 2 palabras. Una es “categ” y la otra es “1”.

Con la instrucción GetValue se obtiene la palabra deseada, siendo 0 la primera (“categ”) y 1 la

segunda (“1”). Finalizando, la palabra “1” es convertida en un número Long y almacenada en la

variable lngCodigo. Obviamente, en cada iteración del For, irá cambiando el valor de la segunda

palabra del Split, con el número del identificador de la categoría.

Anteriormente se había almacenado en la variable strNombre el texto de la descripción. En la

variable lngAcceso se carga el valor de la selección que ha hecho el usuario con respecto al

acceso de la categoría.

Por último, se llama a una función GrabarCategoria, que graba los valores en la base de datos.

Lectura de los controles utilizando la colección request.form.keys.

Al presionar el botón form.keys, se graban los valores en la tabla, produciéndose el siguiente

resultado:

I.S.T.”Idat” 99 ASP.NET

Page 100: Manual ASP .Net

Aplicaciones Web

El código del botón Form.Keys es el siguiente, bastante más 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

Page 101: Manual 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 colección Keys del objeto Request.Form, no se pueden

obtener los controles, sino que la información 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 página al momento de presionar el botón 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 código de la categoría, con la instrucción lngCodigo = CLng(Split(objKey,

"-").GetValue(1)). La explicación de esta línea es idéntica al caso anterior.

Posteriormente se almacena en la variable strNombre el texto de la descripción. 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 selección que ha hecho el usuario con respecto al

acceso de la categoría, utilizando también Request.Form, pero solicitando el campo “acceso-“ y el

código de la categoría, 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 función GrabarCategoria, que graba los valores en la base de datos.

I.S.T.”Idat” 101 ASP.NET

Page 102: Manual ASP .Net

Aplicaciones Web

A continuación se utilizarán cajas de selección y botones radiales. Para esos casos, es casi

trasparente el uso para el programador.

Segundo Formulario

En el segundo formulario se permitirá la selección de los valores de la tabla de categorías, en

listas de selección y botones radiales.

Después de ingresar los controles, la pantalla de pruebas quedará de la siguiente forma:

Los controles creados en esta página son los siguientes:

CheckBoxList para la lista de cajas de selección

RadioButtonList para la lista de botones radiales

Botón Aceptar que despliega las selecciones del usuario

Label de despliegue del resultado de la selección

Creación de los controles

I.S.T.”Idat” 102 ASP.NET

Page 103: Manual 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 código para lograr esto se despliega a continuación. 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 están pobladas. El resultado de esto se despliega en la siguiente pantalla:

Se pueden hacer algunas selecciones y presionar el botón Aceptar.

I.S.T.”Idat” 103 ASP.NET

Page 104: Manual ASP .Net

Aplicaciones Web

El código detrás del botón 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

Page 105: Manual 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 NINGÚN ÍTEM"

End Try

Para la lista de cajas de selección se debe recorrer verificando si cada elemento está o no

seleccionado. Al igual que los demás 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 categoría, Text con el nombre de la categoría y

Selected, que retorna verdadero o falso si está seleccionado. ListItem tiene una gran cantidad de

propiedades, pero sólo se han destacado las necesarias en este caso.

Durante el ciclo, se comprueba que esté seleccionada, y en caso positivo, se obtiene el código y

el nombre.

Para los botones radiales, es mas simple aún, pero se debe tener en cuenta un condición

especial.

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

ningún elemento seleccionado, lo anterior es NULO y se genera un error si se trata de acceder

directamente. En caso que haya algún elemento seleccionado, tanto el identificador como el

nombre de la categoría 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 excepción sea por error de NULO (NullReferenceException).

Conclusiones

La utilización de controles dinámicos permite construir pantallas más completas y poderosas.

Lamentablemente no siempre es simple de construir.

I.S.T.”Idat” 105 ASP.NET

Page 106: Manual ASP .Net

Aplicaciones Web

Para los controles RadioButtonList y CheckBoxList de ASP.NET, su utilización se ha simplificado

al máximo. Con algunas líneas de código se pueden crear y leer los controles rápidamente.

Para las listas de selección y cajas de texto, se complica el funcionamiento. Existen varias formas

de hacer lo mismo del primer formulario, de diversa complejidad, y la opción queda abierta al

programador a encontrar la forma que más le acomode a su trabajo. A su vez, la lectura de los

controles, las opciones presentadas son las más utilizadas, pudiendo encontrar algunas variantes

sobre la segunda. Ambas tienen sus ventajas y desventajas.

La jerarquía de controles es más 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 algún otro control con el nombre “categorías”, por ejemplo, al aplicar la función 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 más le acomode, o buscar variaciones

de estas.

Referencias

Las definiciones de los controles (en inglés) se pueden encontrar en los siguientes artículos

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, métodos y definiciones (en inglés)

Try…Catch…Finally Statements Split Function GetValue Method

VIII BIBLIOGRAFÍA: CHARTE Francisco Programación con Visual Net

Edit. ANAYA España 2001

I.S.T.”Idat” 106 ASP.NET

Page 107: Manual ASP .Net

Aplicaciones Web

CHARTE Francisco Programación con Visual Net (Programación de Bases de Datos )

Edit. ANAYA España 2002

EVANGELUS Petroulsos Visual Basic Net Editorial Anaya, Madrid 2002

MICROSOFT Manual del Programador 6.0 Editorial Mac Graw Hill México 1999

CEVALLOS fco. Javier Programación Visual Basic 6.0 Editorial Rama Madrid 2000

Direcciones Web

http://www.godot.net http://www.manualesgratis.comhttp://www.microsoft.comhttp://www.microsoft.com/spanish/msdn/articulos/archivo/040403/voices/treeview.asp#TreeView_Referenceshttp://www.microsoft.eshttp://www.guille.costasol.nethttp://www.programacion.net/cursoshttp://www.willydev.net/DesktopDefault.Aspxhttp://es.gotdotnet.com/quickstart/aspplus/doc/ecommerceapp.aspxhttp://www.microsoft.com/spanish/msdn/comunidad/mtj.net/voices/art185.asp

I.S.T.”Idat” 107 ASP.NET