Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Taller de ASP.NET Autores del manual Este manual ha sido realizado por los siguientes colaboradores de DesarrolloWeb.com: Pol Salvat Miguel Angel Alvarez Clikear.com http://www.mistrucos.net (6 capítulos) Director de DesarrolloWeb.com http://www.desarrolloweb.com (2 capítulos) http://www.clikear.com (1 capítulo) Taller de ASP.NET: www.desarrolloweb.com/manuales/taller-asp-net.html © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización. 1 Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Introducción al taller de ASP.NET Comenzamos un nuevo taller, donde vamos a publicar artículos prácticos sobre ASP.NET, es decir, sobre la plataforma .NET enfocada a la creación de páginas dinámicas de servidor. Como otros talleres de DesarrolloWeb.com, este manual no sigue un guión estricto ni sus capítulos tienen porque leerse en orden. Al revés, cada artículo es independiente de los otros y pueden leerse por separado. Salvo posibles excepciones debidas a que podamos partir un taller complicado en varios artículos para su mejor comprensión. En este taller no se ofrecen los conceptos básicos de .NET, sino que se publicarán artículos para los cuales se supone que el lector debe conocer de antemano la plataforma .NET, sus usos y modos de trabajo propios. Tenemos en DesarrolloWeb.com otras referencias a ASP.NET que serán muy interesantes de cara a conseguir la base necesaria para acceder a este manual. Categoría .NET dentro de nuestro directorio: en este lugar encontraremos todos los contenidos de DesarrolloWeb.com que tienen relación con .NET, así como enlaces a páginas externas en las que se trata exclusivamente esta plataforma. Manual de .NET: Introducción a la plataforma .NET, con los conceptos más básicos para empezar a entender esta tecnología para el desarrollo de aplicaciones web dinámicas. Servicios Web en .NET: Un manual que trata sobre la creación de servicios web (web services) utilizando ASP.NET. Diferencias entre ASP y .NET: Un pequeño manual que sirve para las personas que conocen ASP y quieren saber en qué se diferencia de su evolución ASP.NET. También queremos recordar que tenemos una sección de Scripts ASP.NET listos para usar, donde se puede acceder a una clasificación de aplicaciones web ordenadas por distintas temáticas. También tenemos algunas FAQ sobre .NET que pueden ser de interés. Pues nada más, sin más introducciones os dejamos con el Taller de ASP.NET. Artículo por Miguel Angel Alvarez Implementar código de Seguridad anti robots en ASP.NET Para crear un código de seguridad seguiremos los siguientes pasos: Tenemos que agregar en el formulario que deseamos insertar el código de seguridad los siguientes controles: • • Una imagen (dónde su scr será /AntiRobots.aspx) Un input de tipo texto, con un id= type= frm_Codigo_Seguridad En el código VB de la página del registro declararemos una variable llamada bAntiBots #Region "Members" Dim bAntiBots As Boolean = False #End Region Taller de ASP.NET: www.desarrolloweb.com/manuales/taller-asp-net.html © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización. 2 Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com En el Page_Load: If Not IsPostBack Then Session("AntiBots") = GenerateRandomCode() Else 'Comprobamos el código antibots If frm_Codigo_Seguridad.Value = Session("AntiBots").ToString() Then bAntiBots = True Else bAntiBots = False Me.Session("AntiBots") = GenerateRandomCode() End If End If Tenemos que crear la función GenerateRandomCode para generar un código de seguridad al azar #Region "GenerateRandomCode" Private Function GenerateRandomCode() As String Dim random As New Random Dim s As String = "" Dim i As Int32 = 0 Dim iChr As Int32 While (i <; 6) iChr = random.Next(48, 90) While iChr >; 57 And iChr <; 65 iChr = random.Next(48, 90) End While s = String.Concat(s, Chr(iChr).ToString()) i=i+1 End While Return s End Function #End Region Para seguir, nos faltará crear la clase encargada de crear, manipular y deformar el código de seguridad generado en imagen Imports Imports Imports Imports Imports System System.Drawing System.Drawing.Drawing2D System.Drawing.Imaging System.Drawing.Text Public Class ImagenAntiBots Dim m_text As String Dim m_width As Int32 Dim m_height As Int32 Dim m_familyName As String Dim m_image As Bitmap Dim m_random As New Random #Region "Propiedades de lectura" Public ReadOnly Property Text() As String Get Return m_text End Get End Property Public ReadOnly Property Width() As Int32 Taller de ASP.NET: www.desarrolloweb.com/manuales/taller-asp-net.html © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización. 3 Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Get Return m_width End Get End Property Public ReadOnly Property Height() As Int32 Get Return m_height End Get End Property Public ReadOnly Property Image() As Bitmap Get Return m_image End Get End Property #End Region Public Sub New(ByVal s As String, ByVal width As Int32, ByVal height As Int32) Me.m_text = s Me.SetDimensions(width, height) Me.GenerateImage() End Sub Public Sub New(ByVal s As String, ByVal width As Int32, ByVal height As Int32, ByVal familyName As String) Me.m_text = s Me.SetDimensions(width, height) Me.SetFamilyName(familyName) Me.GenerateImage() End Sub Private Sub SetDimensions(ByVal width As Int32, ByVal height As Int32) If width <;= 0 Then Throw New ArgumentOutOfRangeException("width", width, "Argument out of range, must be greater than zero.") End If If (height <;= 0) Then Throw New ArgumentOutOfRangeException("height", height, "Argument out of range, must be greater than zero.") End If Me.m_width = width Me.m_height = height End Sub Private Sub SetFamilyName(ByVal familyName As String) Try Dim font As Font = New Font(familyName, 12.0F) Me.m_familyName = familyName font.Dispose() Catch ex As Exception Me.m_familyName = System.Drawing.FontFamily.GenericSerif.Name End Try End Sub Private Sub GenerateImage() Dim bitmap As New Bitmap(Me.m_width, Me.m_height, PixelFormat.Format32bppArgb) 'Creamos objeto grafico Dim g As Graphics = Graphics.FromImage(bitmap) g.SmoothingMode = SmoothingMode.AntiAlias Dim rect As New RectangleF(0, 0, Me.m_width, Me.m_height) Taller de ASP.NET: www.desarrolloweb.com/manuales/taller-asp-net.html © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización. 4 Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 'Rellenamos el fondo Dim hatchBrush As New HatchBrush(HatchStyle.SmallConfetti, Color.LightGray, Color.White) g.FillRectangle(hatchBrush, rect) 'Establecemos la fuente Dim size As SizeF Dim fontSize As Single = rect.Height + 1 Dim font As Font 'Ajusta el tamaño de la fuente Do fontSize = fontSize - 1 font = New Font(Me.m_familyName, fontSize, FontStyle.Bold) size = g.MeasureString(Me.m_text, font) Loop While (size.Width >; rect.Width) 'Establece el formato de texto Dim format As New StringFormat format.Alignment = StringAlignment.Center format.LineAlignment = StringAlignment.Center Dim path As New GraphicsPath path.AddString(Me.m_text, font.FontFamily, CType(font.Style, Int32), font.Size, rect, format) Dim v As Single = 4.0F Dim points As System.Drawing.PointF() = { _ New System.Drawing.PointF(m_random.Next(CType(rect.Width, Integer)) / v, m_random.Next(CType(rect.Height, Integer)) / v), _ New System.Drawing.PointF(rect.Width - m_random.Next(CType(rect.Width, Integer)) / v, m_random.Next(CType(rect.Height, Integer)) / v), _ New System.Drawing.PointF(m_random.Next(CType(rect.Width, Integer)) / v, rect.Height m_random.Next(CType(rect.Height, Integer)) / v), _ New System.Drawing.PointF(rect.Width - m_random.Next(CType(rect.Width, Integer)) / v, rect.Height m_random.Next(CType(rect.Height, Integer)) / v)} Dim matrix As New Matrix matrix.Translate(1, 3) 'Deformamos la imagen path.Warp(points, rect, matrix, 0) 'Dibuja el texto hatchBrush = New HatchBrush(HatchStyle.OutlinedDiamond, Color.Orange, Color.BlueViolet) g.FillPath(hatchBrush, path) 'Añade efectos Dim m As Int32 = Math.Max(CType(rect.Width, Integer), CType(rect.Height, Integer)) Dim i As Int32 = 0 While i <; CType((rect.Width * rect.Height / 30.0F), Int32) Dim x As Int32 = m_random.Next(CType(rect.Width, Integer)) Dim y As Int32 = m_random.Next(CType(rect.Height, Integer)) Dim w As Int32 = m_random.Next(CType(m / 50, Integer)) Dim h As Int32 = m_random.Next(CType(m / 50, Integer)) g.FillEllipse(hatchBrush, x, y, w, h) i=i+1 End While font.Dispose() hatchBrush.Dispose() g.Dispose() 'Establece la imagen Me.m_image = bitmap End Sub Taller de ASP.NET: www.desarrolloweb.com/manuales/taller-asp-net.html © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización. 5 Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com End Class Ahora en el proyecto crearemos la página que apunta nuestra imagen (el primer control que hemos agregado en el proyecto, y en el Page_Load pondremos este código: Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Creamos una imagen creando el texto guardado en la sesion Dim ab As New ImagenAntiBots(Session("AntiBots").ToString(), 200, 50, "Arial") 'Cambiamos la respuesta al cliente a tipo "imagen/jpeg" Me.Response.Clear() Me.Response.ContentType = "image/jpeg" 'Salvamos la imagen en el Response ab.Image.Save(Me.Response.OutputStream, ImageFormat.Jpeg) End Sub Y para terminar, en el formulario del registro, dónde hemos agregado los controles, en el botón del submit, utilizar esta condición: If bAntiBots Then ' Creamos el registro Else ' El código de seguridad no está bien colocado End if Puedes descargarte todo el código fuente de pulsando aquí. Artículo por Pol Salvat Modificar la ubicación del Viewstate en las páginas ASP .NET Gracias a esta función podremos ubicar el viewstate al final de las páginas. Colocar el viewstate al final de una página asp.net puede ser útil para optimizaciones para buscadores (para poner al final el viewstate que su contenido para un buscador no tiene sentido), agilizar la carga de la página... Código en Visual Basic.Net Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter) Dim stringWriter As System.IO.StringWriter = New System.IO.StringWriter Dim htmlWriter As HtmlTextWriter = New HtmlTextWriter(stringWriter) MyBase.Render(htmlWriter) Dim html As String = stringWriter.toString() Dim StartPoint As Integer = html.IndexOf("<;input type=""hidden"" name=""__VIEWSTATE""") If StartPoint >;= 0 Then 'does __viewstate exist? Taller de ASP.NET: www.desarrolloweb.com/manuales/taller-asp-net.html © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización. 6 Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Dim EndPoint As Integer = html.IndexOf("/>;", StartPoint) + 2 Dim viewstateInput As String = html.Substring(StartPoint, EndPoint - StartPoint) html = html.Remove(StartPoint, EndPoint - StartPoint) Dim FormEndStart As Integer = html.IndexOf("<;/form>;") - 1 If FormEndStart >;= 0 Then html = html.Insert(FormEndStart, viewstateInput) End If End If writer.Write(html) End Sub Código en C# protected override void Render(System.Web.UI.HtmlTextWriter writer) { System.IO.StringWriter stringWriter = new System.IO.StringWriter(); HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter); base.Render(htmlWriter); string html = stringWriter.ToString(); int startPoint = html.IndexOf("<;input type=\"hidden\" name=\"__VIEWSTATE\""); if (startPoint >;= 0){ int endPoint = html.IndexOf("/>;", startPoint) + 2; string viewstateInput = html.Substring(startPoint, endPoint - startPoint); html = html.Remove(etartPoint, endPoint - startPoint); int formEndStart = html.IndexOf("<;/form>;"); if (formEndStart >;= 0){ html = html.Insert(formEndStart, "\n" + viewstateInput);}} writer.Write(html);} Artículo por Pol Salvat Dar formato a un datagrid en el ItemDataBound ASP.NET Para poder formatear una grid mientras se carga accedemos con el ItemDataBound. Lo primero que realizaremos es añadir un handles cuando el grid se haya cargado: Taller de ASP.NET: www.desarrolloweb.com/manuales/taller-asp-net.html © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización. 7 Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com AddHandler NombreGrid.Grid.ItemDataBound, AddressOf ItemDataBound Crearemos una función: Private Sub ItemDataBound(ByVal sender As System.Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) End Sub Dentro de la función, para acceder a cada celda podremos utilizar el e.Item.Cells(NumeroDeCelda).Text= "Lo que queramos" Como ejemplos que podemos formatar: e.item.Cells(0).Text = strImg.ToString e.item.Cells(0).HorizontalAlign = HorizontalAlign.Center e.item.Cells(0).VerticalAlign = VerticalAlign.Top e.item.Cells(0).Width = Unit.Pixel(30) e.item.Cells(0).visible=False Podemos utilizar el with para no tener que escribir todo el rato e.item: With e.Item .Cells(0).Text = strImg.ToString .Cells(0).HorizontalAlign = HorizontalAlign.Center .Cells(0).VerticalAlign = VerticalAlign.Top .Cells(0).Width = Unit.Pixel(30) .Cells(0).visible=False End with Para acabar, hay que comentar que una fila de un grid puede ser de la cabecera o no. Si es cabecera: If e.Item.ItemType = ListItemType.Header Then Si es un elemento normal: If e.Item.ItemType = ListItemType.AlternatingItem Or e.Item.ItemType = ListItemType.Item Then Artículo por Pol Salvat Dot Net Nuke, sistema portal en ASP.NET Mucha gente conocerá PHP Nuke, un sistema para crear un portal fácilmente en PHP y con base de datos MySQL. Vamos a presentar ahora un sistema para hacer un portal en ASP.NET un poco más desconocido, aunque la potencia y desarrollo del programa indican que es totalmente válido y muy interesante para lanzarse rápidamente al mundo editorial en la web. DotNetNuke es un sistema para hacer páginas web de tipo portal. Incluye un parte pública, a la que acceden los visitantes -el propio portal- y una privada, a la que acceden los administradores de la página, para editar los contenidos de la parte pública. Características del programa Taller de ASP.NET: www.desarrolloweb.com/manuales/taller-asp-net.html © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización. 8 Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Ante todo es importante hablar de la gratuidad del software. En contra de lo que muchas veces ocurre con los sistemas Microsoft, podemos utilizar libremente este programa para cualquier propósito. Podemos modificarlo, redistribuirlo o, incluso, venderlo o prestar soporte técnico. La única condición es que debemos mencionar la procedencia del software, en la página o el código HTML. DotNetNuke tiene muchas posibilidades, algunas de ellas auténticamente interesantes. Entre ellas podemos encontrar: • • • • • • • • • Creación de múltiples portales utilizando un mismo código y base de datos, lo que significa que se pueden crear varios sitios utilizando un mismo alojamiento que soporte ASP.NET. Registro de usuarios y completa personalización del portal dependiendo del tipo de usuario. Posibilidad de crear servicios o contenidos de acceso restringido, con enlace directo a métodos de pago para los usuarios que deseen acceder a esos servicios. Acceso de administrador para gestionar los contenidos y servicios. Acceso a estadísticas completas del uso del sitio. Sistema de gestión de banners integrado. Acceso de superusuario para crear nuevos portales. Posibilidad de crear skins (apariencias) por el administrador para dotar de un aspecto al portal totalmente personalizado. Permite trabajar con varias bases de datos distintas, aunque para algunas hace falta algún módulo adicional de soporte. Múltiples tipos de contenidos que se pueden administrar. Entre ellos Noticias, contacto, foros de discusión, documentos, eventos, etc. Una larga lista que se puede ampliar con una serie de módulos disponibles. Módulos de DotNetNuke Los módulos son piezas del programa que ofrecen soporte a funcionalidades específicas para los usuarios del portal. La versión actual de DotNetNuke dispone de 24 módulos para realizar tareas diversas como gestión de usuarios, calendario de eventos, banners, noticias, etc. Además, existen otros módulos gratuitos, ofrecidos por portales que tratan sobre DotNetNuke y también algunos de pago que ofrecen ciertas empresas y desarrolladores. Los módulos pueden instalarse, desinstalarse y configurarse siempre que se quiera, para dotar al portal de las funcionalidades que necesitamos en cada momento. Entre los módulos disponibles en la versión inicial se encuentran los siguientes: • • • • • • • • • • • Gestión de cuentas Noticias o novedades Gestión de banners Contacto, que ofrece la posibilidad de enviar correo a personas o grupos de personas Foros de discusión, con temas configurables Gestión de documentos, con opción a descarga o visualización Calendario de eventos FAQs Links Búsquedas Encuestas Taller de ASP.NET: www.desarrolloweb.com/manuales/taller-asp-net.html © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización. 9 Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com La lista todavía continúa con otros módulos para temas más específicos o tan especiales como servicio de información del tiempo o un servicio Whois, para hacer búsquedas de registro de nombres de dominios. Algunos ejemplos de páginas realizadas con DotNetNuke Existen ya bastantes ejemplos de buenos trabajos realizados con DotNetNuke. Entre los mejores hay algunos contribuidores de desarrollo de la plataforma. 4Birckhead http://www.4birckhead.com En esta página, aparte de un agradable diseño, podremos encontrar nuevos módulos gratuitos para extender DotNetNuke, como álbum de fotos o Tikers de índices bursátiles. ByDesignWebsights http://www.bydesignwebsights.com/ Ofrecen soporte y recursos sobre DotNetNuke. En el momento en el que se escribió este artículo ofrecían alojamiento gratuito sobre la plataforma. Ciber Huis http://www.cyberhuis.com/ Otro sitio de recursos con posibilidad de descargar nuevos módulos gratuitos. DotNetNuke Skins http://www.dnnskins.comUn sitio para encontrar nuevas apariencias para DotNetNuke. Hay que registrarse para acceder a los skins, pero puede merecer la pena porque tienen disponibles decenas de diseños distintos. DotNetNuked http://www.dotnetnuked.com Otro ejemplo de sitio realizado con DotNetNuke que ofrece también recursos de utilidad. Snowcovered http://www.snowcovered.com Una página más comercial sobre DotNetNuke, en la que se ofrecen recursos útiles, aunque la mayoría de las veces de pago. Cómo obtener DotNetNuke En la página de inicio de DotNetNuke (http://dotnetnuke.com) podemos encontrar mucha más información e instrucciones para instalar DotNetNuke. Para empezar hay disponible una guía de instalación del software que explica paso a paso el proceso de instalación. También disponen de guías de usuario y de administrador del portal, así como diversa documentación y FAQs. Para descargar DotNetNuke hay que registrarse en la página y hacer el inicio de sesión. Podremos encontrar varios ficheros de descarga con distintas versiones del programa. Conclusión Dot Net Nuke es una buena muestra de lo que se puede hacer con .NET y del empeño de ciertas comunidades, junto con Microsoft, de popularizar el uso de software libre en esta nueva plataforma de desarrollo. Efectivamente, se trata de un software gratuito desarrollado por una comunidad de personas a que se sienten a gusto trabajando con sistemas Microsoft y que desean popularizar sus herramientas. El producto del trabajo lo podemos ver en dotnetnuke.com (http://dotnetnuke.com) y en un primer vistazo parece que han conseguido una buena herramienta. Taller de ASP.NET: www.desarrolloweb.com/manuales/taller-asp-net.html © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización. 10 Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Artículo por Miguel Angel Alvarez Multicultura en ASP.NET Créditos Este artículo nos lo ofrece Clikear.com, una web dedicada por completo a .NET, que ofrece alojar tus páginas ASP.NET gratuitamente. En este articulo presentamos un ejemplo de una pagina ASP .NET para conocer las clases que sirven para hacer una web multicultura, una de las nuevas e interesantes características de la plataforma .NET. Presentamos una pagina en la que se nos muestra los diferentes formatos de hora, fecha, y numeros en distintos tipos de configuraciones para distintas culturas. Estudiando este ejemplo el lector podrá conocer algunos de los metodos mas usados de la clase System.Globalization, que se utiliza para crear webs multiculturales. Se puede descargar el archivo comprimido con el ejemplo. Artículo por Clikear.com Deshabilitar la expiración de la cache Los servidores ASP.NET disponen de una caché de salida que sirve para aumentar el rendimiento de las aplicaciones web. La caché guarda por un proceso interno datos de la salida de la aplicación web y si se realiza de nuevo la misma consulta sobre el servidor, éste puede utilizar la caché para devolver los resultados más rápido, sin tener que generarlos otra vez. No todos los datos se pueden o deben guardar en caché. Algunos no merece la pena guardarlos porque puedan depender del usuario que está consultando la página. Pero hay muchos datos que se pueden guardar porque van a ser los mismos para todos los usuarios que visitan la página, como la portada de un portal, noticias, productos de una empresa, etc. Los datos que hay en la caché generalmente tienen una fecha de expiración determinada, a partir de la cual se tienen que volver a generar porque no se consideran válidos. Esa fecha de expiración la tenemos que configurar nosotros. También podemos eliminar esa expiración si lo deseamos, lo que veremos en este artículo. Podemos deshabilitar la expiración de la cache en los web servers para ASP.NET 2.0 (que no expire los elementos puestos en la cache si no tiene espacio) poniendo el siguiente código en el web.config: Dentro del tag <;system.web>; <;caching>; <; cache disablememorycollection="true">;disableExpiration = "false" Taller de ASP.NET: www.desarrolloweb.com/manuales/taller-asp-net.html © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización. 11 Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com privateBytesLimit = "0" percentagePhysicalMemoryUsedLimit = "60" privateBytesPollTime = "00:02:00"/>; <;/caching>; Artículo por Pol Salvat Error Server Application Unavailable en ASP.NET 2.0 y ASP.NET 1.x Esto significa que necesitamos crear dos procesos para ejecutar las distintas versiones de ASP.Net. Esta opción la podemos configurar por cada website que tengamos, podríamos incluso tener n grupos distintos. Hay que añadir que cada grupo correrá en una nueva instancia de w3wp.exe, y que esto implica el consumo de recursos de RAM (entre 20 a 40 megas) para cada grupo como mínimo, y que subirá en relación del uso de la web. Para crear un grupo de aplicaciones, apretaremos botón derecho sobre MI PC y seleccionaremos Administrar En el menú de la izquierda, localizaremos Administrador de Internet Information Services (IIS) y desplegaremos la carpeta "Gupos de aplicaciones" Taller de ASP.NET: www.desarrolloweb.com/manuales/taller-asp-net.html © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización. 12 Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Encima de "Grupo de aplicaciones" apretaremos botón derecho del ratón, seleccionaremos "Nuevo", Grupo de aplicaciones. En el Id. De grupo de aplicaciones le pondremos el nombre que queramos (en este ejemplo, ASP_NET_2_0) Ahora en la carpeta de "Grupo de aplicaciones" podemos observar el nuevo grupo de aplicaciones que acabamos de crear ASP_NET_2_0 Taller de ASP.NET: www.desarrolloweb.com/manuales/taller-asp-net.html © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización. 13 Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Para asignar el website a nuestro nuevo grupo de aplicaciones, pulsaremos encima del sitio web botón derecho del ratón, propiedades, y en la pestaña "Directorio particular", en la parte de abajo, donde pone "Grupo de aplicaciones" seleccionaremos nuestro nuevo grupo de aplicaciones Aplicaremos y nuestra web en ASP.NET 2.0 funcionará a la perfección. Artículo por Pol Salvat Generar gráficos dinámicamente Este gráfico está basado en un array de valores. En este array se almacenan los valores y las fechas, para poder sacar un gráfico en condiciones en 2D parecido al siguiente: Taller de ASP.NET: www.desarrolloweb.com/manuales/taller-asp-net.html © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización. 14 Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com El código fuente para generar el gráfico es el siguiente: Imports System.Drawing System.Drawing Imports System.Drawing.Imaging System.Drawing.Imaging Public Class graph Class graph Inherits System.Web.UI.Page Region " Código generado por el Diseñador de Web Forms " 'El Diseñador de Web Forms requiere esta llamada. <;System.Diagnostics.DebuggerStepThrough()>; Private Sub InitializeComponent() Private Sub InitializeComponent() End Sub 'NOTA: el Diseñador de Web Forms necesita la siguiente declaración del marcador de posición. 'No se debe eliminar o mover. Private designerPlaceholderDeclaration As System.Object Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init 'CODEGEN: el Diseñador de Web Forms requiere esta llamada de método 'No la modifique con el editor de código. InitializeComponent() End Sub End Region Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim objBitmap As New Bitmap(700, 200) Dim objGraphic As Graphics = Graphics.FromImage(objBitmap) Dim orange As New SolidBrush(Color.Orange) Dim whiteBrush As New SolidBrush(Color.White) Dim lineColor As New Pen(Color.Blue, 2) objGraphic.FillRectangle(whiteBrush, 0, 0, 700, 200) objGraphic.DrawLine(lineColor, New Point(0, 190), New Point(700, 190)) New Point(0, 190), New Point(700, 190)) objGraphic.DrawLine(lineColor, New Point(5, 5), New Point(5, 195)) New Point(5, 5), New Point(5, 195)) Dim l_arr As New ArrayList 'inserción en el array de valores para el ejemplo l_arr.Add("800") l_arr.Add("01/01/07") l_arr.Add("500") l_arr.Add("02/01/07") l_arr.Add("1000") l_arr.Add("03/01/07") l_arr.Add("200") l_arr.Add("03/01/07") l_arr.Add("1000") l_arr.Add("03/01/07") l_arr.Add("1300") l_arr.Add("03/01/07") l_arr.Add("1000") l_arr.Add("03/01/07") l_arr.Add("1000") l_arr.Add("03/01/07") l_arr.Add("1000") l_arr.Add("03/01/07") l_arr.Add("1000") l_arr.Add("03/01/07") Dim i As Int32 = 0 Dim pos As Int32 = 0 Dim PointValue As New PointF(-30, 0) Dim PointDate As New PointF(-30, 190) Dim objFont As New Font("Verdana", 10) Taller de ASP.NET: www.desarrolloweb.com/manuales/taller-asp-net.html © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización. 15 Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Dim FontDate As New Font("Verdana", 7) Dim wb2 As New SolidBrush(Color.Black) Dim x As Int32 = -50 Dim maxValue As Int32 = 0 'calculo del máximo valor de la gráfica i=0 While i <; l_arr.Count If l_arr(i) >; maxValue Then maxValue = l_arr(i) End If i += 2 End While 'creación de todos los rectángulos de la gráfica i=0 While i <; l_arr.Count x += 70 Dim aux As Int32 aux = (l_arr(i) * 189) / (maxValue + 200) objGraphic.FillRectangle(orange, x, 189 - aux, 40, aux) PointValue.X = x PointDate.X = x - 10 objGraphic.DrawString(l_arr(i).ToString, objFont, wb2, PointValue) objGraphic.DrawString(l_arr(i + 1).ToString, FontDate, wb2, PointDate) i += 2 End While Response.ContentType = "image/gif" objBitmap.Save(Response.OutputStream, ImageFormat.Gif) End Sub End Class Puedes descargarte todo el ejemplo desde aquí Artículo por Pol Salvat Taller de ASP.NET: www.desarrolloweb.com/manuales/taller-asp-net.html © Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización. 16