Marc Rubiño

ASP.NET, C#, AJAX.NET, JavaScript, etc.

December 2007 - Artículos

DropDownList Color Picker

Quien no ha necesitado alguna vez poder echar mano de algún control para poder mostrar los colores del sistema y que los usuarios puedan personalizar su entorno.

Pues hoy vamos a retocar la presentación de un DropdonwList para mostrar el color de fondo con el color del registro.

Nuestro control se mostrara tal que así:

 

Para realizar esto solo necesitaremos un método.

private void CargarColores( DropDownList ddl )

    {

        int index = -1;

        if (ddl.SelectedIndex > 0)

            index = ddl.SelectedIndex;

 

        //Inicializamos los colores y mostramos el mensaje de seleccionar color.

        ddl.Items.Clear();

        ddl.Items.Add("Color...");

 

        foreach (int pos in Enum.GetValues(typeof(System.Drawing.KnownColor)))

        {

            string strnColor = Enum.GetName(typeof(System.Drawing.KnownColor), pos);

            System.Drawing.Color color = System.Drawing.Color.FromName(strnColor);

 

            if (!color.IsSystemColor)

            {

                ListItem item = new ListItem(color.Name, pos.ToString());

                item.Attributes.CssStyle.Add(HtmlTextWriterStyle.BackgroundColor, color.Name);

                ddl.Items.Add(item);

            }

        }

 

        //Si tenia indice lo seleccionamos.

        if (index > 0)

            ddl.SelectedIndex = index;

    }

Para obtener los colores del sistema contamos con la enumeración System.Drawing.KnownColor el cual lo recorreremos para obtener un objeto System.Drawing.Color  y poderlo utilizar para generar los items del Dropdownlist .

foreach (int pos in Enum.GetValues(typeof(System.Drawing.KnownColor)))

Para que solo nos muestre los colores compatibles y no los de los controles del sistema  if (!color.IsSystemColor).

Finalmente crearemos el Item y le añadiremos el estilo adecuado para mostrar el color de fondo.

item.Attributes.CssStyle.Add(HtmlTextWriterStyle.BackgroundColor, color.Name);

Para que podáis jugar un poco con la pruebas he creado un proyecto que podréis descargar.

 

Proyecto:   DropDownList Color Picker

Espero que sea de utilidad.

CrossPosting to http://lonetcamp.com

 

Posted: 12/12/2007 23:58 por Marc Rubiño | con 6 comment(s)
Archivado en: ,
CrossTabs "Dinamic Pivot"

Si trabajáis normalmente con datos seguro que habéis necesitado crear alguna vez una consulta que devuelva una tabla con datos cruzados "Transformar filas en Columnas".

En SQL 2005 tenemos una función llamada PIVOT que intenta recuperar la funcionalidad de MS Access TRANSFORM pero nos encontramos con un gran inconveniente, tenemos que conocer el nombre de las nuevas columnas que queremos recuperar.

 Por ejemplo tenemos este código sacado de un artículo de Sebastian Contente...

SELECT Vendedor,isnull([Perfumes],0) as Cremas ,isnull([Desodorantes],0) as Desodorantes,
isnull([Cremas],0) as Perfumes
/*Select que define como se mostraran los tados y por que columna se agrupara (Vendedor)*/

FROM
(  ...  ) po

/*Origen de los Datos*/
PIVOT
(
SUM(cantidad)
FOR Rubro IN
    ([Cremas] , [Perfumes] , [DEsodorantes])
    ) AS PVT

Podéis comprobar  que utiliza PIVOT para recuperar tres nuevas columnas por cada tipo de producto y  filtrado por vendedor sumando la cantidad a mostrar.

Pero Claro Tenemos que saber que existen estos registros para formar las nuevas columnas!!!

Que opciones tenemos para poder generar estas nuevas columnas dinámicamente?, bueno por Internet podemos encontrar varias formas y os recomiendo personalmente este artículo para sacarnos de dudas.

Este crack hasta ha hecho una aplicación para probar el rendimiento de las dos opciones y ha sacado esta conclusión.

Beginning performance test for crosstab techniques.

Please enter the # of iterations to perform:
75

Testing dynamic SQL crosstab procedure....
-- Result: 25 seconds.

Testing static SQL crosstab procedure....
-- Result: 22 seconds.

Testing C# crosstab transformation....
-- Result: 8 seconds.

Testing complete.

Artículo completo...

Esta clarísimo cual es la forma más óptima para poder utilizar Crosstabs en nuestras aplicaciones y con un par de cambios podemos poner la función en nuestro DAL para reutilizarla fácilmente.

Bueno en definitiva si podéis pasaros por Jeff's SQL Server Blog  que es totalmente recomendable.

Saludos.

CrossPosting de http://www.lonetcamp.com

 

Posted: 4/12/2007 15:30 por Marc Rubiño | con 1 comment(s)
Archivado en: ,,