Tip, instalar librerías de VB.NET en Mono

Últimamente he estado hablando mucho de Mono, pero es que me he metido bastante ahora que puedo desarrollar proyectos por mi cuenta, aplicando todo lo que se de .NET pero en Mac/Linux, así seguirá por un rato, mientras les traigo este otro tipo que es de bastante ayuda.

En Mono cuando quieres ejecutar un programa o usar una dll que llame contenga librerias de VB.NET, te puede dar un error como el siguiente:

Could not load file or assembly 'Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies.

Para solucionarlo lo único que se tiene que hacer es correr en la consola el siguiente comando:

sudo apt-get install libmono-microsoft-visualbasic8.0-cil

Si no haz actualizado apt-get te aconsejo que lo hagas antes de que corras el comando, ya que te puede marcar algún error.

Y listo, con esto las librerías necesarias para interpretar VB se instalan en tu equipo y puedes correr esas aplicaciones que te daban problemas.

Tip: Solución a Failed to find or load the registered .Net Framework Data Provider ‘MySql.Data.MySqlClient’

Este error me ocurrió el día de hoy cuando intentaba usar una dll de acceso a datos que me paso un amigo para un proyecto en el cual estamos trabajando juntos, estamos usando Mono en Mac y como servidor de pruebas Ubuntu 9.4 con Mono, MySQL en ambos.

El mensaje de error que me dio al intentar probar las conexiones con la base de datos fue:

Failed to find or load the registered .Net Framework Data Provider 'MySql.Data.MySqlClient'

La solución la encontre en las listas de Mono-dev, y fue simplemente agregar las referencias exactas para el ensamblado de MySQL, en el archivo Web.Config o App.Config hay que agregar lo siguiente dentro de las etiquetas <configuration> … </configuration>

  	<system.data>
        <DbProviderFactories>
			<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL"  type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=5.2.1.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
		</DbProviderFactories>
	</system.data>

Cabe notar que en la maquina donde estoy trabajando, tengo instalado MySQL y agregue como referencia la dll del conector de MySQL (MySql.Data.dll).

Ojalá a alguien le sirva.

DropDownList en cascada con jQuery y ASP.NET

Como usar DropDownList o Selects en cascada con ASP.NET y jQuery?, es una de las dudas que mas se generan en los foros de discusión al momento de realizar cosas con AJAX y .NET sin el UpdatePanel.

Voy a explicar como realizo esta tarea para que sea un proceso sencillo.

Crearemos un nuevo proyecto web y nos aseguraremos de configurarlo para que pueda usar jQuery.

En la pagina Default.aspx agregaremos dos DropDownList y quedara algo como el siguiente codigo:

<%@ Page Language="C#" Inherits="EjemploDropDownList.Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head runat="server">
	<title>Ejemplo DropDownList</title>
	<script src="js/jquery-1.4.2.min.js" type="text/javascript" ></script>
</head>
<body>
	<form id="form1" runat="server">
		<asp:DropDownList runat="server" id="ddlPrincipal" ></asp:DropDownList>

		<br />

		<asp:DropDownList runat="server" id="ddlSecundario" > </asp:DropDownList>
	</form>
</body>
</html>

Lo unico que hace este código es agregar la referencia de jQuery (la 1.4.2) y dos DropDownList, sin ningún otro control ni tampoco código que tenga que ser procesado aun por el servidor.

Enseguida vamos a llenar el primer DropDownList (ddlPrincipal) con algunos datos, en este caso seran continentes, esto lo vamos a colocar en el evento Load de la pagina Default.aspx:

private void Page_Load(object sender, System.EventArgs e)
		{
			ListItem elemento;

			elemento = new ListItem("America", "1");
			ddlPrincipal.Items.Add(elemento);

			elemento = new ListItem("Africa", "2");
			ddlPrincipal.Items.Add(elemento);

			elemento = new ListItem("Europa", "3");
			ddlPrincipal.Items.Add(elemento);
		}

Corremos el proyecto y nos debe mostrar algo como esto:

Ejemplo de DropDownList

Ahora es tiempo de meter un poco de código JavaScript en nuestra aplicación, para eso insertaremos el siguiente código entre las etiquetas <head> de Default.aspx :

<script type="text/javascript">
		$(document).ready(function(){

		// Configuracion de jQuery y AJAX
		$.ajaxSetup({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            data: "{}",
            dataFilter: function(data) {
                var msg;

                if (typeof (JSON) !== 'undefined' &&
                    typeof (JSON.parse) === 'function')
                  msg = JSON.parse(data);
                else
                  msg = eval('(' + data + ')');

                if (msg.hasOwnProperty('d'))
                  return msg.d;
                else
                  return msg;
            }
        });

			// Solo se ejecuta cuando seleccionamos alguna opcion.
			$('#<%=ddlPrincipal.ClientID %>').change(function(){
				$.ajax({
					url: "Default.aspx/obtenerPaises",
					data: "{'continente':'" + $("#<%=ddlPrincipal.ClientID %>").val() + "'}",
					success: function(msg) {
						$('#<%=ddlSecundario.ClientID %>').html(msg);
					},
					error: function(XMLHttpRequest, textStatus, errorThrown) {
				       alert('Error: ' + textStatus + ", " + errorThrown);
				   }
				});
			});

		});
	</script>

Este código hace dos cosas:

  1. Configura jQuery para usar AJAX y JSON como nosotros necesitamos y nos evita un pequeno malestar respecto a las “d” en los .NET frameworks anteriores a 3.5.
  2. Captura el evento Change del DropDownList Principal que ocurre cuando se selecciona cualquier opción del DropDownList y va a buscar el código que se ejecutara por .NET para traer lo que haga falta.

Como nota especial, si observan estoy pidiendo la información de la misma pagina “Default.aspx” y no de un WebService que es como comúnmente se hacen estas peticiones, a esto se le llama usar WebMethods.

Enseguida veremos el código que en .NET dependiendo de la opción seleccionada traerá una respuesta diferente, para lo cual agregaremos al archivo Default.aspx.cs el siguiente codigo debajo de Load_Page :

[WebMethod()]
		public static string obtenerPaises(string continente)
		{
			List<ListItem> elementos = new List<ListItem>();
			ListItem elemento;
			string resultado = "";

			// Usaremos simples 'if' para hacer sencillo el ejemplo.
			if (continente == "1") {
				elemento = new ListItem("Mexico", "1");
				elementos.Add(elemento);
				elemento = new ListItem("EUA", "2");
				elementos.Add(elemento);
			}

			if (continente == "2") {
				elemento = new ListItem("Kenia","1");
				elementos.Add(elemento);
				elemento = new ListItem("Congo","2");
				elementos.Add(elemento);
			}

			if (continente == "3") {
				elemento = new ListItem("Francia","1");
				elementos.Add(elemento);
				elemento = new ListItem("Italia","2");
				elementos.Add(elemento);
			}

			foreach (ListItem item in elementos) {
				resultado = resultado + "<option value='" + item.Value + "'>";
				resultado = resultado + item.Text;
				resultado = resultado + "</option>,";
			}

			return resultado;
		}

Este código como verán es bastante sencillo y lo unico que hace es recibir como parametro el “continente” y en base al que se selecciono agregar a un listado ciertos elementos y al final regresar una cadena de <options> de un select de HTML.

Segunda nota: el nombre de la variable que recibe el parametro debe ser el mismo que el que pasamos en el javascript (data: “{‘continente’: … )

Y listo, ahora hay que correr el proyecto y esto nos permitira realizar DropDownList en cascada.

Si eres estudiante, Visual Studio 2010 es gratis

Si eres estudiante de nivel preparatoria o universidad Microsoft te regala Visual Studio 2010 (si, recién salido del horno) además de que te da acceso a el entorno de desarrollo para Windows Phone 7, SQL Server 2008, Windows Server 2008 y mas, todo esto gratis.

Si estás inscrito en el programa DreamSpark o tu escuela tiene convenio con Microsoft para el programa, puedes descargar el software.

Si, el sitio tiene astronautas y unicornios (hola Freddier), pero vamos, es un excelente programa, además como estudiante cuentas con el beneficio de poder ingresar a la Windows Marketplace para distribuir tus aplicaciones de manera gratuita.

¿Eres estudiante?, que esperas para inscribirte.

PD: ¿Quieres saber si tu escuela tiene convenio con Microsoft para DreamSpark? solo entra al a sitio, mete tus datos de hotmail/live y te mostrara una lista de escuelas con convenio en todo el mundo, selecciona México y busca tu escuela.

PD2: No se pero por alguna razon en algunas escuelas de México, solo te reconoce si es la escuela listada en mayusculas, ni idea del por que de esto.

Hoy se presenta oficialmente Visual Studio 2010

Oficialmente uno de los (si no es que) mejores IDE’s de desarrollo del mundo en conjunto con novedades en varios lenguajes de la plataforma .NET salen a la luz en sus versiones estables el día de hoy.

En la ciudad de León Guanajuato, la comunidad de Desarrolladores .NET esta organizando el lanzamiento local en la Universidad Iberoamericana León, el evento es gratuito y están invitados todos los desarrolladores y personas del area de TI, el evento comienza a partir de las 6pm.

Toda la información esta en el sitio de la Comunidad.