Foro

Asignar color a una celda de un Grid

0
Hola a a todos Deseo desplegar en una ventana una especie de leyenda de mapa, para esto tengo la informacion en un Json la cual la cargo a un grid, lo que deseo es que de acuerdo a los valores con los que provenga el Json, el grid me despliegue por cada celda el color asociado a cada valor o registro, logre hacerlo siguiendo los pasos de Gustavo21 (http://foro.quizzpot.com/discussion/comment/3524/#Comment_3524) pero me asigna el color a toda la fila del grid y yo solo necesito los colores para una columna especifica. Voy a colocar el codigo que realice, espero me ayuden porque a decir verdad creo me estoy complicando demasiado. Primero les doy un vistazo de la informacion contenida en el Json: {total:6, Criterios : [{Color:"#FF0000",Label:"0-10"},{Color:"#00FF00",Label:"10-20"}, {Color:"#0000FF",Label:"20-30"},{Color:"#00FFFF",Label:"30-40"}, {Color:"#FF00FF",Label:"40-50"},{Color:"#FFFF00",Label:"50-60"}]}
var store = new Ext.data.JsonStore({
		url: 'Colores.json',
		root: 'Criterios',
		fields: ['Label', 'Color']
	});
    var Columnas = new Ext.grid.ColumnModel([ 
        {
            header:'Intervalos', 
            id:'Label', 
            width: 60, 
            dataIndex:'Label',
            sortable: false,
            css:"background-color:#FFF;" // si no le asigno el color a la columna la fila completa quedara con el color asignado al registro, tal cual como aparece e la imagen color2
        },
        {
            header:'Color', 
            width: 45, 
            //dataIndex:'Color',  lo dejo asi para que no me cargue el texto puntual del color en la columna, tal como aparece en la imagen color
            sortable: true,
            id:'Color',
            css:'border-style:solid; border-width:1px;'
            }
        ]); 
        
	var gridView = new Ext.grid.GridView({ 
		forceFit: true, //Comentar si no. 
		getRowClass : function (row, index) { 
		var cls =''; 
		var data = row.data.Color;  //Color es el campo que contiene la simbologia para la leyenda
		switch (data) {  
			case '#FF0000' :  cls = 'redrow'
				break; 
			case '#00FF00' :  cls = 'greenrow'
				break; 
			case '#0000FF' :  cls = 'bluerow'
				break; 
		  }//end switch 
				return cls; 
		  } 
	});  //end gridView 
		
    grid = new Ext.grid.EditorGridPanel({
        store: store,
        view:gridView,
        cm:Columnas,
        columnLines:true,
        width: 300,
        height:130, 
    });
    store.load();
// Estilos generados
   .redrow { 
		background-color: #F00 !important; 
	} 
   .greenrow { 
		background-color: #0F0 !important; 
       }   
   .bluerow { 
		background-color: #00F !important; 
	} 
Me gustaria saber si existe una forma mas sencilla de hacer esto con la informacion proveniente del Json y si es posible que fuera de una forma mas dinamica, ya que los colores que traigo del Json son seleccionados aleatoriamente de una paleta de colores, por lo tanto el metodo que  he mostrado me obliga a conocer previamente los valores de  los colores provenientes del Json para asi desplegarlos en el grid.
Bueno quedo a la espera de una mano amiga 
0
Te recomiendo utilizar la propiedad "renderer" de cada columna, esta propiedad acepta una función que es como un "interceptor" que se ejecuta justo antes de asignarle el valor a mostrar a la celda de determinada columna. Dentro de esta función puedes asignar estilos a la columna, yo aquí es donde asigno el color de fondo, inclusive si viene desde el servidor dicho color, utiliza el parámetro metadata para acceder a los estilos de la celda. { header: 'Testing', dataIndex: 'test', renderer: function(value, metaData, record, rowIndex, colIndex, store) { metaData.attr : 'style="background-color:'+record.get('Color')+';"'; return value; } } http://docs.sencha.com/ext-js/3-4/#!/api/Ext.grid.Column-cfg-renderer Saludos
0
Muchas gracias Crysfel, segui las instrucciones tal cual y me funciono, pero me toco hacer el la siguiente correccion para que funcionara:
{
            header:'Color', 
            width: 45, 
            dataIndex:'Color',
            sortable: true,
            id:'Color',
            css:'border-style:solid; border-width:2px;',
            renderer: function(value, metaData, record, rowIndex, colIndex, store) { 
				  metaData.attr ='style="background-color:'+value+';"' //me toco utilizar = porque con los : me asignaba un error el cual me decia que no aceptaba el string asignado
			   } 
			
            }
 como dice en el tuto “value” (Object) : Es la información original que se imprimirá en la celda (http://www.quizzpot.com/2009/07/formato-a-la-informacion-de-las-celdas/) en mi caso value contiene los colores asignados para cada celda por lo tanto me facilitaba aun mas la representacion
Nuevamente Gracias por la colaboracion
0
Si, un error de sintaxis por parte mia XD que bien que te funciono. Saludos

¿Conoces a alguien que pueda responder esta pregunta? Comparte el link en Twitter o Facebook

Es necesario registrarse para poder participar en el foro! Si ya tienes una cuenta puedes entrar y comentar en este foro.