Guardar y Mostrar Imagenes de Base de Datos en .Net

lunes, 30 de julio de 2012

Hola espero todos anden bien, ahora veremos como trabajar con imágenes en .Net

En este articulo trataremos los siguientes puntos.
  • Insertar imágenes en base de datos.
  • Visualizar imágenes en Datagriedview.
  • Buscar y cargar imagen en PictureBox.

El ejemplo esta desarrollado en visual estudio 2010 con c# y vb.net y se usa sqlexpress 2008.

Para este ejemplo usaremos una bd llamada Database y que cuenta con una tabla llamada Personas que cuenta con un campo de tipo image, el campo id es de tipo identity osea se incrementara solo.

BD

El diseño de nuestra aplicacion sera el siguiente.

Diseño

Algo importante que hay que resaltar es que las columnas del datagriedview fueron establecidas en tiempo de diseño.

Columnas

Como pueden observar se crearon las 4 columnas para los datos indicando que una columna sea de tipo image, la propiedad importante cuando se crean las columnas en tiempo de diseño es DataPropertyName ya que sirve para indicar que campo del origen de datos será asignado a esa columna.

Una vez explicado el diseño de nuestra aplicacion vamos al código, lo primero que aremos sera agregar una clase(modulo en el caso de vb.net) llamada Datos y le agregaremos el siguiente código.
       public static DataTable Cargar()
      {
          using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString()))
          {
              DataTable dt = new DataTable();
              string query = "SELECT * FROM PERSONAS";
              SqlCommand cmd = new SqlCommand(query, conn);
              SqlDataAdapter adap = new SqlDataAdapter(cmd);
              adap.Fill(dt);
              return dt;
          }
      }

      public static void Insert(string nombre, string apellido, byte[] foto)
      {
          using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString()))
          {
              string query = "INSERT INTO Personas(nombre,apellido,foto) VALUES(@nombre,@apellido,@foto)";
              SqlCommand cmd = new SqlCommand(query, conn);

              cmd.Parameters.AddWithValue("@nombre", nombre);
              cmd.Parameters.AddWithValue("@apellido", apellido);
              cmd.Parameters.Add("@foto", System.Data.SqlDbType.Image).Value=foto;
              conn.Open();
              try
              {
                  cmd.ExecuteNonQuery();
                  MessageBox.Show("Registro Ingresado con Exito...");
              }
              catch (Exception ex)
              {
                  MessageBox.Show(ex.ToString());
              }
          }
      }

   Public Function Cargar() As DataTable
      Using conn As New SqlConnection(ConfigurationManager.ConnectionStrings("default").ToString())
          Dim dt As New DataTable()
          Dim query As String = "SELECT * FROM PERSONAS"
          Dim cmd As New SqlCommand(query, conn)
          Dim adap As New SqlDataAdapter(cmd)
          adap.Fill(dt)
          Return dt
      End Using
  End Function

  Public Sub Insert(ByVal nombre As String, ByVal apellido As String, ByVal foto As Byte())
      Using conn As New SqlConnection(ConfigurationManager.ConnectionStrings("default").ToString())
          Dim query As String = "INSERT INTO Personas(nombre,apellido,foto) VALUES(@nombre,@apellido,@foto)"
          Dim cmd As New SqlCommand(query, conn)

          cmd.Parameters.AddWithValue("@nombre", nombre)
          cmd.Parameters.AddWithValue("@apellido", apellido)
          cmd.Parameters.Add("@foto", System.Data.SqlDbType.Image).Value = foto
          conn.Open()
          Try
              cmd.ExecuteNonQuery()
              MessageBox.Show("Registro Ingresado con Exito...")
          Catch ex As Exception
              MessageBox.Show(ex.ToString())
          End Try
      End Using
  End Sub

En el primer método Cargar lo único que haces es devolver un datatable con los datos de nuestra tabla. Y el segundo método Insert es el que nos servirá para insertar registros en nuestra bd importante notar que el parámetro que usaremos para insertar la foto es de tipo byte.

Ahora agregaremos otra clase(modulo para el caso de vb.net) llamada ConvertImage y agregamos el siguiente código.
       public static Image ByteArrayToImage(byte[] byteArrayIn)
      {
          MemoryStream ms = new MemoryStream(byteArrayIn);
          return Image.FromStream(ms);
      }

      public static byte[] ImageToByteArray(Image imageIn)
      {
          MemoryStream ms = new MemoryStream();
          imageIn.Save(ms, ImageFormat.Jpeg);
          return ms.ToArray();
      }

   Public Function ByteArrayToImage(ByVal byteArrayIn As Byte()) As Image
      Dim ms As New MemoryStream(byteArrayIn)
      Return Image.FromStream(ms)
  End Function

  Public Function ImageToByteArray(ByVal imageIn As Image) As Byte()
      Dim ms As New MemoryStream()
      imageIn.Save(ms, ImageFormat.Jpeg)
      Return ms.ToArray()
  End Function

Tenemos 2 métodos que usaremos para convertir el array de byte en Image y viceversa.

Ahora pasemos al código de nuestra formulario, veamos como cargar los datos en el datagrid.
       private void cargar()
      {
          dataGridView1.AutoGenerateColumns = false;
          dataGridView1.DataSource = Datos.Cargar();

          foreach (DataGridViewRow row in dataGridView1.Rows)
          {
              row.Height = 100;
              DataRowView rows = row.DataBoundItem as DataRowView;
              row.Cells["Foto"].Value = ConvertImage.ByteArrayToImage((byte[])rows["Foto"]);
          }
      }

   Private Sub cargar()
      dataGridView1.AutoGenerateColumns = False
      dataGridView1.DataSource = Datos.Cargar()

      For Each row As DataGridViewRow In dataGridView1.Rows
          row.Height = 100
          Dim rows As DataRowView = TryCast(row.DataBoundItem, DataRowView)
          row.Cells("Foto").Value = ConvertImage.ByteArrayToImage(DirectCast(rows("Foto"), Byte()))
      Next
  End Sub

Primero tenemos un método cargar que sera donde se cargaran los datos de nuestra tabla en el datagrid, y recorremos el datagriedview para convertir nuestro array de byte en image y así podes visualizar la imagen en el datagriedview, cuando queramos cargar los datos en el datagrid lo único que ariamos es llamar este método.

Ahora veamos el código de nuestro botón que usaremos para buscar la imagen.
       private void btnbuscar_Click(object sender, EventArgs e)
      {
          OpenFileDialog file = new OpenFileDialog();
          file.Filter = "Archivo JPG|*.jpg";

          if (file.ShowDialog() == DialogResult.OK)
          {
              pictureBox1.Image = Image.FromFile(file.FileName);
          }
      }

   Private Sub btnbuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnbuscar.Click
      Dim file As New OpenFileDialog()
      file.Filter = "Archivo JPG|*.jpg"
      If file.ShowDialog() = DialogResult.OK Then
          pictureBox1.Image = Image.FromFile(file.FileName)
      End If
  End Sub

Se usa OpenFileDialog para poder buscar una imagen y luego la cargamos en el Picturebox.

Ahora veamos el código del botón para insertar registros.
       private void btnagregar_Click(object sender, EventArgs e)
      {
          Datos.Insert(txtnombre.Text,txtapellido.Text,ConvertImage.ImageToByteArray(pictureBox1.Image));
          cargar();
      }

   Private Sub btnagregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnagregar.Click
      Datos.Insert(txtnombre.Text, txtapellido.Text, ConvertImage.ImageToByteArray(pictureBox1.Image))
      cargar()
  End Sub

Lo único que hacemos es llamar al método Insert de nuestra clase Datos y le enviamos los parámetros y luego llamamos al metodo cargar para que los datos que se inserten se vayan mostrando en el datagriedview.

Captura

Eso es todo espero les sirva mucho saludos desde El Salvador...

Descargar Proyecto C#

Descargar Proyecto VB.Net


No olvides suscribirte al blog para estar pendientes de mis últimos artículos.

Comprobar si Existe Registro en BD C# - VB.Net

jueves, 26 de julio de 2012

He notado con frecuencia en los diferentes foros de programación que hay en la web preguntar como saber si un registro existe en la bd, como también recuperar el id de un registro desde el código de nuestra aplicacion pues bien en este articulo se explicara como hacerlo.

En este articulo trataremos los siguientes puntos.
  1. Comprobar si un registro existe por medio del id.
  2. Recuperar el ultimo id ingresado e ir incrementándolo.
  3. Comprobar Datos antes de ingresar un registro.

El ejemplo esta desarrollado en visual estudio 2010 en c# y vb.net y se usa sqlexpres 2008.

Para este ejemplo uso una base de datos llamada Database que cuenta con una tabla Personas.

BD

La aplicacion tiene el siguiente diseño.

Diseño

Ahora a programar agreguemos una clase(modulo en el caso de vb.net) a nuestro proyecto llamado Datos aquí tendremos todos los métodos que usaremos para que desde el código de nuestro formulario solo los llamemos.

Veamos primeramente el método que se encargara de cargar todos los datos de nuestra bd.
       public static DataTable Cargar()
     {
         using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString()))
         {
             DataTable dt = new DataTable();
             string query = "SELECT * FROM PERSONAS ORDER BY Id ASC";
             SqlCommand cmd = new SqlCommand(query, conn);
             SqlDataAdapter adap = new SqlDataAdapter(cmd);
             adap.Fill(dt);
             return dt;
         }
     }

    Public Function Cargar() As DataTable
     Using conn As New SqlConnection(ConfigurationManager.ConnectionStrings("default").ToString())
         Dim dt As New DataTable()
         Dim query = "SELECT * FROM PERSONAS ORDER BY Id ASC"
         Dim cmd As New SqlCommand(query, conn)
         Dim adap As New SqlDataAdapter(cmd)
         adap.Fill(dt)
         Return dt
     End Using
 End Function

Este código ya es conocido por todos ya que en casi todos mis artículos los uso para cargar los datos de la bd, es un método que retorna un datatable con todos los datos de la bd.

Ahora veamos el método que nos servirá para comprobar si un registro existe o no.
      public static bool Existe(int id)
     {
         using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString()))
         {
             string query = "SELECT COUNT(*) FROM PERSONAS WHERE ID=@Id";
             SqlCommand cmd = new SqlCommand(query, conn);
             cmd.Parameters.AddWithValue("Id", id);
             conn.Open();

             int count = Convert.ToInt32(cmd.ExecuteScalar());
             if (count == 0)
                 return false;
             else
                 return true;
         }
     }

    Public Function Existe(ByVal id As Integer) As Boolean
     Using conn As New SqlConnection(ConfigurationManager.ConnectionStrings("default").ToString())
         Dim query = "SELECT COUNT(*) FROM PERSONAS WHERE ID=@Id"
         Dim cmd As New SqlCommand(query, conn)
         cmd.Parameters.AddWithValue("Id", id)
         conn.Open()

         Dim count As Integer = Convert.ToInt32(cmd.ExecuteScalar())
         If count = 0 Then
             Return False
         Else
             Return True
         End If
     End Using
 End Function

Tenemos el método Existe que es de tipo bool y que también recibe un parámetro en este caso sera el id que sera por el cual comprobaremos si el registro existe, vemos que en la consulta a la bd usamos la instrucción COUNT que devuelve el numero de registros que existe con ese id, también usamos el método ExecuteScalar() para comprobar si encontró registro con el id si el valor es cero es porque no existe el registro entonces retornamos false y retornamos true si ya existe el registro es decir que si encontró registro con ese id.

Ahora veamos como recuperar el ultimo id ingresado, esto lo aremos porque el campo id no es autonumerico por eso necesitamos obtener por medio de código cual sera el próximo valor a ingresar.
      public static int RecuperarId()
     {
         using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString()))
         {
             string query = "SELECT  MAX(Id) FROM PERSONAS";
             SqlCommand cmd = new SqlCommand(query, conn);
             conn.Open();

             return Convert.ToInt32(cmd.ExecuteScalar());
         }
     }

    Public Function RecuperarId() As Integer
     Using conn As New SqlConnection(ConfigurationManager.ConnectionStrings("default").ToString())
         Dim query = "SELECT  MAX(Id) FROM PERSONAS"
         Dim cmd As New SqlCommand(query, conn)
         conn.Open()

         Return Convert.ToInt32(cmd.ExecuteScalar())
     End Using
 End Function

Tenemos el método RecuperarId que retorna un valor numérico que sera el valor del ultimo id, vemos que en la query a nuestra bd usamos la función MAX de sql que devuelve el valor máximo de un campo de nuestra tabla en este caso el id y por ultimo retornamos ese valor usando nuevamente el método ExecuteScalar.

Por ultimo tenemos el método Insert que nos servirá para insertar un nuevo registro.
      public static void Insert(int id, string nombre, string apellido, int edad)
     {
         using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString()))
         {
             string query = "INSERT INTO PERSONAS(Id,Nombre,Apellido,Edad) VALUES(@Id,@Nombre,@Apellido,@Edad)";
             id = RecuperarId() + 1;
             SqlCommand cmd = new SqlCommand(query, conn);
             cmd.Parameters.AddWithValue("Id", id);
             cmd.Parameters.AddWithValue("Nombre", nombre);
             cmd.Parameters.AddWithValue("Apellido", apellido);
             cmd.Parameters.AddWithValue("Edad", edad);
             conn.Open();
             try
             {
                 cmd.ExecuteNonQuery();
                 MessageBox.Show("Registro Ingresado con Exito...");
             }
             catch (Exception)
             {
                 MessageBox.Show("Error no se Pudo Ingresar el Registro...");
             }
         }
     }

    Public Sub Insert(ByVal id As Integer, ByVal nombre As String, ByVal apellido As String, ByVal edad As Integer)
     Using conn As New SqlConnection(ConfigurationManager.ConnectionStrings("default").ToString())
         Dim query = "INSERT INTO PERSONAS(Id,Nombre,Apellido,Edad) VALUES(@Id,@Nombre,@Apellido,@Edad)"
         id = RecuperarId() + 1
         Dim cmd As New SqlCommand(query, conn)
         cmd.Parameters.AddWithValue("Id", id)
         cmd.Parameters.AddWithValue("Nombre", nombre)
         cmd.Parameters.AddWithValue("Apellido", apellido)
         cmd.Parameters.AddWithValue("Edad", edad)
         conn.Open()
         Try
             cmd.ExecuteNonQuery()
             MessageBox.Show("Registro Ingresado con Exito...")
         Catch ex As Exception
             MessageBox.Show("Error no se Pudo Ingresar el Registro...")
         End Try
     End Using
 End Sub

creamos el método Insert y le pasamos los parámetros para insertar un nuevo registro, luego hacemos la query a la bd para hacer el insert y le pasamos los parámetros de cada campo, algo importante de mencionar es que antes de enviar el parámetro del id calculamos su valor haciendo uso del método RecuperarId que como dijimos devuelve el valor máximo de id entonces a este solo le sumamos 1 para que siempre se vaya incrementado en 1.

Eso seria todo en nuestra clase Datos.

Ahora en el evento load de nuestro formulario cargamos todos los datos.
       private void Form1_Load(object sender, EventArgs e)
     {
         dataGridView1.DataSource = Datos.Cargar();
     }

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     DataGridView1.DataSource = Datos.Cargar()
 End Sub

Lo unico que hacemos es cargar todos los datos de nuestro tabla llamando el método.
Cargar.

Ahora en el evento del botón que usaremos para comprobar si existe el registro tendremos el siguiente código.
      private void btncomprobar_Click(object sender, EventArgs e)
     {
         if (!Datos.IsNumeric(txtcomprobar.Text))
             MessageBox.Show("Ingres un Valor Numerico...");
         else
         {
             if (!Datos.Existe(Convert.ToInt32(txtcomprobar.Text)))
                 MessageBox.Show("Registro No Existe...");
             else
                 MessageBox.Show("Registro Ya Existe...");
         }
     }

    Private Sub btncomprobar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btncomprobar.Click
     If (Not IsNumeric(txtcomprobar.Text)) Then
         MessageBox.Show("Ingres un Valor Numerico...")
     Else
         If (Not Datos.Existe(Convert.ToInt32(txtcomprobar.Text))) Then
             MessageBox.Show("Registro No Existe...")
         Else
             MessageBox.Show("Registro Ya Existe...")
         End If
     End If
 End Sub

Antes de comprobar si existe el registro por medio del id comprobamos que el dato ingresado sea numerico si lo es entonces llamamos al metodo Existe y le pasamos el valor ingresado y mostramos los respectivos mensajes si el id ya existe o no.

Ahora en el evento del boton que usaremos para agregar un nuevo registro tendremos lo siguiente.
      private void btnagrear_Click(object sender, EventArgs e)
     {
         if (!Datos.IsNumeric(txtid.Text) | !Datos.IsNumeric(txtedad.Text))
         {
             MessageBox.Show("Ingres un Valor Numerico...");
         }
         else
         {
             if (!Datos.Existe(Convert.ToInt32(txtid.Text)))
             {
                 Datos.Insert(Convert.ToInt32(txtid.Text), txtnombre.Text, txtapellido.Text, Convert.ToInt32(txtedad.Text));
                 dataGridView1.DataSource = Datos.Cargar();
             }
             else
             {
                 MessageBox.Show("Id Ya Existe...");
             }
         }
     }

    Private Sub btnagrear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnagrear.Click
     If (Not IsNumeric(txtid.Text) Or Not IsNumeric(txtedad.Text)) Then
         MessageBox.Show("Ingres un Valor Numerico...")
     Else
         If (Not Datos.Existe(Convert.ToInt32(txtid.Text))) Then
             Datos.Insert(Convert.ToInt32(txtid.Text), txtnombre.Text, txtapellido.Text, Convert.ToInt32(txtedad.Text))
             DataGridView1.DataSource = Datos.Cargar()
         Else
             MessageBox.Show("Id Ya Existe...")
         End If
     End If
 End Sub

Antes de ingresar hacemos 2 validaciones primero comprobamos que el los datos del id y la edad sean numericos y tambien validamos que el id ingresado no exista si pasa las 2 validaciones agregamos el registro si no mostramos un mensaje que no se pudo agregar.

comprobar


agregar

Eso es todo espero les sirva de algo saludos desde El Salvador.

Descargar Proyecto C#

Descargar Proyecto VB.Net

Formulario de Contacto con Recaptcha Asp.Net

jueves, 19 de julio de 2012

Siempre que desarrollamos una aplicacion web algo que nunca debe faltar es un formulario de contacto para que los usuarios que visitan o usan nuestra aplicacion web puedan ponerse en contacto con nosotros.

Pues bien ahora veremos como hacer un formulario de contacto en asp.net y ademas le agregaremos recaptcha para evitar spam.

Aspectos a considerar
El ejemplo esta desarrollado en visual estudio 2010 con c# y vb.net
Tener una cuenta de correo gmail(que sera donde recibirás los mensajes).

Lo primero sera descargar la librería de recaptcha para asp.net (el ejemplo ya incluirá la librería).

El diseño de nuestro formulario de contacto sera el siguiente(lo pueden personalizar como quieran)

Diseño


Como pueden observar el formulario tiene 4 textbox que ademas están validados con los controles de validación para que el usuario rellene todos los datos e ingrese un correo valido, también tiene el control recaptcha, tenemos un botón y abajo del botón tenemos un label que nos servirá para mostrar un mensaje al usuario para que sepa si se envió o no el mensaje.

Ahora en nuestro web.config tendremos que agregar lo siguiente.











Lo que hacemos es agregar los datos de nuestro servidor de correo en este caso utilizamos smtp de gmail, lo que esta en mayúscula lo tienen que remplazar por sus credencias(correo y password) de gmail lo medas no lo toquen.

Ahora nos vamos al código de nuestro formulario y empezamos a programar, creemos los siguientes métodos.
private void Limpiar()
{
txttitulo.Text = "";
txtnombre.Text = "";
txtcorreo.Text = "";
txtmensaje.Text = "";
lblaviso.Text = "";
}

private void Enviar(string titulo, string nombre, string correo, string mensaje)
{

if (Page.IsValid)
{
string to = ConfigurationManager.AppSettings["To"];
MailMessage mail = new MailMessage();
mail.To.Add(new MailAddress(to));
mail.From = new MailAddress(correo, nombre);
mail.Subject = titulo + " " + correo;
mail.Body = mensaje + "\n\n" + nombre + "\n" + correo;

SmtpClient smtp = new SmtpClient();
smtp.Send(mail);

Limpiar();
lblaviso.Text = "Mensaje Enviado gracias por tomarse el tiempo de escribir...!";
}
else
{
lblaviso.Text = "No has escrito correctamente el codigo de verificacion";

}
}

    Private Sub Limpiar()
txttitulo.Text = ""
txtnombre.Text = ""
txtcorreo.Text = ""
lblaviso.Text = ""
End Sub
Private Sub Enviar(ByVal titulo As String, ByVal nombre As String, ByVal correo As String, ByVal mensaje As String)
If (Page.IsValid) Then
Dim t As String = ConfigurationManager.AppSettings("To")
Dim mail As New MailMessage()
mail.To.Add(New MailAddress(t))
mail.From = New MailAddress(correo, nombre)
mail.Subject = titulo + " " + correo
mail.Body = mensaje + vbLf & vbLf + nombre + vbLf + correo

Dim smtp As New SmtpClient()
smtp.Send(mail)

Limpiar()
lblaviso.Text = "Mensaje Enviado gracias por tomarse el tiempo de escribir...!"
Else
lblaviso.Text = "No has escrito correctamente el codigo de verificacion"
End If
End Sub

El primer método Limpiar lo único que ara es limpiar los textbox.
El método Enviar es el que nos servirá para enviar el mensaje podemos ver que recibe 4 parámetros que son los que necesitamos para que se envié el mensaje, luego comprobamos que la pagina se valide correctamente y dentro leemos los datos del web.config y armamos el correo haciendo uso de la clase MailMessage y luego enviamos el correo usando la clase SmtpClient y mostramos los mensajes que el mensaje se envió correctamente, y si la pagina no se valida correctamente mostramos mensajes que no se pudo enviar el correo mensaje.

Por ultimo dentro del evento click del botón hacemos lo siguiente.
Enviar(txttitulo.Text,txtnombre.Text,txtcorreo.Text,txtmensaje.Text);

Enviar(txttitulo.Text, txtnombre.Text, txtcorreo.Text, txtmensaje.Text)

Lo único que hacemos es llamar al método Enviar y le pasamos los datos correspondientes.

Captura

Captura


Eso seria todo por ahora espero les sirva a alguien saludos desde El Salvador.

Descargar Proyecto C#

Descargar Proyecto VB.Net

Validar Textbox Usando Jquery en Asp.Net

lunes, 9 de julio de 2012

Siempre tenemos la necesidad de validar los datos ingresados por el usuario en nuestras aplicaciones, ahora veremos como validar los datos ingresados en aplicaciones asp.net usando el plugin validate de jquery.

Lo primero que tenemos que hacer es descargar la librería jquery library y el plugin Plugins/Validation

La descarga del ejemplo ya incluirá las 2 librerías necesarias.

El diseño del formulario sera el siguiente.

Diseño


Como pueden notar es un diseño simple 3 textbox uno para validar el nombre otro para validar la edad y el ultimo para validar un correo también tenemos un botón.

Ahora veamos el código de la función jquery para validar los datos.
<script type="text/javascript" src="jquery/jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="jquery/jquery.validate.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$("#form1").validate({
rules: {
'txtnombre': 'required',
'txtedad': { required: true, number: true, minlength: 1 },
'txtcorreo': { required: true, email: true }
},
messages: {
'txtnombre': 'Ingrese su nombre',
'txtedad': { required: 'Ingrese su edad', number: 'Debe ingresar datos numericos' },
'txtcorreo': { required: 'Ingrese un correo electrónico', email: 'Ingrese un correo valido. Ejemplo: cristian@hotmail.com' }
},

debug: true,
submitHandler: function (form) {
var nombre = $('#<%=txtnombre.ClientID%>').val();
var edad = $('#<%=txtedad.ClientID%>').val();
alert("Hola" + " " + nombre + " " + "tu edad es:" + "" + edad);
}
});
});
</script>

Ahora veamos las cosas mas importantes del código.
Las primeras 2 lineas son necesarias para poder hacer uso de jquery y el plugin validate.
form1 es el nombre del id del formulario que estamos validando.
dentro de rules: {} tenemos las reglas o validaciones que aremos a nuestros controles.
txtnombre, txtedad y txtcorreo es el nombre del id de nuestros controles.
dentro de messages: {} personalizamos los mensajes de error que se mostraran.

El código que sigue luego de messages.
            debug: true,
submitHandler: function (form) {
var nombre = $('#<%=txtnombre.ClientID%>').val();
var edad = $('#<%=txtedad.ClientID%>').val();
alert("Hola" + " " + nombre + " " + "tu edad es:" + "" + edad);
}

Este código es lo que ara el formulario en caso que los datos se ingresen correctamente, en este caso lo único que hacemos es mostrar el nombre y la edad en un mensaje.

Validacion

Validacion


Como podemos notar validar datos usando jquery es fácil y lo mejor es que toda la validación se hace al lado del cliente.

Eso es todo por ahora el ejemplo es sencillo solo para explicar un poco como funciona este plugin de jquery, todo se puede personalizar darle formato al mensaje de error cambiar el color etc.

Descargar Proyecto

Agregar y Buscar Datos en Excel C# - VB.Net

jueves, 5 de julio de 2012

Algunas veces como programadores nos toca manejar datos de excel en nuestras aplicaciones, pues ahora veremos como hacerlo usando ado.net y un poco de linq.

En este articulo trataremos los siguientes puntos.
Cargar datos de excel en un datagriedview.
Agregar datos a excel.
Buscar registros usando linq.
Usar linq sobre un datatable

Algo importante de aclarar es que para este ejemplo uso un archivo de excel .xls si quieren hacerlo con archivos .xlsx revisar las distintas cadenas de conexión Connection strings for Excel 2007

El ejemplo esta desarrollado con visual estudio 2010 en c# y vb.net.

Nuestro archivo excel llamado DatosExcel.xls tiene lo siguientes datos.

DatosExcel

Y nuestra aplicacion tendrá el siguiente diseño.

Diseño

Las columnas del datagriedview están definidas en tiempo de diseño.

Columnas

Una vez explicado nuestro diseño veamos el código de nuestro formulario.

Lo primero sera agregar el siguiente namespace.
using System.Data.OleDb;

Imports System.Data.OleDb

Ahora veamos como recuperar los datos de excel y mostrarlos en nuestro datagriedview.
string cn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=DatosExcel.xls;Extended Properties='Excel 8.0;HDR=Yes;IMEX=0'";
    public DataTable Datos()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("Id");
        dt.Columns.Add("Nombre");
        dt.Columns.Add("Sueldo", typeof(int));
        using (OleDbConnection cnn = new OleDbConnection(cn))
        {
            string sql = "SELECT *FROM [Hoja1$]";

            OleDbCommand command = new OleDbCommand(sql, cnn);

            OleDbDataAdapter da = new OleDbDataAdapter(command);

            da.Fill(dt);
            return dt;
        }
    }

    public void CargarDatos()
    {
        dataGridView1.AutoGenerateColumns = false;
        dataGridView1.DataSource = Datos();
    }

Public Function Datos() As DataTable
    Dim dt As New DataTable()
    dt.Columns.Add("Id")
    dt.Columns.Add("Nombre")
    dt.Columns.Add("Sueldo", GetType(Integer))
    Using cnn As New OleDbConnection(cn)
        Dim sql As String = "SELECT * FROM [Hoja1$]"

        Dim command As New OleDbCommand(sql, cnn)

        Dim da As New OleDbDataAdapter(command)

        da.Fill(dt)
        Return dt
    End Using
End Function
Public Sub CargarDatos()
    dataGridView1.AutoGenerateColumns = False
    dataGridView1.DataSource = Datos()
End Sub

Primeramente se establece la cadena de conexión de nuestro archivo a nivel de clase, y luego cree un método que retornara un datatable con los datos y como pueden notar se recuperan los datos de nuestro archivo excel de igual manera como se aria con una bd, algo importante que hay que mencionar es que en la consulta select tenemos [Hoja1$] donde Hoja1 es el nombre de nuestra hoja de excel.
Por ultimo tenemos el método CargarDatos donde lo único que se hace es mostrar los datos que recuperamos en nuestro datagriedview.

Ahora veamos como agregar registros a nuestro archivo excel.
using (OleDbConnection cnn = new OleDbConnection(cn))
        {
            cnn.Open();
            using (OleDbCommand cmd = cnn.CreateCommand())
            {
                cmd.CommandText = "INSERT INTO [Hoja1$] (Id,Nombre,Sueldo) values(@id,@nom,@suel)";
                cmd.Parameters.AddWithValue("@id", textBox1.Text);
                cmd.Parameters.AddWithValue("@nom", textBox2.Text);
                cmd.Parameters.AddWithValue("@suel", textBox3.Text);
                cmd.ExecuteNonQuery();
                MessageBox.Show("Datos Ingresados Correctamente...");
            }
            cnn.Close();
        }
        CargarDatos();
        Limpiar();

Using cnn As New OleDbConnection(cn)
        cnn.Open()
        Using cmd As OleDbCommand = cnn.CreateCommand()
            cmd.CommandText = "INSERT INTO [Hoja1$] (Id,Nombre,Sueldo) values(@id,@nom,@suel)"
            cmd.Parameters.AddWithValue("@id", textBox1.Text)
            cmd.Parameters.AddWithValue("@nom", textBox2.Text)
            cmd.Parameters.AddWithValue("@suel", textBox3.Text)
            cmd.ExecuteNonQuery()
            MessageBox.Show("Datos Ingresados Correctamente...")
        End Using
        cnn.Close()
    End Using
    CargarDatos()
    Limpiar()

Hacemos un insert de la misma manera que se haría con un bd solo que en este caso indicamos el nombre de nuestra hoja de excel (Hoja1) y el nombre de las columnas. Luego llamamos al método CargarDatos para que vuelva a cargar el datagriedview con los registros ingresados y por ultimo el método Limpiar que lo único que hace es limpiar los textbox después de insertar un registro.

Ahora veamos como usar linq sobre un datatable para obtener datos filtrados en este caso usaremos el sueldo para obtener los datos filtrados.
           DataTable dt = Datos();
        int sueldo = Convert.ToInt32(txtbuscar.Text);
        var query = from datos in dt.AsEnumerable() where datos.Field<int>("Sueldo") >= sueldo select datos;
        //var query = dt.AsEnumerable().Where(datos=> datos.Field<int>("Sueldo") >= sueldo);
        if(query.Count() > 0)
        {
            dataGridView1.AutoGenerateColumns = false;
            dataGridView1.DataSource = query.CopyToDataTable();
        }
        else
            MessageBox.Show("No Se Encontraron Registros");

       Dim dt As DataTable = Datos()
    Dim sueldo As Integer = Convert.ToInt32(txtbuscar.Text)
    Dim query = From datos In dt.AsEnumerable() Where datos.Field(Of Integer)("Sueldo") >= sueldo Select datos
    'Dim query = dt.AsEnumerable().Where(Function(datos) datos.Field(Of Integer)("Sueldo") >= sueldo)
    If query.Count() > 0 Then
        DataGridView1.AutoGenerateColumns = False
        DataGridView1.DataSource = query.CopyToDataTable()
    Else
        MessageBox.Show("No Se Encontraron Registros")
    End If

Lo primero que hacemos es crear un datatable al cual le asignamos todos los datos de nuestro archivo excel (con el método Datos), luego usamos linq para filtrar los datos del datatable y así ahorrarnos el volver hacer otra consulta a nuestra hoja de excel.
var query = from datos in dt.AsEnumerable() where datos.Field<int>("Sueldo") >= sueldo select datos;

Dim query = From datos In dt.AsEnumerable() Where datos.Field(Of Integer)("Sueldo") >= sueldo Select datos

Usamos la columna sueldo para filtrar los datos, lo que hacemos con linq es recuperar los registros que sean mayores o iguales al sueldo digitado en el textbox(txtbuscar).
Lo que aparece como comentario es otra manera de obtener los registros filtrados usando expresión lambda.

Datos

Filtro


Eso es todo espero les sirva de algo saludos desde El Salvador.

Descargar Proyecto C#

Descargar Proyecto VB.Net