Tips SilverLight: Saber el Primer y Ultimo dia 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());

Tips SilverLight: Obtener Color de un Hexadecimal

Muchas veces estamos creando un control desde código y no tenemos el color de manera directo si no un valor proveniente de la base de datos algo así como el siguiente ejemplo:

      TextBlock textBlock = new TextBlock();
      textBlock.Text="Prueba de Foreground";
      textBlock.Foreground = new SolidColorBrush("#FF7277FE"); //Esto esta Mal

Donde el código anterior esta mal por que el SolidColorBrush recibe como parámetro un dato de tipo Color, es por ello que se debe tener el siguiente código que lo declare en una clase estática para así tener mi método de extensión.

    public static class ExtensionesColores
    {
        public static Color ToColorFromHex(this string s)
        {
            if (s.StartsWith("#"))
            {
                s = s.Substring(1);
            }
            byte a = System.Convert.ToByte(s.Substring(0, 2), 16);
            byte r = System.Convert.ToByte(s.Substring(2, 2), 16);
            byte g = System.Convert.ToByte(s.Substring(4, 2), 16);
            byte b = System.Convert.ToByte(s.Substring(6, 2), 16);
            return Color.FromArgb(a, r, g, b);
            
        }
    
public static Color ToColorFromString(this string colorString)
   {
      Type colorType = (typeof(Colors));
      if (colorType.GetProperty(colorString) != null)
      {
         object color = colorType.InvokeMember(colorString
                    , BindingFlags.GetProperty, null, null, null);
         if (color != null)
          {
            return (Color)color;
          }
      }
      else
      {
        try
          {
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append("<Line xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation");
          sb.Append("  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" ");
          sb.AppendFormat(" Fill="{0}" />", colorString);

              Line lne = (Line)XamlReader.Load(sb.ToString());
              return (Color)lne.Fill.GetValue(SolidColorBrush.ColorProperty);
           }
             catch { }
          }
       throw new InvalidCastException("Color no definido");
    }

Lo que en corrección al código que mostramos al inicio de declarar un control quedaría de esta manera:

         TextBlock textBlock = new TextBlock();
         textBlock.Text = "Prueba de Foreground";
         textBlock.Foreground = new SolidColorBrush("#FF7277FE".ToColorFromHex());

Espero que le sea de mucha ayuda.

Off-Topic: Volviendo al mundo..!!

Hola a tod@s

 

Después de 2 años de ausencia en el mundo bloguero he vuelto y con ganas de seguir posteando buenos artículos basándome en la experiencia para ayudar a quienes estén comenzando o que ya tengan tiempo en el mundo de la programación.

Han pasado muchas cosas desde la ultima ves que publique algo, lanzamiento de productos nuevos y muy novedosos, Grandes anuncios en las diferentes áreas tecnológicas y hasta una hermosa bebita tengo Sonrisa

Espero seguir siendo de apoyo y que mis futuros artículos le sean de muchísima ayuda. Quiero agradecer a las personas que han visitado mi blog en los últimos 3 años, no quiero ponerme sentimental ni mucho menos extenderme con tanto bla bla bla así que hasta prontoSonrisa.

WebCast: WCF Ria Services, Datos XML, JSON.

Este es el cuarto 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

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

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

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

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).

1. Crearemos un Proyecto de tipo MVC 2 (Menú Archivo->Nuevo->Proyecto)

image

2. En nuestra carpeta Models vamos agregar una nueva clase: Esta nueva clase vamos a simular algunos datos, o si prefieren pueden enlazar la información a un Entity Framework.

Le damos botón derecho sobre la carpeta Models y seleccionaremos la opción Agregar->Nuevo elemento->Clase, y la llamaremos MPersona.cs (la M adelante es para darnos la idea de que es una clase Models)

image

3. Agregar Propiedades a la clase.

Agregaremos las propiedades básicas de una persona que son:

Nombre

Apellido

y una ultima propiedad que mostrara la informa completa de las 2 propiedades anteriores al que llamaremos NombreCompleto.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MvcDemosBlog.Models
{
public class MPersonas
{
public string Nombre { get; set; }
public string Apellido { get; set; }
public string NombreCompleto {
get
{
return string.Format("{0} {1}", Nombre, Apellido);
}
}
}
}

4. Agregar funcionamiento a la Clase.

Ahora lo que queremos es que esto nos devuelva un colección de nombres el cual mostraremos en el textbox a medida que el usuario escriba, para debajo de las propiedades agregadas arriba vamos a crear un método que retorna una lista genérica de la clase persona. El método lo llamaremos ObtenerPersonas() y será estático y publico para solo enfocarnos en retornar la información sin tener que declarar nuevas instancias para acceder al método.

public static List<MPersonas> ObtenerPersona()
{
//Agregamos valores aleatorios
//Este metodo puedes agregar tu propia logica 🙂
List<MPersonas> lista = new List<MPersonas>
{
new MPersonas{ Nombre="Alex", Apellido="Jimenez"},
new MPersonas{ Nombre="Pedrito", Apellido="Perez"},
new MPersonas{ Nombre="Jacinta", Apellido="Juarez"},
new MPersonas{ Nombre="Teodoro", Apellido="Finito"},
new MPersonas{ Nombre="Mengano", Apellido="Rojas"},
new MPersonas{ Nombre="Sutano", Apellido="White"}
};

return lista;
}

5. Crear un JsonResult.

Ahora en nuestro HomeController ubicado en la carpeta Controller vamos agregar la siguiente acción que devolverá la información en Formato Json.

/// <summary>
/// Metodo que retorna en formato json el resultado de la busquedad
/// </summary>
/// <param name="term">Termino de busquedad</param>
/// <returns>JSON</returns>
public JsonResult Personas(string term)
{
if (string.IsNullOrWhiteSpace(term))
{
//Si viene el parametro term vacio o con espacio o null
//este devolvera todos los valores del metodo
return this.Json(Models.MPersonas.ObtenerPersona(), JsonRequestBehavior.AllowGet);
}
else
{
//si viene con valor este filtrara la información correspondiente
//a la primera letra del campo NombreCompleto
var query = from p in Models.MPersonas.ObtenerPersona()
where p.NombreCompleto.ToUpper().StartsWith(term.ToUpper())
select p;

return this.Json(query, JsonRequestBehavior.AllowGet);
}
}

Ya con esto podemos hacer nuestra primera prueba que es darle F5  y escribir en la barra de dirección lo siguiente: http://localhost:mipuerto/home/personas

image

6. Referencia a las Librerías de JQuery.

Abrimos la MasterPage que se encuentra dentro de la carpeta Views->Shared y en el head le colocaremos los enlaces a las librerías de JQuery 1.4.2 y al JQuery UI 1.8.4 (tanto css y js)

<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>
<asp:ContentPlaceHolder ID="TitleContent" runat="server" />
</title>
<link href="../../Content/Site.css" rel="stylesheet" type="text/css" />

<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/themes/base/jquery-ui.css"
rel="stylesheet" type="text/css" />

<script src="http://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.js"
type="text/javascript"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/jquery-ui.min.js"

         type="text/javascript">

</script>
</head>

 

7. Agregar los controles al html.

Ahora vamos a la carpeta View luego a HOME y abrimos  Index.aspx para agregar un textbox (o input de tipo Text) y div.

<input id="txtAutocomplete" type="text" />
<div id="log" style="overflow: auto;"></div>
8. El AutoComplete;
Ahora debajo de los controles arrojado en la pagina Index.aspx colocaremos lo siguiente:

<script type="text/javascript">
$(document).ready(function () {
//Para escribir el valor seleccionado en el DIV
function log(message) {
$("<div/>").text(message).prependTo("#log");
$("#log").attr("scrollTop", 0);
};
//Invocacion a la funcion autocomplete
$("#txtAutocomplete").autocomplete({
//Los datos, que son invocado mediante JQuery ajax
source: function (request, response) {
$.ajax({
//Ruta donde buscar los datos
url: "/home/personas",
//Parametros con sus valores a pasar a la url
data: { term: $("#txtAutocomplete").val() },
//Tipo de Dato devuelto
dataType: "json",
//Si todo esta ok, construye los datos a mostrar en el textbox
success: function (data) {
response($.map(data, function (item) {
return {
//Indicamos el Valor
value: item.NombreCompleto,
//el Label si lo desean
// label: item.Nombre,
//y el ID
id: item.Nombre
}
}))
}
})
},
//Minima letra permitida para mostrar la lista de resultado
minLength: 1,
//Cuando seleccione un valor muestra su resultado
select: function (event, ui) {
log("Selecciono Valor: " + ui.item.value + ", id: " + ui.item.id );
}
});
});
</script>

Ya esto con esto es todo.. puedes ver la demo presionando aquí y el código fuente de aquí