Tips C#: Calcular Edad y saber el Próximo cumpleaños


Hola

En este fragmento de código les mostrare como sacar la edad y calcular el próximo cumpleaños.

public string RetornarMensajeCumpleanio()
{
int diaCumple = 4;//Dia del Cumpleanios
int mesCumple = 4;//Mes de Cumple 4=Abril
int anioCumple = 1984; //Anio de Cumple
DateTime fechaNacimiento = new DateTime(anioCumple, mesCumple, diaCumple);

//Se calcula la Edad Actual A partir de la fecha actual Sustrayendo la fecha de nacimiento
//esto devuelve un TimeSpan por tanto tomaremos los Dias y lo dividimos en 365 dias
int edad = (DateTime.Now.Subtract(fechaNacimiento).Days / 365);

DateTime proximoCumple;
//Define el proximo Cumple, En caso de que el mes sea menor al Mes Actual se busca el Proxima fecha que seria del año que viene
//es por ello el AddYear(1)
//En caso de ser mayor se toma el año actual
if (DateTime.Now.Month <= mesCumple && DateTime.Now.Day <= diaCumple)
proximoCumple = new DateTime(DateTime.Now.AddYears(1).Year, mesCumple, diaCumple);
else
proximoCumple = new DateTime(DateTime.Now.Year, mesCumple, diaCumple);


//Definiremos los dias faltantes para el proximo cumple
TimeSpan faltan = proximoCumple.Subtract(DateTime.Now);

//Ahora Elaboramos el Mensaje
StringBuilder sb = new StringBuilder();
sb.AppendFormat("Usted Tiene {0} Años ", edad);
sb.AppendFormat("y tu Próximo Cumpleaños es: {0} Días", faltan.Days);
sb.AppendFormat(", {0} Horas ", faltan.Hours);
sb.AppendFormat("y {0} Minutos ", faltan.Minutes);

return sb.ToString();
}

Como verán es un ejemplo simple, espero que les sea de utilidad.

Tips SilverLight: Behavior para colocar en Mayuscula el Texto de un TextBox


Hola a tod@s

A veces deseamos que el texto que escribe el usuario en un TextBox este de una ves en mayúscula, es por ello que les traigo este Behavior muy sencillo para que lo puedan usar.

using System.Windows;
using System.Windows.Controls;
using System.Windows.Interactivity;

namespace MiProyectoSilverLight.Behaviors
{
    public class UpperCaseAction : TriggerAction<TextBox>
    {
        protected override void Invoke(object parameter)
        {
           //Detectamos la posicion del cursor
            var selectionStart = AssociatedObject.SelectionStart;
            var selectionLenght = AssociatedObject.SelectionLength;
            //Colocamos el Texto en Mayuscula
            AssociatedObject.Text = AssociatedObject.Text.ToUpper();
            //Colocamos el Cursor al final
            AssociatedObject.SelectionStart = selectionStart;
            AssociatedObject.SelectionLength = selectionLenght;
        }
    }
}

Espero que le sea de ayuda.

Tips SilverLight: Guardar y Leer Cookies


Existen ocasiones que deseamos acceder a una Cookie o sencillamente guardar algo de información de poco relevancia, en mi caso no lo uso prefiero el Almacenamiento Aislado (Isolated Storage) pero en su momento alguien me pregunto sobre este punto y pues aquí les dejo los métodos de extensión.

  public static class ExtensionCookie
    {
        /// <summary>
        /// Obtener una cookie por su nombre
        /// </summary>
        /// <param name="document">El <c>HtmlDocument</c></param>
        /// <param name="cookieName">Nombre de la Cookie</param>
        /// <returns>El contenido de la cookie</returns>
        public static string GetCookie(this HtmlDocument document, string cookieName)
        {
            // Obtener token de cookie
            string cookies = document.Cookies;
            int idx = cookies.IndexOf(cookieName + "=");
            string val = "";
            if (idx == 0 || (idx > 0 && (cookies[idx - 1] == ';' 
                || cookies[idx - 1] == ' ')))
            {
                int lastIdx = cookies.IndexOf(';', idx);
                if (lastIdx == -1)
                {
                    lastIdx = cookies.Length;
                }

                int start = idx + cookieName.Length + 1;
                val = cookies.Substring(start, lastIdx - start);
                return HttpUtility.UrlDecode(val);
            }
            else
            {
                return string.Empty;
            }
        }

        /// <summary>
        /// Asignar valor a la cookie.
        /// </summary>
        /// <param name="document">El <c>HtmlDocument</c></param>
        /// <param name="cookieName">nombre de la cookie</param>
        /// <param name="value">El valor de la Cookie</param>
        /// <param name="expireDays">Dias de Expiracion</param>
        public static void SetCookie(this HtmlDocument document, string cookieName
            , string value, int? expireDays)
        {
            StringBuilder cookieDefinition = new StringBuilder(cookieName);
            cookieDefinition.Append('=');
            cookieDefinition.Append(HttpUtility.UrlEncode(value));
            if (expireDays.HasValue)
            {
                cookieDefinition.AppendFormat(";expires={0:R}"
                    , DateTime.Now.AddDays(expireDays.Value).ToUniversalTime());
            }

            document.Cookies = cookieDefinition.ToString();
        }

    }

Aquí les dejo un ejemplo  de como usar este código.

        void btnSetCookie_Click(object sender, RoutedEventArgs e)
        {
            TextBox txtCookie = new TextBox();
            txtCookie.Text = "Prueba de Asignar Valor a una Cookie";
            System.Windows.Browser.HtmlDocument doc = new HtmlDocument();
            doc.SetCookie("PruebaCookie", txtCookie.Text, 2);
            //doc.SetCookie("PruebaCookie", txtCookie.Text, null);
        }

        void btnGetCookie_Click(object sender, RoutedEventArgs e)
        {
            System.Windows.Browser.HtmlDocument doc = new HtmlDocument();
            TextBox txtCookie = new TextBox();
            txtCookie.Text = doc.GetCookie("PruebaCookie");            
        }

Espero que le sea de mucha utilidad.

Tips SilverLight: Encriptar y Desencriptar (Base64)


Aquí les dejo unos métodos de extensión simples para la encriptación y des encriptación:

 

    public static class ExtensionesSeguridad
    {
        public static string EncrytedString(this string _stringToEncrypt)
        {
            string result = string.Empty;
            byte[] encryted = System.Text.Encoding.Unicode.GetBytes(_stringToEncrypt);
            result = Convert.ToBase64String(encryted);
            return result;
        }

        public static string DecrytedString(this string _stringToDecrypt)
        {
            string result = string.Empty;
            byte[] decryted = Convert.FromBase64String(_stringToDecrypt);
            result = System.Text.Encoding.Unicode.GetString(decryted, 0, decryted.ToArray().Length);
            return result;
        }
    }

Espero que le sea de mucha utilidad.

Nota: aquí les dejo un Enlace de encriptación mas avanzado: http://www.esasp.net/2010/08/encriptar-y-desencriptar-con-c-metodo.html

Tips SilverLight: AddRange a un ObservableCollection


En ocasiones me he encontrado con personas que me preguntan si existe una manera de tener un AddRange en un ObservableCollection así como lo tiene el List<T>, pues mi respuesta siempre ha sido este código. Quizás no sea el mas optimo o quizás hay mejores truco pero hasta ahora me ha funcionado muy bien, además que me he ahorrado muchos ForEach Sonrisa.

    public static class ExtensionesColecciones
    {
        public static void AddRange<T>(this ObservableCollection<T> listOriginal
            , IEnumerable<T> collection)
        {
            if (listOriginal == null)
                listOriginal = new ObservableCollection<T>();//En caso de que aun no tenga una instancia

            //Verificamos que sea diferente de null o vacio
            if (!collection.IsNullOrEmpty<T>())
            {
                foreach (var item in collection)
                    listOriginal.Add(item);
            }          
        }
     }

Nota: El Método de Extensión IsNullOrEmpty esta en este Link: https://alexjimenez.wordpress.com/2012/08/03/tips-silverlight-comprobar-si-una-coleccion-esta-vacia-o-nula/

Tips SilverLight: Comprobar si una Coleccion esta vacia o Nula


Existen momentos que queremos saber si una Colección sea un ObservableCollection<T> o un List<T> o cualquiera que herede de una interface IEnumerable<T> puede usar este método de extensión.

    public static class ExtensionesColecciones
    {
        public static bool IsNullOrEmpty<T>(this IEnumerable<T> collection)
        {
            if (collection == null) //null
                return true;
            if (collection.Count() < 1) //empty
                return true;

            return false;
        }
    }

 

Espero que le sea de Ayuda.

Tips SilverLight: Validaciones con Expresiones Regulares (IP, E-Mail, URL)


Existen ocasiones que se desea validar si el texto introducido en un TextBox o que viene de la base de datos tienen el formato valido y es por ello que les traigo estos métodos de extensión para facilitar un poco mas la vida, espero que les sea de mucha utilidad.

    public static class ExtensionesValidacion
    {         
        public static bool IsValidUrl(this string text)
        {
            return Regex.IsMatch(text, @"http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?");
        }
        public static bool IsValidEmailAddress(this string test)
        {
            return Regex.IsMatch(test, @"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");
        }
        public static bool IsValidIPAddress(this string test)
        {
            return Regex.IsMatch(test,
                    @"\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\
                    .(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\
                    .(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\
                    .(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b");
        }
    }

Ejemplo de como lo pueden usar:

TextBox txt=new TextBox();
string url="http://ajdev.net";

if (url.IsValidUrl())
{
    txt.Text = url;
}
else
{
    txt.Text = string.Empty;
}

 

Tips SilverLight: Saber el Primer y Ultimo día del Mes


Muchas ocasiones nos encontramos que tenemos una fecha y queremos obtener el primer y el ultimo día del Mes, pues aquí les dejo estos simple ejemplos que muy probablemente alguien lo hizo mejor, pero igual se los dejo para facilitarles un poco la búsqueda.

public static class ExtensionesFecha
    {
        public static string PrimerDiaMes(this DateTime date)
        {
            return new DateTime(date.Year, date.Month, 1).ToString("dd");
        }

        public static string UltimoDiaMes(this DateTime date)
        {
            return new DateTime(date.Year, date.Month + 1, 1).AddDays(-1).ToString("dd");
        }
    }
Ejemplo de como Aplicarlo:
            string primerDia = DateTime.Now.PrimerDiaMes();
            string ultimoDia = DateTime.Now.UltimoDiaMes();

Con este simple ejemplo que a su imaginación de como quieren obtener el dato, es decir, si quieren que le diga hasta que día de la semana cae ese primer o ultimo di del mes eso lo pueden complementar con el formateo de la fecha: http://www.csharp-examples.net/string-format-datetime/

Como les dije es un ejemplo simple y espero que les sea de mucha utilidad.

Tips SilverLight: Extraer el Color Hexadecimal a String


En el articulo anterior les mostré como asignar un String a Color pero en esta ocasión queremos extraer el String de ese color para guardarlo en la Base de Datos como haríamos esto? pues simple aquí les dejo el método:

     public static string ToHexStringFromColor(this Color c)
        {
            return string.Format("#{0}{1}{2}{3}",
                    c.A.ToString("X2"),
                    c.R.ToString("X2"),
                    c.G.ToString("X2"),
                    c.B.ToString("X2"));
        }

Ahora le dejo el ejemplo de como usar este método de extensión, además lo usare con el mismo ejemplo que usamos en el articulo anterior.

      TextBlock textBlock = new TextBlock();
      textBlock.Foreground = new SolidColorBrush("#FF7277FE".ToColor());
      Color c = (textBlock.Foreground as SolidColorBrush).Color;
      textBlock.Text = string.Format("Color: {0}", c.ToHexStringFromColor());

 

WebCast: Uso de Datos de Prueba, Descarga bajo demanda, Enlace de Datos entre Controles


Este es el tercero de una serie WebCasts donde estaremos utilizando esta fantástica tecnología para desarrollar una aplicación de tipo Album de Fotos.

Estos WebCast están dirigidos para personas que recién empiezan a desarrollar aplicaciones con SilverLight o los que aun no tienen idea de que es, como le comente anteriormente la idea es fomentar el uso de esta tecnología creando un álbum de fotos que es lo que mas les agrada a los estudiantes o a empresarios para visualizar sus productos.

A medida que se realicen los WebCast estaré colocando las demos y las ppts mostradas.

Contenido

1. Introducción a SilverLight, Arquitectura, Evolución, Controles ( PPT)

Moderador(es): Alexander Jiménez

Duración: 60 Minutos

Fecha de inicio: miércoles, 01 de septiembre de 2010 02:00 p.m. Bogotá

2. Animación, Suavización, StoryBoard, Comportamientos, Plantillas de Controles, Pantalla Completa (Demo, PPT)

Moderador(es): Alexander Jiménez

Duración: 60 Minutos

Fecha de inicio: lunes, 13 de septiembre de 2010 02:00 p.m. Bogotá

3. Uso de Datos de Prueba, Descarga bajo demanda, Enlace de Datos entre Controles (Demo, PPT)

Moderador(es): Alexander Jiménez

Duración: 60 Minutos

Fecha de inicio: viernes, 17 de septiembre de 2010 02:00 p.m. Bogotá

4. WCF Ria Services, Datos XML, JSON. (Demo, PPT)

Moderador(es): Alexander Jiménez

Duración: 60 Minutos

Fecha de inicio: miércoles, 29 de septiembre de 2010 10:00 a.m. Bogotá

5. Hospedar Silverlight  (ASP.net, PHP, HTML), Acceso al HTML (DOM), Aplicaciones fuera del Navegador. (Demo, PPT)

Moderador(es): Alexander Jiménez

Duración: 60 Minutos

Fecha de inicio: Sin Definir

Post Cruzado de AJDev.net

WebCast: Serie Silverlight – Animación, Suavización, StoryBoard, Comportamientos, Plantillas de Controles, Pantalla Completa


Este es el segundo de una serie WebCasts donde estaremos utilizando esta fantástica tecnología para desarrollar una aplicación de tipo Album de Fotos.

Estos WebCast están dirigidos para personas que recién empiezan a desarrollar aplicaciones con SilverLight o los que aun no tienen idea de que es, como le comente anteriormente la idea es fomentar el uso de esta tecnología creando un álbum de fotos que es lo que mas les agrada a los estudiantes o a empresarios para visualizar sus productos.

A medida que se realicen los WebCast estaré colocando las demos y las ppts mostradas.

Contenido

1. Introducción a SilverLight, Arquitectura, Evolución, Controles ( PPT)

Moderador(es): Alexander Jiménez

Duración: 60 Minutos

Fecha de inicio: miércoles, 01 de septiembre de 2010 02:00 p.m. Bogotá

 

2. Animación, Suavización, StoryBoard, Comportamientos, Plantillas de Controles, Pantalla Completa (Demo, PPT)

Moderador(es): Alexander Jiménez

Duración: 60 Minutos

Fecha de inicio: lunes, 13 de septiembre de 2010 02:00 p.m. Bogotá

 

3. Uso de Datos de Prueba, Descarga bajo demanda, Enlace de Datos entre Controles (Demo, PPT)

Moderador(es): Alexander Jiménez

Duración: 60 Minutos

Fecha de inicio: viernes, 17 de septiembre de 2010 02:00 p.m. Bogotá

 

4. WCF Ria Services, Datos XML, JSON. (Demo, PPT)

Moderador(es): Alexander Jiménez

Duración: 60 Minutos

Fecha de inicio: Sin Definir

 

5. Hospedar Silverlight  (ASP.net, PHP, HTML), Acceso al HTML (DOM), Aplicaciones fuera del Navegador. (Demo, PPT)

Moderador(es): Alexander Jiménez

Duración: 60 Minutos

Fecha de inicio: Sin Definir

Post Cruzado de AJDev.net

JQuery: Agregar TextBox dinámicamente y enviar la información al Servidor


Hace un tiempo, algún estudiante de uno de los cursos me pregunto como se podía agregar campos de manera dinámica y que estos pueda enviar los datos al servidor ya sea mediante QueryString o mediante AJAX.

Así que haremos comencemos con la demostración.

1. Vamos a crear un nuevo proyecto o tomar un proyecto ya existente (sea una MVC o WebSite o Aplicación web)

Para ello vamos al menú Archivo->Nuevo->WebSite

image

2. Agregaremos la referencia a la librería de JQuery en la cabecera (HEAD del html).

<head runat="server">
<title>Demo Agregar textbox dinámico</title>
<script src="http://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.js" type="text/javascript"></script>
</head>

3. Ahora agregaremos un enlace que invocara a la función de JavaScript que agregara los Campos y otro que enviara los datos por QueryString, adicionalmente un DIV donde se mostraran los campos.

<body>
<form id="form1" runat="server">
<div >
<a href="#" onclick="AgregarCampos();">Agregar Campo</a>
<a href="#" onclick="EnviarDatos();">EnviarDatos</a>
<div id="campos">
</div>
</div>
</form>
</body>

4. Ahora las dos funciones que nos permitirán hacer lo que sea ha planteado desde el inicio de este articulo.

<head runat="server">
<title>Demo Agregar textbox dinámico</title>
<script src="http://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.js" type="text/javascript"></script>
<script type="text/javascript">
//Consecutivo de campos a agregar
campoNuevo = 0;
//Funcion de agregar campos
function AgregarCampos() {
campoNuevo = campoNuevo + 1;
campo = '<li><label>Campo ' + campoNuevo + ':</label><input type="text" size="20" name="campo' + campoNuevo + '" /></li>';
$("#campos").append(campo);
}
//Pasar los valores txt por QueryString
function EnviarDatos() {
var query = "";
$('input[type=text][name!=""]').each(function (index, domEle) {
//alert(index + ': ' + $(domEle).val());
query = query + "&campo" + index + "=" + $(domEle).val();
});
window.location.href = "/CamposAdicionales.aspx?" + query;
}
</script>
</head>

5. Y ahora en la hoja de código de la pagina capturaremos la información proveniente del querystring

protected void Page_Load(object sender, EventArgs e)
{
//Contamos cuantos valores vienen por QueryString
int iCount = Request.QueryString.Count;
//Recorremos cada uno de los valores recibidos
for (int i = 1; i <= iCount; i++)
{
//Mandamos a escribir los valores a la pagina
Response.Write(Request.QueryString[i-1]);
}
}

Ya con esto ustedes pueden reinventar la rueda Sonrisa, pueden ver esta demo en el siguiente link
Post Cruzado de AJDev.net

Tips & Trucos: Como realizar un Autocomplete con JQuery UI y JsonResult de MVC


A mas de uno nos agrada la idea de tener en nuestra aplicación un TextBox que se autocomplete con la información que el usuario va escribiendo. Existen muchos plugins de JQuery que permite realizar esta funcionalidad y que a su ves le agregan un efecto adicional como por ejemplo el autocomplete de FaceBook.

En esta ocasión le mostrare como realizar su propio autocomplete con JQuery 1.4.2 y Jquery UI que nos permite hacer lo que deseamos sin plugins adicionales, y la data la vamos a obtener de un JsonResult de nuestra aplicación MVC (aunque también lo pueden hacer con un WebServices o un WebForms que maneje WebMethods). Sigue leyendo

Entity Framework: Guías Básicas y el Enfoque


Serie de cursos o Guías básicas basados en el Entity Framework 4 que nuestro buen amigo Fernando Loera encontró y publico en su twitter Sonrisa. Aquí le dejo los enlaces:

Nuestro buen amigo Miguel Muñoz Serafín, pode a disposición de todos uno mas de sus excelentes cursos de .NET, aquí el detalle:

Guía básica al Entity Framework 4 Sigue leyendo

MVC: Invocar Reporte de Reporting Services con JQuery y JsonResult (Modo Remoto)


Hace unos días publique varios artículos con respecto a la invocación de un reporte construido en reporting services (ver el mini-tutorial Parte I, Parte II y Parte III y también el articulo Pasar Parametros) pero lo enfocamos a las aplicaciones web de ASP.net específicamente a los WebForms y en ellos podíamos utilizar un control llamado ReportViewer que nos facilitaba mucho la invocación del reporte. Sigue leyendo

ASP.net: Creación de una Aplicación con Membership y Roles – Parte III


Artículos anteriores:

ASP.net: Creación de una Aplicación con Membership y Roles – Parte I

ASP.net: Creación de una Aplicación con Membership y Roles – Parte II

En esta tercera parte vamos a empezar con crear una base de datos (ahora si ustedes ya tienen una base de datos a la que deseen agregar la membrecía pues la pueden seleccionar).

Paso 1.: Abriremos el “Server Explorer” o “Explorador de Servidores” eso lo podrán hacer con la combinación de teclas: Ctrl + W y luego presionan l o ir al menú Vista (View) y seleccionarlo desde allí.

Para leer el resto entra en: http://ajdev.net/Publicacion/Articulo/71

Hasta la próxima entrega.

Post Cruzado de AJDev.net

ASP.net: Creación de una Aplicación con Membership y Roles – Parte II


En el articulo anterior Mostramos como se define el tag del Membership Provider ahora es el turno del Role Provider:

<roleManager enabled="true">
<providers>
<clear/>
<add name="AspNetSqlRoleProvider"
type="System.Web.Security.SqlRoleProvider"
connectionStringName="ApplicationServices"
applicationName="/"/>
</providers>
</roleManager>

Aquí a diferencia del Membership Provider no hay tantos atributos a configurar como por ejemplo Type que ahora esta apuntando a SqlRoleProvider en ves de SqlMembershipProvider, el atributo de connectioStringName se mantiene igual ahora si quieres manejar en una Base de Datos los Roles y en otra la membrecía es totalmente valido solo debes especificar a que cadena de conexión se va conectar.

Bueno ya con esto pasamos a la siguiente parte que es Configurar nuestra aplicación para trabaje cómodamente con la membrecía y los roles, para ello nos ubicamos en el “Solution Explorer” o en Español el “Explorador de Soluciones” nuestro proyecto web (Si no lo tienes o no lo ves pues puedes presionar las teclas Crtl+W y Luego S o sencillamente te vas al menú Ver y allí aparecerá entre los primeros items) .

 

Si quieres leer mas pues te recomiendo que entres en: http://ajdev.net/Publicacion/Articulo/68.aspx

Post Cruzado de AJDev.net