Mostrando entradas con la etiqueta source code. Mostrar todas las entradas
Mostrando entradas con la etiqueta source code. Mostrar todas las entradas

sábado, 15 de diciembre de 2012

Validación con expresiones regulares en C#.NET

Las expresiones regulares son modelos que describen las combinaciones de caracteres en el texto. Se podrían definir como una serie de carácteres que forman un patrón, que representan a otro grupo de carácteres mayor, de tal forma que podemos comparar el patrón con otros conjuntos de carácteres para ver las coincidencias. Las expresiones regulares pueden utilizarse en múltiples lenguajes de programación pero en esta entrada vamos a ver un ejemplo de validación de formularios mediante Javascript y haciendo uso de expresiones regulares.
Un buen tutorial para iniciarse en el manejo de expresiones regulares lo podemos encontrar en Desarrolloweb. Para realizar el ejemplo siguiente no hay porque conocer en profundidad su manejo. A continuación muestro una serie de tablas a modo de chuleta para que podamos utilizarlas con un simple corta y pega.
La tabla siguiente contiene los caracteres especiales de las expresiones regulares.
Carácter Texto buscado
^ Principio de entrada o línea.
$ Fin de entrada o línea.
* El carácter anterior 0 o más veces.
+ El carácter anterior 1 o más veces.
? El carácter anterior una vez como máximo (es decir, indica que el carácter anterior es opcional).
. Cualquier carácter individual, salvo el de salto de línea.
x|y x o y.
{n} Exactamente n apariciones del carácter anterior.
{n,m} Como mínimo n y como máximo m apariciones del carácter anterior.
[abc] Cualquiera de los caracteres entre corchetes. Especifique un rango de caracteres con un guión (por ejemplo, [a-f] es equivalente a [abcdef]).
[^abc] Cualquier carácter que no esté entre corchetes. Especifique un rango de caracteres con un guión (por ejemplo, [^a-f] es equivalente a [^abcdef]).
\b Límite de palabra (como un espacio o un retorno de carro).
\B Cualquiera que no sea un límite de palabra.
\d Cualquier carácter de dígito. Equivalente a [0-9].
\D Cualquier carácter que no sea de dígito. Equivalente a [^0-9].
\f Salto de página.
\n Salto de línea.
\r Retorno de carro.
\s Cualquier carácter individual de espacio en blanco (espacios, tabulaciones, saltos de página o saltos de línea).
\S Cualquier carácter individual que no sea un espacio en blanco.
\t Tabulación.
\w Cualquier carácter alfanumérico, incluido el de subrayado. Equivalente a [A-Za-z0-9_].
\W Cualquier carácter que no sea alfanumérico. Equivalente a [^A-Za-z0-9_].
La tabla siguiente contiene algunos de los patrones más utilizados a la hora de validar formularios. Si alguien conoce alguna expresión regular más -que pueda ser útil en la validación de formularios- la puede poner en los comentarios y yo la incorporaré a esta tabla.
Cualquier letra en minuscula [a-z]
Entero ^(?:\+|-)?\d+$
Correo electrónico /[\w-\.]{3,}@([\w-]{2,}\.)*([\w-]{2,}\.)[\w-]{2,4}/
URL ^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)( [a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$
Contraseña segura (?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{8,10})$(Entre 8 y 10 caracteres, por lo menos un digito y un alfanumérico, y no puede contener caracteres espaciales)
Fecha ^\d{1,2}\/\d{1,2}\/\d{2,4}$(Por ejemplo 01/01/2007)
Hora ^(0[1-9]|1\d|2[0-3]):([0-5]\d):([0-5]\d)$(Por ejemplo 10:45:23)
Número tarjeta de crédito ^((67\d{2})|(4\d{3})|(5[1-5]\d{2})|(6011))(-?\s?\d{4}){3}|(3[4,7])\ d{2}-?\s?\d{6}-?\s?\d{5}$
Número teléfono ^[0-9]{2,3}-? ?[0-9]{6,7}$
Código postal ^([1-9]{2}|[0-9][1-9]|[1-9][0-9])[0-9]{3}$
Certificado Identificación Fiscal ^(X(-|\.)?0?\d{7}(-|\.)?[A-Z]|[A-Z](-|\.)?\d{7}(-|\.)? [0-9A-Z]|\d{8}(-|\.)?[A-Z])$
Valida sólo números del 1 al 12 (ideal para meses) ^([0-1]?[0-2]|[0-9])$
Valida de 0.1 a 9.9 ^([0-9].[1-9])$
Valida desde 10.01 hasta 99.99 con 2 decimales máximo ^[0-9][0-9](.[0-9][0-9])$
Valida desde 0.01 hasta 99.99 con sólo 2 decimales máximo ^[0-9]?[0-9](.[0-9][0-9])$
Aquí les dejo el código:
private void txtcodigo_KeyUp(object sender, KeyEventArgs e)
        {
            if (es_numero(txtcodigo))
            {
                errorProvider1.SetError(txtcodigo, String.Empty);
                txtcodigo.BackColor = Color.Honeydew;
            }
            else
            {
                errorProvider1.SetError(txtcodigo, "Solo numeros");
                txtcodigo.BackColor = Color.MistyRose;
            }
        }

        private void txtemail_KeyUp(object sender, KeyEventArgs e)
        {
            if (es_email(txtemail))
            {
                errorProvider1.SetError(txtemail, String.Empty);
                txtemail.BackColor = Color.Honeydew;
            }
            else
            {
                errorProvider1.SetError(txtemail, "ejemplo@ejemplo.com");
                txtemail.BackColor = Color.MistyRose;
            }
        }


        private void txtnombre_KeyUp(object sender, KeyEventArgs e)
        {
            if (es_cadena(txtnombre))
            {
                errorProvider1.SetError(txtnombre, String.Empty);
                txtnombre.BackColor = Color.Honeydew;
            }
            else
            {
                errorProvider1.SetError(txtnombre, "Solo letras");
                txtnombre.BackColor = Color.MistyRose;
            }
        }

        private void txttelf_KeyUp(object sender, KeyEventArgs e)
        {
            if (es_telefono(txttelf))
            {
                errorProvider1.SetError(txttelf, String.Empty);
                txttelf.BackColor = Color.Honeydew;
            }
            else
            {
                errorProvider1.SetError(txttelf, "Formato: 999-9999");
                txttelf.BackColor = Color.MistyRose;
            }
        }

        private void txtweb_KeyUp(object sender, KeyEventArgs e)
        {
            if (es_url(txtweb))
            {
                errorProvider1.SetError(txtweb, String.Empty);
                txtweb.BackColor = Color.Honeydew;
            }
            else
            {
                errorProvider1.SetError(txtweb, "www.example.com");
                txtweb.BackColor = Color.MistyRose;
            }
        }

        private void txtsueldo_KeyUp(object sender, KeyEventArgs e)
        {
            if (es_decimal(txtsueldo))
            {
                errorProvider1.SetError(txtsueldo, String.Empty);
                txtsueldo.BackColor = Color.Honeydew;
            }
            else
            {
                errorProvider1.SetError(txtsueldo, "Formato: 00,00");
                txtsueldo.BackColor = Color.MistyRose;
            }
        }

        private static bool es_numero(Control mitextbox)
        {

            Regex regex = new Regex(@"^[0-9]+$");
            return regex.IsMatch(mitextbox.Text);

        }

        private static bool es_cadena(Control mitextbox)
        {

            Regex regex = new Regex(@"^[^ ][a-zA-Z ]+[^ ]$");
            return regex.IsMatch(mitextbox.Text);

        }

        private static bool es_telefono(Control mitextbox)
        {

            Regex regex = new Regex(@"^([0-9]{3})[-. ]?([0-9]{4})$");
            return regex.IsMatch(mitextbox.Text);
            
        }

        private static bool es_decimal(Control mitextbox)
        {

            Regex regex = new Regex(@"^[0-9]{1,9}([\.\,][0-9]{1,3})?$");
            return regex.IsMatch(mitextbox.Text);
            
        }

        private static bool es_url(Control mitextbox)
        {

            Regex regex = new Regex(@"^[a-zA-Z0-9\-\.]+\.(com|org|net|mil|edu|COM|ORG|NET|MIL|EDU)$");
            return regex.IsMatch(mitextbox.Text);
        }

        private static bool es_email(Control mitextbox)
        {
            
            Regex regex = new Regex(@"^(?("")(""[^""]+?""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
                @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9]{2,17}))$");

            // Resultado: 
            //       Valid: david.jones@proseware.com 
            //       Valid: d.j@server1.proseware.com 
            //       Valid: jones@ms1.proseware.com 
            //       Invalid: j.@server1.proseware.com 
            //       Invalid: j@proseware.com9 
            //       Valid: js#internal@proseware.com 
            //       Valid: j_9@[129.126.118.1] 
            //       Invalid: j..s@proseware.com 
            //       Invalid: js*@proseware.com 
            //       Invalid: js@proseware..com 
            //       Invalid: js@proseware.com9 
            //       Valid: j.s@server1.proseware.com

            return regex.IsMatch(mitextbox.Text);

        }
Este codigo va para el boton Nuevo
txtcodigo.Text = String.Empty;
            txtcodigo.BackColor = Color.White;
            errorProvider1.SetError(txtcodigo,String.Empty);

            txtnombre.Text = String.Empty;
            txtnombre.BackColor = Color.White;
            errorProvider1.SetError(txtnombre, String.Empty);

            txttelf.Text = String.Empty;
            txttelf.BackColor = Color.White;
            errorProvider1.SetError(txttelf, String.Empty);

            txtweb.Text = String.Empty;
            txtweb.BackColor = Color.White;
            errorProvider1.SetError(txtweb, String.Empty);

            txtemail.Text = String.Empty;
            txtemail.BackColor = Color.White;
            errorProvider1.SetError(txtemail, String.Empty);

            txtsueldo.Text = String.Empty;
            txtsueldo.BackColor = Color.White;
            errorProvider1.SetError(txtsueldo, String.Empty);
y este codigo va en el boton Grabar
if (es_numero(txtcodigo) == true && es_cadena(txtnombre) == true && es_telefono(txttelf) == true &&
                es_url(txtweb) == true && es_email(txtemail) == true && es_decimal(txtsueldo) == true)
            {
                MessageBox.Show("OK");
            }
            else
            {
                MessageBox.Show("Complete todos los campos.");
            }

Deshabilitar boton Cerrar en winforms en Visual Basic.NET


Aqui les dejo este codigo que encontre navegando por Internet, este codigo lo ponen debajo de Public Class:
Dim _enabledcerrar As Boolean = False
     _
    Public Property enabledcerrar() As Boolean
        Get
            Return _enabledcerrar
        End Get
        Set(ByVal value As Boolean)
            If _enabledcerrar <> value Then
                _enabledcerrar = value
            End If
        End Set
    End Property
    Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams
        Get
            Dim cp As CreateParams = MyBase.CreateParams
            If _enabledcerrar = False Then
                Const CS_NOCLOSE As Integer = &H200
                cp.ClassStyle = cp.ClassStyle Or CS_NOCLOSE
            End If
            Return cp
        End Get
    End Property

domingo, 11 de noviembre de 2012

Agregar y Grabar en datagridview para guardar en SQL con Transacciones en Visual Basic .NET

Crearemos una forma con los objetos como aparece en la imagen, ademas agregaremos la libreria de sqlclient

Imports System.Data.SqlClient
para el ejemplo crearemos una base de datos con el nombre DBPRUEBA, que nos permita almacenar los datos.
CREATE DATABASE DBPRUEBA
USE DBPRUEBA
CREATE TABLE datos(  
id_datos INT PRIMARY KEY IDENTITY(1,1),  
nombre VARCHAR(50),  
deporte VARCHAR(50),  
fecha_inscripcion datetime    )
Ahora crearemos 4 columnas dentro del datagrid. que nos permitan agregar los datos ingresados.
Ahora para agregar los datos, hemos determinado un textbox para un nombre un combobox con unos deportes y por ultimo un datetimepicker para una fecha. tenemos un boton agregar que nos permitira, agregar un row al datagridview.
Este es el codigo para el boton agregar
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        If Me.TextBox1.Text <> String.Empty Then
            If Me.ComboBox1.Text <> String.Empty Then                  'agregamos la informacion a un row o fila del datagrid                  
                Me.DataGridView1.Rows.Add(Me.TextBox1.Text, Me.ComboBox1.Text, Me.DateTimePicker1.Value.ToShortDateString)                  'limpiamos los controles
                Me.TextBox1.Text = String.Empty
                Me.ComboBox1.SelectedItem = String.Empty
                Me.DateTimePicker1.Value = Today.Date
            Else
                MessageBox.Show("Ingrese un deporte", "", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
        Else
            MessageBox.Show("Ingrese un nombre", "", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If
    End Sub
una vez tenemos datos dentro de nuestro datagrid, si deseamos eliminar uno de nuestros rows o filas damos click en el boton eliminar, la cual quitara la fila del datagrid.
Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
        'se puede hacer referencia al nombre de la columna para saber donde hicieron click o solo con el e.columnindex sabiendo la posicion de la columna          
        'yo lo manejo asi por que se daran cuenta que en algun caso las columnas pueden aumentar o disminuir           
        'y se complicaria la cosa por que si cambia el numero de columnas habria que corregir siembre el indice            
        'si hicieron clic en la columna eliminar          
        If DataGridView1.Columns(e.ColumnIndex).Name = "Eliminar" Then              'eliminar row
            DataGridView1.Rows.RemoveAt(e.RowIndex)
        End If
    End Sub
Ahora podremos guardar nuestra informacion al hacer click en el boton guardar, aqui se validara que existan datos o mejor filas en el datagrid, ahora recorreremos nuestro datagrid por medio de un For. tendremos una varia de tipo string (SqlString ) donde agregaremos la sentencia para guardar en la base de datos (INSERT INTO), ademas de un araylist para agregar las sentencias.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If DataGridView1.Rows.Count > 0 Then
            Dim SqlString As String = String.Empty ' variable a la que asignaremos la sentencia              
            Dim ListSqlStrings As New ArrayList  'arregla donde ingresaremos las sentencias              
            'recorremos el datagrid como ya sabemos siempre se toma desde cero
            For i As Integer = 0 To DataGridView1.Rows.Count - 1                  'creamos la sentencia el row siempre tendra el valor de i para ir pasando de row en row                  
                'el campo .cells(0) indica la columna que esta ese dato, tambien puede hacerlo con el nombre de la celda .cells("Nombre")
                SqlString = "INSERT INTO datos (nombre,deporte,fecha_inscripcion) VALUES ('" + DataGridView1.Rows(i).Cells(0).Value.ToString() + "','" + DataGridView1.Rows(i).Cells(1).Value.ToString() + "','" + DataGridView1.Rows(i).Cells(2).Value.ToString() + "')"
                'agregamos la sentencia a la lista                  
                ListSqlStrings.Add(SqlString)
            Next
            If EjecutarTransaccion(ListSqlStrings) Then
                MessageBox.Show("Info. guardada correctamente")
                Close()
            Else
                MessageBox.Show("La Info. no se guardo")
            End If
        Else
            MessageBox.Show("No hay informacion para guardar")
        End If
    End Sub
Ahora una vez hallamos recorrido el datagrid y tengamos nuestras sentencias, podremos ejecutar nuestra transaccion SQl para guardar en la base de datos. En este punto haciendo un parentesis igualmente podra ejecutar una a una las sentencias si lo desea por medio de un executenonquery, pero para mi lo mas optimo es una transaccion. Volviendo al evento guardar la funcion Public Function EjecutarTransaccion(ByVal ListaSentencias As ArrayList) As Boolean recibira el arraylist y retornara un valor booleano para identificar si se realizo la transaccion. para ejecutar nuestra transaccion necesitamos una conexion como la siguiente.
Public Connection1 As New SqlConnection("Data Source=XSaint;Initial Catalog=DBPRUEBA;Integrated Security=SSPI")
Ahora la funcion ejecutartransaccion se ejecutara, si es correcta la transaccion retornara true de ser incorrecta podremos ver un mensaje y retornara un false
Public Function EjecutarTransaccion(ByVal ListaSentencias As ArrayList) As Boolean
        Dim band As Boolean = False
        If AbrirConexion() Then
            Dim command As SqlCommand = Connection1.CreateCommand()
            Dim transaction As SqlTransaction
            Dim strSentencia As Object
            Dim sentencia As String = ""
            transaction = Connection1.BeginTransaction()
            command.Connection = Connection1
            command.Transaction = transaction
            Try
                For Each strSentencia In ListaSentencias
                    sentencia = strSentencia.ToString()
                    command.CommandText = sentencia.ToString()
                    command.ExecuteNonQuery()
                Next
                transaction.Commit()
                band = True
            Catch ex As Exception
                MessageBox.Show(ex.Message)
                Try
                    transaction.Rollback()
                Catch ex2 As Exception
                    MessageBox.Show(ex2.Message)
                End Try
            Finally
                CerrarConexion()
            End Try
        End If
        Return band
    End Function
Si la transaccion es satisfactoria veremos un mensaje de satisfaccion. la clase transaccion utiliza dos funciones dicionales de abrir y cerrar conexion que nos permite establecer si la conexion es correcta o no.
Public Function AbrirConexion() As Boolean
        Dim band As Boolean = False
        Connection1.Open()
        Try

            band = True
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
        Return band
    End Function
    Public Function CerrarConexion() As Boolean
        Dim band As Boolean = False
        Connection1.Close()
        Try
            band = True
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
        Return band
    End Function
ahora podremos ver nuestra informacion, en la base de datos.

sábado, 6 de octubre de 2012

Llenar combobox con campos concatenados de una base de datos en C#

En este ejemplo utilizare la Base de Datos Northwind y concatenare los campos Nombre de Contacto y Compañia en un combobox.
El codigo es el siguiente:

public void llenarProfesor()
        {
            string enlace="Data Source=XSaint;Database=Northwind;Integrated Security=SSPI";
            string conect;            
            //enlace con la base de datos
            SqlConnection conexion = new SqlConnection();
            conexion.ConnectionString = enlace;
            conect = conexion.ConnectionString;
            //se declara el DataSet
            DataSet ds3 = new DataSet();
            //se indica la consulta e sql donde se elige el ID_Profesor
            //y se concatenan los campos Nombre y Apellido_P
            //en una variable llamada Name_Full
            SqlDataAdapter da3 = new SqlDataAdapter("Select CustomerID,(ContactName + \' \' + CompanyName) as Name_Full FROM Customers", conect);
            //se especifica la tabla
            da3.Fill(ds3, "Customers");
            comboBox1.DataSource = ds3.Tables[0].DefaultView;
            //el valor real será el ID_Profesor
            comboBox1.ValueMember = "CustomerID";
            //lo que mostrará sera la variable Name_Full la cual tiene concatenados los campos Nombre y Apellido_P
            comboBox1.DisplayMember = "Name_Full";
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            llenarProfesor();
        }

Como poner letra capital de todas las palabras de un string en C#

A menudo necesitamos capitalizar la primera letra de algunas palabras o algun texto(por ejemplo cuando queremos mostrar nombres completos de personas o ciudades, nombres, etcetera).
Como la clase string no tiene un metodo para hacer esto nosotros podemos pensar que no hay una solucion built-in en C# para este problema.
Bueno en realidad hay 2 formas de hacer esto:
Para este proyecto agregaremos 2 textbox y un boton:
Solucion 1
public static string Capitalize(string value)
        {
            return System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(value);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            textBox2.Text = Capitalize(textBox1.Text);            
        }

public static string CapitalizeWords(string value)
        {
            if (value == null)
                throw new ArgumentNullException("value");
            if (value.Length == 0)
                return value;

            StringBuilder result = new StringBuilder(value);
            result[0] = char.ToUpper(result[0]);
            for (int i = 1; i < result.Length; ++i)
            {
                if (char.IsWhiteSpace(result[i - 1]))
                    result[i] = char.ToUpper(result[i]);
            }
            return result.ToString();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            textBox2.Text = CapitalizeWords(textBox1.Text);            
        }

Usando Regex matches para comprobar si un String es alphanumerico en C#

El metodo regex.match de C# es tipicamente usado para validar un string o para asegurar que un string esta conformado de un patron particular sin necesidad de manipularlo. Abajo utilizo un metodo de extension de strings que usa regex matches en C# para comprobar si el string es alphanumerico. Retornara verdadero si el string dado contiene solo numeros y letras del alfabeto.
using System.Text.RegularExpressions;
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public static class CheckString
        {
            public static bool IsAlphanumeric(string source)
            {
                Regex pattern = new Regex("[^0-9a-zA-Z]");
                return !pattern.IsMatch(source);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string testString = textBox1.Text;

            if (CheckString.IsAlphanumeric(testString))
                textBox2.Text="Yes string is Alphanumeric!";
            else
                textBox2.Text="No string is not Alphanumeric!";

            
        }

viernes, 5 de octubre de 2012

AutoCompletar TextBox desde base de datos con Northwind y VB.NET

Hay que tener en cuenta que para utilizar esta opción, debes asignar las siguientes propiedades:
AutoCompleteMode: que sirve para indicar cómo queremos que se muestren los datos que encuentra mientras se escribe en el control.
AutoCompleteSource: que sirve para indicarle de dónde se obtendrán los datos que se usarán mientras se escribe.
En este ejemplo se utiliza AutoCompleteSource asignado a CustomSource debido a que la fuente de datos la obtenemos desde una ruta personalizada.
En el evento Load del formulario, se llama a la función AutoCompletar como se muestra debajo, asignándole el control TextBox.
Imports System.Data.SqlClient
Public Class Form1

    Dim myCommand As SqlCommand
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        AutoCompletar(Me.TextBox1)
        Me.ActiveControl = TextBox1
    End Sub
Esta es la función AutoCompletar que se deberá utilizar asignándole el control TextBox.
Public Function AutoCompletar(ByVal Control As TextBox) As AutoCompleteStringCollection
        Dim Coleccion As New AutoCompleteStringCollection
        Dim Comando, Coneccion As String
        'Dim myConnection As SqlConnection
        Comando = "select LastName from Employees"
        'Creamos una nueva cadena de coneccion 
        Coneccion = "Data Source=XSaint;Initial Catalog=Northwind;Integrated Security=SSPI"
        'myConnection = New SqlConnection(Coneccion)
        Using myConnection As New SqlConnection(Coneccion)
            Dim Ejecutar As New SqlClient.SqlCommand(Comando, myConnection)
            'Abrimos la coneccion
            myConnection.Open()
            Dim Lector As SqlDataReader = Ejecutar.ExecuteReader()
            ' Realizamos un Loop mientras se est‚ leyendo.
            While Lector.Read()
                Coleccion.AddRange(New String() {Lector(0)})
            End While
            'Cerramos el SqlReader
            Lector.Close()
            'Cerramos la coneccion
            myConnection.Close()
        End Using
        'Ajustamos el control TextBox o ComboBox para recibir los datos de la siguiente manera.
        With Control
            .AutoCompleteMode = AutoCompleteMode.Suggest
            .AutoCompleteSource = AutoCompleteSource.CustomSource
            .AutoCompleteCustomSource = Coleccion
        End With
        'Devolvemos los datos recuperados de la base de datos
        Return Coleccion
    End Function
End Class

Cambiar color de filas en un dataGridView con CheckBox en VB.NET

Ejemplo para alternar mediante la propiedad backcolor del objeto alternatingrowsdefaultcellstyle , el color de filas en un control datagridview
CONTROLES
  1. Un DataGridview ( DataGridView1 )
  2. un CheckBox
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        With ListBox1.Items
            .Add("1")
            .Add("2")
            .Add("3")
            .Add("1")
            .Add("2")
            .Add("3")
            ListBox1.SelectedIndex = 0
        End With
        Button1.Text = "Eliminar duplicados "
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MsgBox(Eliminar(ListBox1), MsgBoxStyle.Information, "Elementos duplicados en el List ")
    End Sub
    Function Eliminar(ByVal LB As ListBox) As Int32
        Dim i As Int32
        Dim j As Int32
        Dim n As Int32           ' Recorre los items ( compara empezando desde el primero , de abajo hacia arriba)         
        For i = 0 To LB.Items.Count - 2
            For j = LB.Items.Count - 1 To i + 1 Step -1                 ' ... si es el mismo                 
                If LB.Items(i).ToString = LB.Items(j).ToString Then
                    LB.Items.RemoveAt(j) ' elimina el elemento indicando el índice                     
                    n += 1 'lleva la cuenta de los duplicados                 
                End If
            Next
        Next
        Return n ' retorna los eliminados     End Function End Class 
    End Function

Eliminar duplicados de un listbox en VB.NET

Simple función en vb.net que recorre todos los elementos de la lista de un
combo o listbox para poder eliminar los elementos o items duplicados
El ejemplo comienza comparando desde el primer item con todos los demás
empezando desde abajo hacia arriba. Si el elemento es el mismo lo elimina con el
método RemoveAt del ListBox indicando el índice
Colocar en el formulario
  1. Un control ListBox llamado Listbox1
  2. Un control Button llamado Button1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        With ListBox1.Items
            .Add("1")
            .Add("2")
            .Add("3")
            .Add("1")
            .Add("2")
            .Add("3")
            ListBox1.SelectedIndex = 0
        End With
        Button1.Text = "Eliminar duplicados "
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MsgBox(Eliminar(ListBox1), MsgBoxStyle.Information, "Elementos duplicados en el List ")
    End Sub
    Function Eliminar(ByVal LB As ListBox) As Int32
        Dim i As Int32
        Dim j As Int32
        Dim n As Int32           ' Recorre los items ( compara empezando desde el primero , de abajo hacia arriba)         
        For i = 0 To LB.Items.Count - 2
            For j = LB.Items.Count - 1 To i + 1 Step -1                 ' ... si es el mismo                 
                If LB.Items(i).ToString = LB.Items(j).ToString Then
                    LB.Items.RemoveAt(j) ' elimina el elemento indicando el índice                     
                    n += 1 'lleva la cuenta de los duplicados                 
                End If
            Next
        Next
        Return n ' retorna los eliminados     End Function End Class 
    End Function

domingo, 30 de septiembre de 2012

Truco:Abrir una dirección URL o un Programa con C++

Para abrir enlaces a través de un programa en c++ , se debe utiliza la función ShellExecute de la API de Windows.
Una sencilla aplicación que pregunte al usuario si desea visitar mi nuevo blog sería:
#include <windows.h>
#include <iostream>

using namespace std;
int main()
{
int val = MessageBox(NULL,"Quieres Visitar mi nuevo Blog?","Ventantita",MB_YESNO);
cout<<"Valor Retornado: "<<val;

if(val==6)
 {
        ShellExecute(NULL, "open", "http://www.elnaufragodelared.com/",NULL, NULL, SW_SHOWNORMAL);

 }
return 0;
}
De igual manera si deseo Ejecutar un programa externo como el Emule sería así:
#include <windows.h>
#include <iostream>
using namespace std;
int main()
{
        ShellExecute(NULL, "open", "C:/Archivos de programa/eMule/emule.exe",NULL, NULL, SW_SHOWNORMAL);
        return 0;
}

NOTA:
El ejemplo fue compilado utilizando el IDE , Codeblocks.

Usando delegados para intercambiar informacion entre ChildForms de un Parent Form en C#.NET

A menudo en aplicaciones MDI, necesitamos intercambiar informacion entre Child Forms que son instanciados por el mismo Parent Form. En tales casos, los delegados son un modo adecuado para intercambiar como.
En este programa tendremos un Form Padre y 2 Child Forms. Los forms hijos seran instanciados por el padre. El segundo form hijo va a interactuar con el primero a traves del Parent Form usando delegados. En este ejemplo mostraremos como usar delegados para realizar esta interaccion. Puedes utilizar las mismas tacticas para desarrollar otros tipos similares de procedimientos.
Lo que sea que el usuario escriba en el textbox del segundo formulario y luego de click en el boton Submit, ese texto sera mostrado en el label del primer formulario. Esta interaccion entre forms hijos es monitoreada y manejada por el form padre.
Para esto en el Form Padre colocamos 2 botones como la figura de arriba y cuando pulsemos el primer boton, instanciamos el primer form y el Parent Form creara un puntero a una funcion del formulario.
private void btnFirst_Click(object sender, EventArgs e)
        {
            frmFirstChild FrmFirst = new frmFirstChild();
            FrmFirst.MdiParent = this;
            FrmFirst.Show();
            FrmFirst.Activate();
            SayHello = FrmFirst.FuncDisplayMsg;
        }
Esto quiere decir, que el delegado SayHello del Parent Form mantiene un puntero al metodo del primer formulario. La declaracion del primer formulario es asi:
private delegate void DelSayHello(string Msg);
        private DelSayHello SayHello;
Y el metodo que sera llamado es(este metodo estara dentro del Primer Form):
public void FuncDisplayMsg(string Msg)
        {
            this.lblMsg.Text = Msg;
        }
Ahora el Form padre llamara a este metodo del primer Form Child cuando un metodo del segundo Child Form pase un valor al padre. Para hacer esto, el Parent Form tiene un metodo que sera llamado del segundo Child Form(via delegados). El metodo es:
private void InvokeFunc(string Msg)
        {
            if (SayHello != null)
                SayHello.Invoke(Msg);
        }
Ahora que pasara cuando el segundo Child Form sea instanciado?. El segundo Child Form tiene un delegado que tiene un puntero del metodo mencionado arriba. El codigo del evento click sera asi:
private void btnSecond_Click(object sender, EventArgs e)
        {
            frmSecondChild FrmSecond = new frmSecondChild();
            FrmSecond.MdiParent = this;
            FrmSecond.InvokeDel = this.InvokeFunc;
            FrmSecond.Show();
            FrmSecond.Activate();
        }
Y finalmente, cuando el usuario clickee en el boton Submit del segundo Child Form, el texto del textbox es pasado al Parent Form, el cual a cambio pasa el valor al primer Child Form y el texto es mostrado. Este sera el codigo del segundo Form:
public delegate void DelInvoke(string Msg);
        public DelInvoke InvokeDel;

        private void btnSubmit_Click(object sender, EventArgs e)
        {
            if (this.InvokeDel != null)
                InvokeDel.Invoke(this.txtMsg.Text);
        }

sábado, 29 de septiembre de 2012

Mostrar texto de marca de agua en el campo password en ASP.NET

Para que salga el efecto que ven en la imagen en el codigo html de su sitio web agregan este codigo y listo =)
<head runat="server">
    <title>Página sin título</title>
    <script type="text/javascript" src="http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.1-vsdoc.js"></script>
    <script type="text/javascript">

        $(document).ready(function () {

            $("#txtPasswordWaterMark").show();
            $("#txtPasswordWaterMark").addClass("waterMark");
            $("#txtPasswordWaterMark").val("Password");
            $("#<%= txtPassword.ClientID  %>").hide();

            $("#txtPasswordWaterMark").focus(function () {
                $(this).hide();
                $("#<%= txtPassword.ClientID  %>").show();
                $("#<%= txtPassword.ClientID  %>").focus();
            });

//            $("#txtPasswordWaterMark").keydown(function () {
//                $(this).hide();
//                $("#<%= txtPassword.ClientID  %>").show();
//                $("#<%= txtPassword.ClientID  %>").focus();
//            });

            $("#<%= txtPassword.ClientID  %>").blur(function () {

                if ($(this).val() == "") {
                    $("#<%= txtPassword.ClientID  %>").hide();
                    $("#txtPasswordWaterMark").show();
                }

            });

        });

    </script>
    <style type="text/css">

      .waterMark{
            color : #9B9B9B;
        }

    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:TextBox ID="txtPassword" TextMode="Password" runat="server"></asp:TextBox>
     <input type="text" id="txtPasswordWaterMark" />
    </div>
    </form>
</body>

Como ver imagen previa antes de guardarlo en Base de Datos en ASP.NET

Para este ejemplo agregamos un control tipo FileUpload, un boton de vista previa que al pulsarlo nos muestre la imagen y un textbox que extraera el nombre de la imagen
Este sera el codigo .aspx
<body>
    <form id="form1" runat="server">
    <div>
    
        <asp:FileUpload ID="FileUpload1" runat="server" />
        <asp:Button ID="Button1" runat="server" onclick="Button1_Click" 
            Text="Vista Previa" />
        <br />
        <asp:Button ID="Button2" runat="server" Text="Nombre de Archivo" />
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Image ID="Image1" runat="server" />
    </div>
    </form>
</body>
Y este codigo sera del lado del servidor
Code Behind :
string imgname;
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        string L_path = "No Images";
        imgname = FileUpload1.FileName;
        TextBox1.Text = imgname;

        // break the pathe, collect file type then match.
        string filetype;
        filetype = System.IO.Path.GetExtension(FileUpload1.PostedFile.FileName);
        if (filetype.ToLower().Contains(".jpg")  ||  filetype.ToLower().Contains(".jpeg") || filetype.ToLower().Contains(".bmp") || filetype.ToLower().Contains(".png"))
        {

            ClientScript.RegisterStartupScript(typeof(string), "You choosen the file in wrong formated.. !!!", "");

        }
        if (FileUpload1.PostedFile.ContentLength > 5242880) // byte size
        {
            Page.ClientScript.RegisterStartupScript(Type.GetType("System.String"), "addScript", "alert('Image Size is should be Less Than 5 MB' )", true);

        }
        if (FileUpload1.HasFile)
        {
            L_path = Server.MapPath("~/Images/").ToString();
            L_path += imgname;
            FileUpload1.SaveAs(L_path); // Temporary saved 

        }
        else
        {
            Page.ClientScript.RegisterStartupScript(Type.GetType("System.String"), "addScript", "alert('No Image is Selected..)", true);

        }
        Image1.ImageUrl = "~/Images/" + imgname;

        Page.ClientScript.RegisterStartupScript(Type.GetType("System.String"), "addScript", "alert('Image is Reflected..Plz Save it)", true);

        // After saving into Database delete current file from Application.
    }

lunes, 24 de septiembre de 2012

Como encriptar y desencriptar passwords y almacenarlo en Base de Datos con ASP.NET

Aqui explicare como encriptar data y guardarla en la base de datos y como desencriptar esta data encriptada en la base de datos usando ASP.NET.
En este ejemplo tengo un webform con 4 campos username, password, firstname y lastname lo que hare sera encriptar el password y guardarlo en la base de datos luego voy a jalar este campo y desencriptar este campo y mostrarlo usando un gridview.
El diseño se vera asi:
El codigo en el lado del cliente sera este:
</head>
<body>
<form id="form1" runat="server">
<div>
<table align="center">
<tr>
<td colspan="2">
<b>Encryption and Decryption of Password</b>
</td>
</tr>
<tr>
<td>
UserName
</td>
<td>
<asp:TextBox ID="txtname" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td>
Password
</td>
<td>
<asp:TextBox ID="txtPassword" runat="server" TextMode="Password"></asp:TextBox>
</td>
</tr>
<tr>
<td>
FirstName
</td>
<td>
<asp:TextBox ID="txtfname" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td>
LastName
</td>
<td>
<asp:TextBox ID="txtlname" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td>
</td>
<td>
<asp:Button ID="btnSubmit" runat="server" Text="Submit"
onclick="btnSubmit_Click" />
</td>
</tr>
</table>
</div>
<div>
<table align="center">
<tr>
<td>
<b>Encryption of Password Details</b>
</td>
</tr>
<tr>
<td>
<asp:GridView ID="gvUsers" runat="server" CellPadding="4" BackColor="White"
BorderColor="#CC9966" BorderStyle="None" BorderWidth="1px">
<RowStyle BackColor="White" ForeColor="#330099" />
<FooterStyle BackColor="#FFFFCC" ForeColor="#330099" />
<PagerStyle BackColor="#FFFFCC" ForeColor="#330099" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="#663399" />
<HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="#FFFFCC"
HorizontalAlign="Left"/>
</asp:GridView>
</td>
</tr>
</table>
</div>
<div>
<table align="center">
<tr>
<td>
<b>Decryption of Password Details</b>
</td>
</tr>
<tr>
<td>
<asp:GridView ID="gvdecryption" runat="server" BackColor="White"
BorderColor="#CC9966" BorderStyle="None" BorderWidth="1px" CellPadding="4"
onrowdatabound="gvdecryption_RowDataBound">
<RowStyle BackColor="White" ForeColor="#330099" />
<FooterStyle BackColor="#FFFFCC" ForeColor="#330099" />
<PagerStyle BackColor="#FFFFCC" ForeColor="#330099" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="#663399" />
<HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="#FFFFCC" />
</asp:GridView>
</td>
</tr>
</table>
</div>
</form>
Despues de esto en el lado del servidor agregar los namespace
System.Text y System.Data.SQLCliente. En el primero contiene clases que representan codificacion de caracteres ASCII y Unicode y con el segundo nos permitira crear conexiones a la Base de Datos.
Despues de esto diseñamos una BD con el nombre que quieran, crean 1 tabla de nombre Usuario con 4 campos tipo nvarchar username, password, firstname y lastname.
private const string strconnection = "Data Source=XSaint;Initial Catalog=XSaint;Integrated Security=True";
    SqlConnection con = new SqlConnection(strconnection);
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindencryptedData();
            BindDecryptedData();
        }
    }

    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        string strpassword = Encryptdata(txtPassword.Text);
        con.Open();
        SqlCommand cmd = new SqlCommand("insert into Usuario(UserName,Password,FirstName,LastName) values('" + txtname.Text + "','" + strpassword + "','" + txtfname.Text + "','" + txtlname.Text + "')", con);
        cmd.ExecuteNonQuery();
        con.Close();
        BindencryptedData();
        BindDecryptedData();
    }
    protected void BindencryptedData()
    {
        con.Open();
        SqlCommand cmd = new SqlCommand("select * from Usuario", con);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        da.Fill(ds);
        gvUsers.DataSource = ds;
        gvUsers.DataBind();
        con.Close();
    }
    protected void BindDecryptedData()
    {
        con.Open();
        SqlCommand cmd = new SqlCommand("select * from Usuario", con);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        da.Fill(ds);
        gvdecryption.DataSource = ds;
        gvdecryption.DataBind();
        con.Close();
    }
    private string Encryptdata(string password)
    {
        string strmsg = string.Empty;
        byte[] encode = new byte[password.Length];
        encode = Encoding.UTF8.GetBytes(password);
        strmsg = Convert.ToBase64String(encode);
        return strmsg;
    }
    private string Decryptdata(string encryptpwd)
    {
        string decryptpwd = string.Empty;
        UTF8Encoding encodepwd = new UTF8Encoding();
        Decoder Decode = encodepwd.GetDecoder();
        byte[] todecode_byte = Convert.FromBase64String(encryptpwd);
        int charCount = Decode.GetCharCount(todecode_byte, 0, todecode_byte.Length);
        char[] decoded_char = new char[charCount];
        Decode.GetChars(todecode_byte, 0, todecode_byte.Length, decoded_char, 0);
        decryptpwd = new String(decoded_char);
        return decryptpwd;
    }

    protected void gvdecryption_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            string decryptpassword = e.Row.Cells[1].Text;
            e.Row.Cells[1].Text = Decryptdata(decryptpassword);
        }
    }
al ejecutar les saldra como la foto de arriba =)

domingo, 23 de septiembre de 2012

Validacion de Direcciones Postales de USA en ASP.NET

Para este proyecto descargaremos la dll llamada USPSAddressValidator y la agregamos como referencia a nuestro proyecto. Ademas crearemos 2 paginas de nombre AddressValidator y AddressVerification. En el primero lo diseñamos de la siguiente forma:
Ahora el codigo del cliente tendra este codigo(AddressValidator.aspx):
<head runat="server">
    <title>Address Verification For USA</title>
    <script type="text/javascript">


        function YahooWindow() {
            var street = document.getElementById('<%=txtAddress.ClientID %>').value;
            var city = document.getElementById('<%=txtCity1.ClientID %>').value;
            var e = document.getElementById('<%=ddlState.ClientID%>');
            //For ModelWindow then uncomment below code
//            $("#Address1").fancybox({
//                'width': '55%',
//                'height': '30%',
//                'autoScale': false,
//                'transitionIn': 'none',
//                'transitionOut': 'none',
//                'type': 'iframe'
//            });
            var strV = e.options[e.selectedIndex].text;
            //alert(city);
            document.getElementById('Address2').href = 'AddressVerification.aspx?street=' + street + '&city=' + city + '&state=' + strV + ''
            //yahoowin = dhtmlmodal.open('yahoo', 'iframe', 'AddressVerification.aspx?street=' + street + '&city=' + city + '&state=' + strV + '', 'Address Verification', 'width=400px,height=350px,center=1');
            //             $("#Address1").click();
            //             return false;
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <table>
            <tr>
                <td class="sub02" width="180px">
                    Address:
                </td>
                <td>
                    <asp:TextBox runat="server" ID="txtAddress" CssClass="input" />
                    <a href="#" id="Address2" onclick="return YahooWindow();">[Verify Address] </a><a
                        href="#" id="Address1"></a>
                
                </td>
            </tr>
            <tr>
                <td class="sub02" width="180px">
                    City:
                </td>
                <td>
                    <asp:TextBox runat="server" ID="txtCity1" CssClass="input" />
                   
                </td>
            </tr>
            <tr>
                <td class="sub02" width="180px">
                    State:
                </td>
                <td>
                    <asp:DropDownList runat="server" ID="ddlState" CssClass="input">
                        <asp:ListItem>--Select State--</asp:ListItem>
                        <asp:ListItem>AK</asp:ListItem>
                        <asp:ListItem>AL</asp:ListItem>
                        <asp:ListItem>AR</asp:ListItem>
                        <asp:ListItem>AZ</asp:ListItem>
                        <asp:ListItem>CA</asp:ListItem>
                        <asp:ListItem>CO</asp:ListItem>
                        <asp:ListItem>CT</asp:ListItem>
                        <asp:ListItem>DC</asp:ListItem>
                        <asp:ListItem>DE</asp:ListItem>
                        <asp:ListItem>FL</asp:ListItem>
                        <asp:ListItem>GA</asp:ListItem>
                        <asp:ListItem>HI</asp:ListItem>
                        <asp:ListItem>IA</asp:ListItem>
                        <asp:ListItem>ID</asp:ListItem>
                        <asp:ListItem>IL</asp:ListItem>
                        <asp:ListItem>IN</asp:ListItem>
                        <asp:ListItem>KS</asp:ListItem>
                        <asp:ListItem>KY</asp:ListItem>
                        <asp:ListItem>LA</asp:ListItem>
                        <asp:ListItem>MA</asp:ListItem>
                        <asp:ListItem>MD</asp:ListItem>
                        <asp:ListItem>ME</asp:ListItem>
                        <asp:ListItem>MI</asp:ListItem>
                        <asp:ListItem>MN</asp:ListItem>
                        <asp:ListItem>MO</asp:ListItem>
                        <asp:ListItem>MS</asp:ListItem>
                        <asp:ListItem>MT</asp:ListItem>
                        <asp:ListItem>NC</asp:ListItem>
                        <asp:ListItem>ND</asp:ListItem>
                        <asp:ListItem>NE</asp:ListItem>
                        <asp:ListItem>NH</asp:ListItem>
                        <asp:ListItem>NJ</asp:ListItem>
                        <asp:ListItem>NM</asp:ListItem>
                        <asp:ListItem>NV</asp:ListItem>
                        <asp:ListItem>NY</asp:ListItem>
                        <asp:ListItem>OH</asp:ListItem>
                        <asp:ListItem>OK</asp:ListItem>
                        <asp:ListItem>OR</asp:ListItem>
                        <asp:ListItem>PA</asp:ListItem>
                        <asp:ListItem>RI</asp:ListItem>
                        <asp:ListItem>SC</asp:ListItem>
                        <asp:ListItem>SD</asp:ListItem>
                        <asp:ListItem>TN</asp:ListItem>
                        <asp:ListItem>TX</asp:ListItem>
                        <asp:ListItem>UT</asp:ListItem>
                        <asp:ListItem>VA</asp:ListItem>
                        <asp:ListItem>VT</asp:ListItem>
                        <asp:ListItem>WA</asp:ListItem>
                        <asp:ListItem>WI</asp:ListItem>
                        <asp:ListItem>WV</asp:ListItem>
                        <asp:ListItem>WY</asp:ListItem>
                    </asp:DropDownList>
                </td>
            </tr>
            <tr>
                <td class="sub02" width="180px">
                    Zip:
                </td>
                <td>
                    <asp:TextBox runat="server" ID="txtZipCode" CssClass="input" />
                </td>
            </tr>
        </table>
    </div>
    </form>
</body>
El diseño de nuestro 2 webform el cual nos mostrara si la direccion es valida sera el siguiente:
El codigo del lado del cliente sera este(Addressverification.aspx)
<head runat="server">
    <title></title>
    <style type="text/css">
    body{ margin:0;
          padding:0;
          font-family:Arial, helventica, Verdana;
          font-size:11px;
    }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div  style="text-align: left; vertical-align: middle;">
    
    <asp:Image runat="server" id="imgNo" ImageAlign="AbsMiddle" 
            ImageUrl="~/images/cancel_128x128.png" Height="65px" Width="71px"></asp:Image>
    <asp:Image runat="server" id="imgYes" ImageAlign="AbsMiddle" 
            ImageUrl="~/images/k10760520.jpg" Height="59px" Width="62px"></asp:Image>    
    <asp:Label runat="server" id="lblVerification"></asp:Label>    
    </div>
    <div  style="text-align: left; padding-left:75px;">
    <asp:RadioButton runat="server" id="rdo1" Text="Give me some address suggestions" GroupName="rdosug" AutoPostBack="true"></asp:RadioButton><br /> 
    <asp:RadioButton runat="server" id="rdo2" Text="The address I entered is correct" GroupName="rdosug" AutoPostBack="true"></asp:RadioButton> <br /> 
    <asp:RadioButton runat="server" id="rdo3" Text="I will make my address corrections  " GroupName="rdosug" AutoPostBack="true"></asp:RadioButton>    
    </div>
    </form>
</body>
En el codigo del lado del servidor escriben lo siguiente(AddressVerification.aspx.vb)
Imports System.Web.UI.HtmlControls
Imports System.Configuration
Imports System.Net
Partial Class AddressVerification
    Inherits System.Web.UI.Page
    Private Function ValidateAddress(ByVal street As String, ByVal city As String, ByVal state As String) As String
        If ConfigurationManager.AppSettings("proxy") <> [String].Empty Then
            Dim p As WebProxy = Nothing
            Dim proxyAddressAndPort As String = ConfigurationManager.AppSettings("proxy")
            Dim proxyUserName As String = ConfigurationManager.AppSettings("proxyUserName")
            Dim proxyPassword As String = ConfigurationManager.AppSettings("proxyPassword")
            Dim cred As ICredentials
            cred = New NetworkCredential(proxyUserName, proxyPassword)
            p = New WebProxy(proxyAddressAndPort, True, Nothing, cred)
            GlobalProxySelection.[Select] = p
        End If
        If street = String.Empty Then
            street = "Test"
        End If
        If city = String.Empty Then
            city = "Test"
        End If
        If state = "--Select State--" Then
            state = "TA"
        End If
        Dim res As String = PAB.Utils.USPS.AddressValidator.ValidateAddress(street, city, state)
        Return res
    End Function

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not Request("city") Is Nothing Then
            Dim strvalid As String = String.Empty
            strvalid = Me.ValidateAddress(Request("street"), Request("city"), Request("state"))
            If strvalid = "Invalid Address" Then
                lblVerification.Text = "We’re sorry.  We were unable to verify your address with the United States Postal Service."
                imgYes.Visible = False
            Else
                lblVerification.Text = "Congratulations!  We have successfully verified your shipping address!"
                imgNo.Visible = False
                rdo1.Visible = False
                rdo2.Visible = False
                rdo3.Visible = False

            End If
        End If
    End Sub
End Class
. finalmente en nuestro web.config modificamos nuestra etiqueta appconfig y la escribimos como esta abajo:
<appSettings>
    <add key="proxy" value="10.10.201.3:8080"/>
    <add key="proxyUserName" value=""/>
    <add key="proxyPassword" value=""/>
  </appSettings>
si pusieron todo el codigo como les indique les debe salir asi:
U.S.A Postal Address Validation
Espero les ayude este ejemplo

Uso de Hashtable para Checkboxlist en ASP.NET

Para hacer esto escribimos este codigo en el lado del cliente(Default.aspx):
<form id="form1" runat="server">
<div>

<asp:CheckBoxList ID="CheckBoxList1" runat="server">
</asp:CheckBoxList>
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
<br />
<br />
Text: <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<br />    
Value:  <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
</div>
</form>
Ahora en el lado del servidor utilizaremos la propiedad IsPostBack en la cual inicializamos nuestro HashTable y lo agregamos a un CheckBox, y en el boton indicaremos que items se dieron check junto con sus IDS.
using System.Collections;
public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Label1.Text = string.Empty;
        Label2.Text = string.Empty;
        if (!IsPostBack)
        {
            Hashtable hs = new Hashtable();
            hs.Add("1", "sajjad");
            hs.Add("2", "ahmed");
            hs.Add("3", "imtiaz");
            hs.Add("4", "ghazi");
            hs.Add("5", "sohail");
            hs.Add("6", "zahid");
            hs.Add("7", "irfan");
            CheckBoxList1.DataSource = hs;
            CheckBoxList1.DataValueField = "Key";
            CheckBoxList1.DataTextField = "Value";
            CheckBoxList1.DataBind();
        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Label1.Text = string.Empty;
        Label2.Text = string.Empty;
        foreach (ListItem listitem in CheckBoxList1.Items)
        {
            if (listitem.Selected)
            {
                Label1.Text += listitem.Text + "     ,     ";
                Label2.Text += listitem.Value + "     ,     ";
            }
        }
    }
}

sábado, 22 de septiembre de 2012

Generar passwords aleatorios en ASP.NET

En este ejemplo generaremos una clave aleatoria ingresando la longitud de la misma en el textbox y dando click en el boton se mostrara en el label:
En el lado del cliente agregamos este codigo(Default.aspx)
<form id=”form1″ runat=”server”>
<div>
<asp:TextBox ID=”TextBox1″ runat=”server”></asp:TextBox>
<asp:Button ID=”rndpwd” runat=”server” Text=”Generate Pwd” onclick=”rndpwd_Click” />
<br />
<asp:Label ID=”Label1″ runat=”server” Text=”Label”></asp:Label>
</div>
</form>
Ahora creamos una clase en el app_code y escribimos este metodo ahi:
public static string GetRandomPassword(int length)
    {
        char[] chars = "$%#@!*abcdefghijklmnopqrstuvwxyz1234567890?;:ABCDEFGHIJKLMNOPQRSTUVWXYZ^&".ToCharArray();
        string password = string.Empty;
        Random random = new Random();

        for (int i = 0; i < length; i++)
        {
            int x = random.Next(1,chars.Length);
            //Don't Allow Repetation of Characters
            if (!password.Contains(chars.GetValue(x).ToString()))
                password += chars.GetValue(x);
            else
                i--;
        }
        return password;
    }
Llamamos esta pagina en el lado del servidor utilizando el evento click del boton de la siguiente manera:
protected void rndpwd_Click(object sender, EventArgs e)
    {
        Label1.Text = PasswordGeneration.GetRandomPassword(Convert.ToInt32(TextBox1.Text));
    }
y listo ejecuten el codigo ingresan un numero y les saldra un password de esa longitud

Validar direcciones email usando JQuery en ASP.NET

Veremos aqui una funcionalidad basica para validar direcciones email. En este post, te mostrare como validar direcciones email usando JQuery. Para validar direcciones email, he creado una funcion separada la cual basada en direcciones email, retorna verdadero o falso. La validacion de direcciones email la hacemos utilizando expresiones regulares.
Para implementar este codigo necesitamos escribir codigo como muestro abajo en su pagina aspx(este codigo lo colocan debajo de la etiqueta title)
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js">
</script>
<script type="text/javascript">
$(document).ready(function () {
$("#btnValidate").click(function () {
var EmailText = $("#txtEmail").val();
if ($.trim(EmailText).length == 0) {
alert("Please enter email address");
return false;
}
if (validateEmail(EmailText)) {
alert('Valid Email Address');
return true;
}
else {
alert('Invalid Email Address');
return false;
}
});
});
function validateEmail(sEmail) {
var filter = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
if (filter.test(sEmail)) {
return true;
}
else {
return false;
}
}
</script></head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txtEmail" runat="server"/>
<asp:Button ID="btnValidate" runat="server" Text="Validate" />
</div>
</form>
</body>
Como ven en el codigo de arriba en la seccion header agregue un link de archivo script, usando ese archivo tenemos una chance de interactuar con JQuery y en el script tenemos la funcion click del boton btnValidate el cual es usado para validar direcciones email usando JQuery en ASP.NET

Como encriptar y desencriptar parametros Query Strings en ASP.NET

Los query strings son un modo facil de pasar informacion de una pagina a otra. El problema con los query strings es que la informacion es visible en la URL. Y muchas veces se ha pasado por alto este detalle y hay veces que necesitamos encriptar cierta informacion para evitar ataques tipo SQL Injection.En el siguiente ejemplo ingresaremos una cadena y mostraremos la misma encriptada en la Barra de Direcciones.
Creamos un sitio wseb y agregamos otro webform aparte del que nos viene por defecto:
En nuestra primera pagina agregamos un textbox y un boton
<body>
    <form id="form1" runat="server">
<div>
        <asp:TextBox ID="txt1" runat="server"></asp:TextBox>
        <asp:Button ID="btn1" runat="server" Text="Button" onclick="btn1_Click" />         
    </div>
    </form>
</body>
escribiremos codigo en el evento Click del boton y declaramos una variable global de tipo string:
string encodedString;//Declare this is in  Global 
    protected void btn1_Click(object sender, EventArgs e)
    {        
        string str = txt1.Text;      
        encodedString = (Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(str)));      
        Response.Redirect("~/Default2.aspx?str=" + encodedString);    
    }
Este codigo ira en la primera pagina que nos pedira ingresar un texto en el textbox y nos mostrara en la 2 pagina el mismo texto pero en la cadena saldra encriptado como en la foto del principio. Ahora en la 2 pagina agregamos un label este sera el codigo en html:
<div>
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    </div>
Y este es el codigo en C#:
string decodedString;//Declare this is in  Global
    protected void Page_Load(object sender, EventArgs e)
    {
        decodedString = System.Text.ASCIIEncoding.ASCII.GetString(Convert.FromBase64String(Request.QueryString["str"]));
        Label1.Text = decodedString; 
    }
Este pequeño codigo fue un ejemplo de encriptacion basica espero les haya sido util.

Como mostrar efecto Loading de Google en GridView en ASP.NET

Google Loading Gridview ASP.NET
Para lograr el efecto que ven en la imagen vamos a crear un sitio web en C#, y le agregaremos un Control ScriptManager, un Gridview y un DropDownList, ahora crearemos una nueva ficha en el Cuadro de Herramientas:
le ponemos de nombre AJAX y agregamos la dll AjaxControlToolkit, pueden bajarla de aqui pero descarguen la version binaria no el source code. Una vez descargado lo agregamos a nuestro proyecto desde la ficha que creamos, vamos a la opcion Elegir Elementos:
Ajax Control Toolkit
En la pestaña Componentes de .NET Framework agregamos Referencia:
damos click en el boton Examinar y agregamos nuestra dll que bajamos. Una vez descargada podemos utilizar un control UpdatePanelAnimationExtender que necesitaremos para este ejemplo.
UpdatePanelAnimationExtender brinda la facilidad de mostrar alguna animacion mientras el UpdatePanel demora en ejecutar la operacion que se le ha encomendado a realizar.
Por ejemplo si tuviese que mostrar informacion cuyo origen de datos requiere mayor tiempo de ejecucion, pues el UpdatePanelAnimationExtender es la opcion a usar.
El codigo de nuestra pagina sera este:
<body>
    <script type="text/javascript" language="javascript">
        function onUpdating() {
            // get the update progress div
            var updateProgressDiv = $get('updateProgressDiv');
            // get the gridview element
            var gridView = $get('<%= this.grd.ClientID %>');
            // make it visible
            updateProgressDiv.style.display = '';
            // get the bounds of both the gridview and the progress div
            var gridViewBounds = Sys.UI.DomElement.getBounds(gridView);
            var updateProgressDivBounds = Sys.UI.DomElement.getBounds(updateProgressDiv);
            var x;
            var y;
            // do the math to figure out where to position the element
            // center of gridview
            x = gridViewBounds.x + Math.round(gridViewBounds.width / 2) - Math.round(updateProgressDivBounds.width / 2);
            y = gridViewBounds.y + Math.round(gridViewBounds.height / 2) - Math.round(updateProgressDivBounds.height / 2);
            // set the progress element to this position
            Sys.UI.DomElement.setLocation(updateProgressDiv, x, y);
        }
        function onUpdated() {
            // get the update progress div
            var updateProgressDiv = $get('updateProgressDiv');
            // make it invisible
            updateProgressDiv.style.display = 'none';
        }
    </script>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <div>
        <asp:UpdatePanel ID="updatePanel" runat="server">
            <ContentTemplate>
                <asp:GridView ID="grd" runat="server" OnPageIndexChanging="grd_PageIndexChanging"
                    AllowPaging="true" PageSize="10">
                </asp:GridView>
            </ContentTemplate>
        </asp:UpdatePanel>
        <cc1:ComboBox runat="server">
        </cc1:ComboBox>
        <cc1:UpdatePanelAnimationExtender ID="upae" BehaviorID="animation" runat="server"
            TargetControlID="updatePanel">
            <Animations>
                <OnUpdating>
                    <Parallel duration="0">
    <%-- place the update progress div over the gridview control --%>
                <ScriptAction Script="onUpdating();" />
                </Parallel>
                </OnUpdating>
                <OnUpdated>
                    <Parallel duration="0">
            <%--find the update progress div and place it over the gridview control--%>
                    <ScriptAction Script="onUpdated();" />
                    </Parallel>
                </OnUpdated>
            </Animations>
        </cc1:UpdatePanelAnimationExtender>
        <div id="updateProgressDiv" style="background-color: #CF4342; display: none; position: absolute;">
            <span style="color: #fff; margin: 3px">Loading ... </span>
        </div>
    </div>
    </form>
</body>
El bloque script lo agregue dentro del body para evitar que me aparezca en la pagina este mensaje La colección de controles no puede modificarse porque el control contiene bloques de código (por ej. <% ... %>). .
Ahora en nuestra pagina agregamos el siguiente codigo de C#
protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            if (Session["ds"] != null)
            {
                grd.DataSource = Session["ds"] as DataTable;
                grd.DataBind();
            }
            else
            {
                grd.DataSource = CreateDataTable();
                grd.DataBind();
            }
        }
    }
    public DataTable CreateDataTable()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add(new DataColumn("Id", typeof(string)));
        dt.Columns.Add(new DataColumn("Name", typeof(string)));
        DataRow dr;
        for (int i = 0; i <= 100; i++)
        {

            dr = dt.NewRow();
            dr[0] = i.ToString();
            dr[1] = "Test" + i.ToString();
            dt.Rows.Add(dr);
        }
        Session["ds"] = dt;
        return dt;
    }

    protected void grd_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        //Remove this on Application server
        System.Threading.Thread.Sleep(3000);
        grd.PageIndex = e.NewPageIndex;
        grd.DataSource = Session["ds"] as DataTable;
        grd.DataBind();
    }
y listo a disfrutar =)