miércoles 15 de julio de 2009

Enlazando un ComboBox con un HashTable

En esta ocasión les mostraré de manera sencilla como enlazar un ComboBox con datos que tengamos en un HasTable. Un HashTable es una clase que se define en el espacio de nombres System.Collections que basicamente almacena datos en pares Clave/Valor sirviendo la clave com indice. Para mas información sobre el uso de esta Clase que se incorporo en el Framework 2.0 con la liberación de VS 2005, pueden consultar el siguiente link.

Empezemos con el ejemplo.
Primero, creamos un nuevo proyecto en VS 2005/2008 de tipo windows en esta caso lo desarrolle bajo el lenguaje C#. Luego, en la ventana que aparece escribimos el nombre de nuestro ejemplo y le damos OK. Ya VS se encarga de generar el archivo de solucion por nosotros.
Despues agregamos algunos controles en este caso 3 Labels y 1 ComboBox. El tercer Label no aparece por que no tiene asigando ningun texto, pero es el que nos servira para desplegar la opcion seleccionado en el ComboBox.

Luego de agregar los controles pasamos a la parte de la codificación. Primero, agregamos el siguiente espacio de nombre (namespaces) para poder usar la clase HashTable.
using System.Collections;

Declaramos una variable global de tipo HashTable:

Hashtable lista = new Hashtable();

En el evento Load de nuestro formulario agregamos el código para llenar el Hastable y enlazarlo al comboBox.

BindingSource ls = new BindingSource();


lista.Add("win", "Windows");

lista.Add("lnx", "Linux");

lista.Add("dos", "MS-DOS");

lista.Add("mac", "MAC");

ls.DataSource = lista;

this.comboBox1.DataSource = ls;

this.comboBox1.DisplayMember = "value";

this.comboBox1.ValueMember = "key";

Vamos a entender un poco el código. Primero creamos una variable de tipo BindingSource el cual nos servirá para enlazar nuestro comboBox con el HashTable mediante su propiedad DataSource. Para mas información sobre este componente ver el siguiente link con un ejemplo. Seguidamente usamos el método Add del HashTable para agregar los datos. Como vemos el primer parametro es el que nos serviría como clave y el segundo el valor de lo que queremos desplegar.
Como mencionamos anteriormente asignamos los datos del HashTable al DataSource de la variable ls (de tipo BindingSource).
Ahora solo nos queda asignar los correspondientes valores al comboBox. El DataSource para los datos, el DisplayMember (asignamos el parametro value) para desplegar el dato que queremos mostrar y el ValueMember (asignamos el parametro key) para obtener el valor de la clave para el texto seleccionado.

Ahora en el evento SelectedIndexChanged del ComboBox agregamos el siguiente código para desplegar la opción seleccionada.

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)

{

if (comboBox1.SelectedIndex != 0)

{

this.label2.Text = comboBox1.Text + " y su clave es: " + comboBox1.SelectedValue;

}

}


Despues de todo lo que acabamos de mostrar solo nos falta ejecutar nuestro ejemplo.




Como podemos ver, al momento de seleccionar una opción del ComboBox se despliega nuestra opción con su clave asociada. A continuación le agrego el link del ejemplo en C#.

lunes 6 de julio de 2009

Manteniendo el estado de la Aplicación

La propiedad ViewState.

Siguiendo con nuestro ejemplo anterior Desarrollo de Aplicaciones Web con ASP.Net, en esta ocasion veremos como mantener el estado en nuestra aplicación. Pero ¿que significa esto? Empezemos.
Al ejecutar la página de nuestro ejemplo, podemos observar que se mantiene el texto dentro el TextBox y se modifica sólo la etiqueta con el resultado.
ASP.Net realiza esto automaticamente, utilizando lo que se denomina ViewState. El ViewState almacena la información para poder restablecerlos en cada PostBack, permitiendo que el usuario solo vea los cambios y no deba ingresar toda la información nuevamente en cada ida y vuelta desde el servidor. Esta información se guarda en el mismo HTML de la página.

<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTIxMjM5MTIwODgPZBYCAgMPZBYCAgkPDxYCHgRUZXh0BQlIb2xhIG1pa2VkZG
ScRXerPjcjyJEGhNowb8cy5205lg==
"
/>
div>



Para que ASP.Net pueda mantener el estado, es necesario que cada control tengo la propiedad EnableViewState en True (establecido por default).
A continuación explicaré como funciona: cuando el usuario reliza un PostBack (click sobre algún boton o cualquier otro control), ASP.Net recibe el pedido y crea una nueva página. ASP.Net toma la información oculta en el campo de estado de la página anterior y asigna los valores a los campos de la nueva página. A continuación se produce el evento Page.Load y luego se procesan los eventos que dieron origen al PostBack. Una vez procesado los eventos, ASP.Net crea un HTML con el resutlado final de la ejecución de código y la envía al cliente nuevamente; luego se produce el evento Page.Unload en el que la página se descarta de la memoria del servidor. Lo cual quiere decir, que literalmente se olvida de todo lo que sabía de ese cliente hasta el momento. Este metodo de trabajo es muy eficiente ya que permite al servidor web atender miles de usuarios sin notar una perdida de rendimiento pero, si deseamos realizar aplicaciones que mantengan el estado entre cada petición desde el cliente, debemos usar alguna otra tecnica que nos permita almacenar algún tipo de información.
A continuación veremos algunas de ellas:

Una de las maneras que tenemos para almacenar información es utilizar el ViewState. El ViewState está disponible como una colección de valores a los cuales se puede acceder por clave.
Veamos un ejemplo del manejo del ViewSate. Tomando nuestro ejemplo anterior, supongamos que queremos saber cuántas veces precionamos el botón. Primero agregaremos un par de Labels más y agregamos una propiedad a la página para encapsular las llamadas a las variables del ViewState. De esta manera evitamos la confusión de nombres ya que, si nos equivocamos de clave, el ViewState automáticamente

Private Property peticiones() As Integer

Get

'retornamos el valor del ViewState

Return Convert.ToInt32(ViewState("Peticiones"))

End Get

Set(ByVal value As Integer)

'almacenamos el valor en el ViewState

ViewState("Peticiones") = value

End Set

End Property

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

If Not Page.IsPostBack Then

peticiones = 0

lblClick.Text = peticiones

End If

End Sub

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSaludar.Click

lblResultado.Text = "Hola " & txtNombre.Text

peticiones += 1

lblClick.Text = peticiones

End Sub


Y este sería el resultado:

Como podemos ver en la imagen, estamos manteniendo el estado con el ViewState almacenando la cantidad de peticiones realizados por el usuario.

Transfiriendo Información entre páginas

Cuando creamos una apliación con múltiples páginas, necesitaremos de alguna manera pasar la información a alguna otra para que pueda realizar su tarea. Dentro de ASP.Net podemos utilizar 2 técnicas básicas para ir a otra página:
  • Utilizar un control Hyperlink
  • Utilizar el método Redirect del objeto Response por código para redirigir al ASP.Net a esa página. Por ejemplo.

    Response.Redirect("Default2.aspx")

Si la nueva página está en el mismo directorio de la actual, basta con indicar la página. Si no es así, debemos indicar la URL completa:
Response.Redirect("Default2.aspx")

En ambos casos la nueva página no podrá acceder al ViewState de la página original para obtener los datos, ya que este es por página. Existen otras soluciones dentro las cuales estan: QueryString y Variables de Sesión.

Sin entrar en tanto detalle sobre el QueryString la mayoría de nosotros creo que ya abremos notado que muchas páginas tienen un signo de ? seguido de una secuencia de valores en pares Clave-Valor.
Para obtener los valores en la página de destino, debemos hacer uso del objeto Request y su propiedad QueryString.
Pero creo que un ejemplo explicara mejor el funcionamiento de este método. Primero agragamos una pagina mas a nuestro pequeño proyecto de ejemplo yo le llame ejemploQueryString.aspx.

Codigo VB.
En el Click del botón Saludar de la página Default agregamos:

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSaludar.Click

'lblResultado.Text = "Hola " & txtNombre.Text

'peticiones += 1

'lblClick.Text = peticiones

'ejemplo de como usar el objeto request

Dim cadenaSaludo As String

cadenaSaludo = "?saludoQueryString=" & txtNombre.Text

Response.Redirect("ejemploQueryString.aspx" & cadenaSaludo)

End Sub


En el evento Load de nuestra página ejemploQueryString.aspx agregamos:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

Dim saludo As String

saludo = Request.QueryString("saludoQueryString")

lblSaludo2.Text = saludo

End Sub

Con los códigos mostrados se debe visualizar el nombre que escribamos en el TextBox de la página default en la nueva página que se agregó. Para ver el ejemplo completo pueden descargar el código al final del post.

Variables de Sesión

El uso de variables de sesión para mantener el estado de la aplicación web es una de las herramientas más útiles. Esta información se almacena por cada usuario en particular y puede ser obtenida desde cualquier WebForm de la apliación a diferencia del ViewState, que es por cada página.
Una sesión comienza cuando del browser solicita una página por pimera vez y finaliza cuando explícitamente se llama al método Session.Abandon(), o bien el servidor no ha recibido pedidos (Request) de ese cliente en un período de tiempo determinado.
Cada variable de sesión es almacenada en el servidor a diferencia del ViewState, que se envia en un campo oculto al cliente. Utilizar variable de sesión es muy sencillo pero que mejor que un ejemplo para entender mejor como funciona. Modificando nuestro ejemplo original del ViewState, utilizamos la misma lógica con la diferencia que donde escribimos ViewState("peticiones"), lo remplazamos con Session("peticiones").

Codigo en VB

Private Property peticiones() As Integer

Get

'retornamos el valor del ViewState

'Return Convert.ToInt32(ViewState("Peticiones"))

'ejemplo del uso de variables de sesion

Return Convert.ToInt32(Session("Peticiones"))

End Get

Set(ByVal value As Integer)

'almacenamos el valor en el ViewState

'ViewState("Peticiones") = value

Session("Peticiones") = value

End Set

End Property



Solo quedaría ejecutar la página en el browser, escribimos cualquier nombre y presionamos el boton Saludar. El resultado es el mismo que cuando empleamos el ViewState. La diferencia radica en que se puede utilizar la información que se encuentra en la varaible de sesión desde cualquier página del sitio.

En los siguientes links pueden descargar los códigos de ejemplo tanto para VB.Net como para C#.Net.

Link VB
Link C#

Ya para terminar este post solo me quedaría comentar que estos métodos que vimos se pueden utilizar en conjunto para mejorar el performance de nuestra aplicación y no solo enfocarse en un solo método.

Nos veremos pronto




sábado 4 de julio de 2009

Desarrollo de Aplicaciones Web con ASP.Net

En esta ocasion hablare un poco de como empezar un proyecto web con ASP.Net cubriendo las nociones basicas para desarrollarlo no entrare en tanto detalle ya que desarrollar una aplicación Web lleva mas tiempo y planeación dependiendo de lo que se quiere hacer. Al final crearemos una pequeña aplicacion de ejemplo para ilustrar lo aprendido.
He dividido este mini tutorial en 4 partes:
  1. Lo basico: Como agregar controles, sus propiedades y como codificarlos.
  2. Manteniendo el estado de la aplicación.
  3. Controles de validacion.
  4. Master Pages, Temas y Skins.
Creacion de una Aplicacion Web.

Una aplicacione Web se crea como cualquier otro proyecto de Visual Studio, con la diferencia que debemos elegir New Web Site en vez de New Project en el menu File. Seguidamente nos aparecerá una cuadro de dialogo donde nos da la opcion de seleccionar el tipo de aplicacion Web a crear.



Una vez que seleccionamos el tipo de proyecto debemos elegir donde guardarlo haciendo click en la opcion Location y seleccionando cualquiera de las 3 opciones: FileSystem, Http, FTP. El mas comun es el FileSystem ya que nos permite ejecutar nuestra aplicación con el servidor de Visual Studio y es la que usaremos en este tutorial. Luego debemos elegir en que lenguaje queremos programar nuestro sitio Web: VB o C# y por ultimo escribimo el nombre de nuestro proyecto. En este caso le pondre ejemploWebVB.



Como podemos ver en la imagen de arriba, seguidamente que hacemos click en el boton OK, Visual Studio automaticamente muestra el entorno para empezar a programar. De hecho ya nos genera codigo que es el basico de cualquier aplicacion ASP.Net y en el Explorador de soluciones los archivos igualmente basicos.
Ahora lo que haremos nos pasamos a la vista de diseño. En la parte inferior se podran dar cuenta que hay 3 pestañas etiquetadas como: Diseño, Split,Codigo.
Ya en el modo de Diseño agregamos los siguientes controles arrastrandolos y soltandolos:
CONTROL PROPIEDADES
---------------------------------------------------------------
  • Label Id: lblTitulo
    Text: Saludo
    Font-Size: X-Large
  • Label Id: lblNombre
    Text: Nombre
  • Textbox Id: txtNombre
    Text: (vacio)
  • Button Id: btnSaludar
    Text: Saludar
  • Label Id: lblResultado
    Text: (vacio)
El resultado debería ser similar al siguiente:

Asp.Net utiliza un mecanismo de organización de controles, denominado Flow Layaout, en el que los controles se ubican uno a continuación del otro.
Despues de a ver agregado los controles y cambiar sus propiedades, si hacemos click en la pestaña de codigo (Source) podremos ver que Visual Studio agregao codigo automaticamente para esos controles.
Hasta aquí ya tenemos como se vera nuestra pequeña aplicacion de ejmplo. Ahora solo falta programar algo. Vamos a hacer que cuando el usuario presione el boton Saludar, en el Label lblResultado nos muestre el nombre que el usuario ingreso en el textbox. Hacemos doble click en el boton y Visual Studio nos generará codigo automaticamente para ese boton.

Codigo VB:


Codigo CS:
Una vez agregado el codigo que se ejecutará al momento de presionar el botón y despues de que el usuario escribio algo. Ahora solo nos queda ejecutar el ejemplo presionando F5 (modo de depuración) o Ctrl-F5. En ambos casos se ejecuta el servidor propio de Visual Studio, el cual procesa las peticiones de las páginas. Cada vez que se reinicia la máquina la PC, este servicio escoge un puerto diferente para evitar conflictos con los dispositivos con los que contemos.


Como podemos ver este fue un ejemplo bastante sencillo y el proceso como funciona también los es. Cuando se solicita una página el servidor web envía la página HTML con los datos iniciales, si es la primera vez, al browser. Cuando el usuario interctua con algún control (el botón, por ejemplo), la información en el resto de los controles se envía al servidor nuevamente, se procesa el código asociado con los eventos y se envía nuevamente otra página en rspuesta a la acción.
Este proceso se realiza automaticamente cada vez que el usuario interactúa con algún control en el que estén capturando los eventos.
Esta es la manera que tiene ASP.Net de responder a eventos desde el Cliente. Este proceso de ida y vuelta (round trip) del cliente al server y viceversa en respuesta a un evento se denomina PostBack.

Aquí podran encontrar los link del ejemplo tanto en VB.Net como en C#.
Link VB
Link CS

Bueno, hasta aquí termina la primera parte de este minitutorial. Espero que les halla ayudado a entender como funciona ASP.Net. Nos vemos en el proximo post.

lunes 29 de junio de 2009

Algo diferente de .Net. Para disfrutar de los goles de uno de los mejores jugadores por el momento.

jueves 25 de junio de 2009

Solucionando problema de localhost con VS 2008 y Expression Blend

Hola de nuevo. Esta vez quisiera compartir con ustedes como solucionar el problema de localhost al momento de ejecutar (F5) VS 2008 o Espression Blend.
Hace un par de meses tuve este problema. Tengo instalado Visual Studio 2008 y recientemente instale Expression Blend 2 y algo que me pasaba fue de que al momento de tratar de visualizar mi pagina con el servidor local de VS me aparecia el famoso PAGE NOT FOUND. Lo mismo con Expression Blend.
Buscando por internet encontre de que este problema es debido a una actualizacion de Windows Vista (en especifico Windows Defender and Microsoft Forefront Client Security signature file (1.53.256.0) ) que sobreescribe el archivo Host donde se encuentra la configuracion del localhost (C:\\Windows\System32\drivers\etc\hosts).
Si abrimos el archivo la unica configuracion que veremos del localhost es algo como esto:
# ::1 localhost

Lo unico que tendremos que hacer es agregar: 127.0.0.1 localhost. Y guardamos. Ahora ya podremos ejecutar localmente nuestras aplicaciones.


Ojo: Para hacer todo lo descrito arriba en Windows Vista es necesario abrir el Bloc de Notas como Administrador. De lo contrario no nos dejara guardar el cambio.

Espero que esto les ayude.
Saludos y nos vemos en el proximo post.

martes 23 de junio de 2009

Algo comun que pasa en el ambiente de TI. Para divertirse un poco.

lunes 22 de junio de 2009

POO en capas con VB. Net y C#.Net

Primero que nada quiero saludar a todos los interesados en esta tecnologia. Despues de un largo largo tiempo voy a volver a agregar cosas sobre .Net. En este caso programacion orientada a objetos.
Para comenzar debemos saber que es un clase y un objeto que son la parte mas basica de la POO. Que espero que la mayoria de los interesado en .Net debemos saber , de todas maneras voy a poner una descripcion muy breve.
  • Clases: Son abstracciones de los objetos de la realidad que se quieren modelar.
  • Objetos: Son instancias particulares de las clases. Informalmente representan una entidad del mundo real.
El tema de la POO es un poco extensa, todavia faltarian abarcar temas como: instancias de una clase, herencia, polimorfismo, etc. Para mas informacion he subido un pequeño repaso en el siguiente link.
Igualmente pueden consultar los siguientes link el cual estan muy buenos donde pueden hallar un pequeño manual de introduccion a VB y C#.
Igualmente he sudido unos archivos de ejemplo, tanto en VB como en C#. Es una pequeña aplicacion donde se hace consulta a una base de datos de SQL Server el cual almacena los datos de los alumnos y maestros.
La aplicacion se divide en 3 capas: la de interfaz de usuario, la de reglas de negocios y la de datos. Para el paso de informacion entre las distintas capas se usaron componentes transversales, que en este caso fue una clase declarado el cual tiene como atributos las columnas de las tablas ya sea de maestros o alumnos.

Link de ejemplo.

Cualquier comentario que quieran agregar sera bienvenido. Estare agregando mas contenido con la nueva version 2008 y las mejoras que trae.

Saludos.

Comentarios