lunes, 27 de agosto de 2007

Error al exportar un Data Grid

En lo personal, me ocurrio una excepción en un data grid cuando lo deseaba exportar. Ese error dice mas o menos asi:

Control 'FreightGrid__ctl2__ctl0' of type 'DataGridLinkButton' must be placed inside a form tag with runat=server

Y bueno, imaginando arreglar ese detalle colocando el "runat=server" en donde creia que debia de ir, me tope con la sorpresa de que no se arreglaba nada.

El detallito se arreglo, (a mi en lo personal), pasando a False las propiedades de Allowsorting y AllowPaging del DataGrid.

Ojala funcione esto a alguien.

Dr. Omm

jueves, 23 de agosto de 2007

Como enviar correo electrónico desde un Windows Forms y C#

Es posible enviar un correo electrónico mediante C#, mediante las clases System.Net, System.Net.Mail y System.Net.Mime

En el siguiente ejemplo se muestra un formulario que envia un simple correo electrónico a través del Servidor SMTP de GMAIL y se le adjunta un archivo .xls

1.- Preparamos un Windows Form con un boton, para enviar el mail. En el código es fácil reconocer donde se podría sustituir la cadena de texto por un TextBox y su propiedad Text. Por ejemplo, para el correo destinatario, el cuerpo, el asunto, etc.

2.- En el código, establecemos las siguientes clases:

using System.Net;
using System.Net.Mail;
using System.Net.Mime;

3.- Y agregamos el siguiente código en el evento de un Button, por mencionar un ejemplo:

private void button1_Click(object sender, EventArgs e)
{

//Se prepara un nuevo mensaje
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();

//Se establece el destinatario
msg.To.Add("mauriciomoo@gmail.com");

//Se establece el remitente, asi como el nombre que aparecerá en la
//bandeja de entrada, así como el formato de codificación
msg.From = new MailAddress("mauriciomoo@gmail.com", "Soy el Dr. Omm", System.Text.Encoding.UTF8);

//Se establece el asunto del mail
msg.Subject = "Prueba de correo by Dr. Omm";

//Formato de codificación del Asunto
msg.SubjectEncoding = System.Text.Encoding.UTF8;

//Se establece el cuerpo del mail
msg.Body = “Saludos del Dr Omm”;

//Se establece la codificación del Cuerpo
msg.BodyEncoding = System.Text.Encoding.Unicode;

//Se indica si al cuerpo del mail, se interpretara como código HTMl
//o no, esto funciona cuando queremos que aparezca centrado algo
//mediante
, etc
msg.IsBodyHtml = false;

//Se establece la cadena de texto con la ubicación del archivo a
//adjuntar
string file = "C:/Datos.xls";

//Se adjunta el archivo
Attachment data = new Attachment(file, MediaTypeNames.Application.Octet);
ContentDisposition disposition = data.ContentDisposition;
disposition.CreationDate = System.IO.File.GetCreationTime(file);
disposition.ModificationDate = System.IO.File.GetLastWriteTime(file);
disposition.ReadDate = System.IO.File.GetLastAccessTime(file);
msg.Attachments.Add(data);

//Se prepara el envio del mail
SmtpClient client = new SmtpClient();

//Se establecen las credenciales para enviar el mail, muy importante autentificarse con la cuenta de correo y la contraseña
client.Credentials = new System.Net.NetworkCredential("mauriciomoo@gmail.com", "XXXXXXXXXXXXXX");

//Se establece el puerto de envio
client.Port = 587;

//Se establece el servidor SMTP, en este caso GMAIL
client.Host = "smtp.gmail.com";

//Seguridad SSL?, si como no, prueben ettereal
client.EnableSsl = true;


//Se envia el Mail
try
{
client.Send(msg);
}
catch (System.Net.Mail.SmtpException ex)
{
Console.WriteLine(ex.Message);
Console.ReadLine();
}
}

4.- Como se menciono antes, es necesario contar con las clases indicadas, así como el archivo a adjuntar. Acerca de las credenciales, es importante tener una cuenta de correo electrónico en el cual podamos utilizar su servidor SMTP. GMAIL lo permite, pero parece ser que Hotmail no. Habría que probar con algún otro servidor de correo, como sería nuestro proveedor de internet, el del trabajo, etc.

Por último, este ejemplo se realizó en Visual Studio 2005 con C# en el Net Framework 2.0


Esperando que se útil, así como sus comentarios, se despide

Dr. Omm

Como agregar un ToolTip a cada uno de los elementos de un listbox

Cuando utilizamos un ToolTip en Visual Studio, solo puede ser utilizado directamente sobre un control de Windows Forms, por ejemplo un TextBox, una Label, un Button, etc., ya que solo acepta dos parámetros; el control y la cadena de Texto que mostrará.
toolTip1.SetToolTip(listBox1, “Este es mi Tip”);
Sin embargo, si se deseará que el ToolTip cambiará para cada elemento de un ListBox o de un ComboBox, no es tan sencillo ya que no acepta en sus parámetros un evento como SelectedIndex o SelectedValue.

En un “googlazo” me encontre con un algoritmo que mostraba como realizarlo. Ahora solo faltaba tomar la información de una Base de Datos y que el ToolTip cambiará para cada elemento de la lista. Y esto fue lo que sucedió:

1.- Se considera de antemano que se tiene listo todo el formulario completo, de acuerdo a las necesidades. Así mismo una Base de Datos, por ejemplo, un directorio telefónico. Entre esos controles se encuentra un ListBox, el cual fue llenado en su propiedad DataSource una consulta hecha a la Base de Datos. Digamos una lista de nombres, y que se desea mostrar en el ToolTip su telefono.
2.- Una vez tomado de la Caja de Controles un ToolTip, nos dirigimos al evento SelectedIndexChanged del listBox1 y comenzamos a codificar:

private void lst_users_SelectedIndexChanged(object sender, EventArgs e)
{

//Creamos un nuevo DataTable auxiliar y en el almacenamos el DataSource que contenga
//el listBox, convirtiendolo previamente
DataTable dt_aux_u = (DataTable)this.lst_users.DataSource;

//Se prepara una variable de tipo de string que almacenará el texto del ToolTip
string telefono = "";

//En una variable de tipo entero, se almacena el indíce del elemento seleccionado de la
//lista, previamente convirtiendolo a entero
int index = (int)this.lst_users.SelectedIndex;

//Si el indice del elemento seleccionado se encuentra entre el rango de la lista
if (index >= 0 && index < this.lst_users.Items.Count)
{
//La variable telefono almacena del DataTable el valor donde la fila con valor index y la
//columna “telefono” coincida. Esto esta basado en la Base de Datos
telefono = dt_aux_u.Rows[index][“telefono"].ToString();

//Si lo seleccionado no contiene nada
if (telefono =="")
{
//Se prepara un texto especial, para que el ToolTip no se muestre vacio
telefono = "Esta persona no tiene telefono";
}
}
//Al final, establecemos el ToolTip con el control Windows Forms y la Variable
this.toolTip1.SetToolTip(this.lst_users, telefono);
}

3.- Cabe determinar que es necesario tener funcionando primero el acceso a la Base de Datos y el llenado del listBox correctamente, ya que la informacion para llenar el Tooltip lo tomamos del DataSource del control.
Esperando que sea util, así comentarios y sugerencias.
Dr. Omm

viernes, 17 de agosto de 2007

Un gran aporte que nunca estara de mas

A todos los interesados en la programación, esa nueva arte, para algunos dificiles, para otros laborioso, y para otros su vida....un buen compañero deja en su blog unos links para aprender a programar, y entre ellos hay un buen manual de programación. Pero no se crean un libro donde te enseña que es un vector, o que son los operadores lógicos (aunque si lo trae en los primeros capitulos) sino que muestra en sencillos ejemplos como entender los conceptos avanzados como la recursividad, manejo de cadenas, etc., en fácil pseudocódigo.

Esto con el fin de mejorar nuestra interpretación, pero sobre todo el entendimiento a estas cuestiones.

Así mismo recomienda para los novatos, descargar y aprender usar Phyton, un lenguaje muy sencillo para empezar a construir

Les dejo el vínculo al Blogspot de Julius y aprovechen para revisarlo que esta muy bueno

http://sotf-stuff.blogspot.com/

viernes, 10 de agosto de 2007

Ataque Cibernético Inminente y Masivo en cualquier momento

Esto que les platico aqui ocurrio hace poco en Estonia, un estado báltico en Europa, con metas fijas para prosperar como país, y confiando su desarrollo en el área de la informática. Y es que no es para menos, pero los líderes de Estonia presumieron mucho de su capacidad tecnológica implementando rapidamente servicios básicos en la Web. Por ejemplo, la consulta de y pago de agua, luz, etc., agenda de trabajos de los servidores públicos, movimientos de saldos en distintos bancos, entre muchas otras cosas mas. Incluso el país se podia menciona E-Estonia.
Pero una mañana nadie pudo accesar a sus cuentas de banco, ni tampoco conectarse a internet, y de pronto la luz y telefono dejo de funcionar.
Por el mes de Mayo de l 2007 Estonia sufro un ataque cibernético planeado con muchos meses de anticipación, que dejo realmente debilitado al país, a tal grado que era completamente vulnerable a una invasión u otro tipo de ataque...y nada hubiera podido hacer para evitarlo.
No es un cuento, es tan real como el ataque que sufrieron los Servidores DNS en EUA en febrero de 2007, cuando un grupo de hackers lograron entrar a estas supercomputadoras. No hicieron ningún daño, pero de haber querido, podían hacerlo y dejar sin correo electrónico o acceso a páginas webs comerciales a millones de personas, y eso era perdida de millones de dolares.
Ahora, en estos momentos, algo mas grave esta ocurriendo. Desde hace unos meses, se ha propagado por internet un virus llamado Storm Worm, practicamente indectable, por que no realiza ningun daño, mas que esperar un comando proveniente de internet para activarse y tomar el control de los servicios de la computadora, y tal vez, enviar mails, recibirlos, accesar a páginas web, descargar archivos, etc. Practicamente la PC se vuelve un Zombi, que solo realizara ordenes provenientes de internet que "alguien" o "algo" le envie.
¿Que significa esto?, que existe un sujeto con el dedo en un boton listo ra enviar ese comando que vuelva nuestra computadora Zombi, que la controle, y que tal vez, desactive nuestro Antivirus y descargue uno de tal magnitud que la formate, o que tal vez copie nuestra información y la envie a alguna parte del mundo, o que utilize nuestra conexion de internet para saturar uno o mas servidores, o que use nuestro disco duro para almacenar información. Ahora imagina esto en un equipo de oficinas gubernamentales o empresariales. La cantidad de daños que pueda ocasionar.
Ya existen equipos de expertos alrededor del mundo que estudian este caso y hacen lo posible por evitar, segun ellos, la catastrofe tecnológica mas grande de todos los tiempos. Nosotros podemos hacer algo....solo se trata de llevar a cabo las mismas tareas de seguridad que conocemos, no abrir e-mails de usuarios que no conozcamos y buscar las actualizaciones recientes de los antivirus, no recibir archivos desconocidos via mensajeros y tal vez lo mas díficil.... reducir lo mas que se pueda el uso de sofware P2P como ARES y Limewire.
¿Tu que opinas?. ¿Crees que esto es exagerado?. ¿Qué son solo cuentos?. Si quieres comprobarlo busca en google acerca de Estonia y su Red, así como ese tal Storm Worm, los períodicos de TI alrededor del mundo saben mas de lo que yo explique aqui.
Acuerdense de mi cuando el fin del mundo nos alcanze..... Dr Omm