Comunidad de diseño web y desarrollo en internet online

Color de fila de un datagrid !

Citar            
MensajeEscrito el 08 Oct 2007 06:52 pm
Alguien sabe como cambiarle el color de fondo a una celda de un dataGrid ..?

saludos

Por Zandy

Claber

1345 de clabLevel

5 tutoriales

Genero:Masculino   Premio_Secretos

firefox
Citar            
MensajeEscrito el 09 Oct 2007 12:09 am
Hola

Si es en una celda en particular, podes usar itemRenderder junto con alguna condicion, para poner de fondo un color u otro...

Estas usando Flex o Flash cs3???

Saludos

Por alfathenus

833 de clabLevel

5 tutoriales

 

buenos aires || Argentina

firefox
Citar            
MensajeEscrito el 09 Oct 2007 01:45 pm
Uso Flex, pero estoy mirando, las functiones drawRowBackground, updateDisplayList, a ver que les puedo sacar....

saludos ^^

Por Zandy

Claber

1345 de clabLevel

5 tutoriales

Genero:Masculino   Premio_Secretos

firefox
Citar            
MensajeEscrito el 09 Oct 2007 02:55 pm
Bueno aqui pongo como lo eh solucionado...

Primero que todo hago una clase llamada myDataGrid que extiende de mx.controls.Datagrid y la situo en la misma carpeta del proyecto Flex, (la puedes poner donde quieras y despues especificar en el package de la clase la ruta.)

MyDataGrid.as

Código :

package { 

  import mx.controls.DataGrid;
  public class myDataGrid extends DataGrid {

  }
}


y dentro de ella sobre-escribimos el metodo drawRowBackground que no es mas que el metodo en el datagrid que se encarga de pintar el fondo de la celda..

Código :

package { 
    import mx.collections.ArrayCollection;
    import mx.controls.DataGrid;
    import flash.display.Sprite;

  public class myDataGrid extends DataGrid {
       override protected function drawRowBackground(s:Sprite,rowIndex:int,y:Number,height:Number,color:uint,dataIndex:int):void  
        {  
         var dp:ArrayCollection = dataProvider as ArrayCollection;
         var item:Object;
                          
         if( dataIndex < dp.length ) item = dp.getItemAt(dataIndex);
         if( item != null && item.price < 20 ) color = 0xFF8800;
         else color = 0xFFFFFF;
         
         super.drawRowBackground(s,rowIndex,y,height,color,dataIndex);  
         } 
  }
}


Desmenuzando un poco este codigo..
var dp:ArrayCollection = dataProvider as ArrayCollection; --> Creamos un arrayCollection dp que le pasaremos el contenido del dataProvider del Grid en cuestion [el mismo.]
var item:Object; --> Una variable objet para almacenar temporalmente el contenido de la fila
if( dataIndex < dp.length ) item = dp.getItemAt(dataIndex); --> Aqui le añado el contenido de la fila actual a item SI el dataIndex [indice de la fila actual] es menor que el largo del arrayCollection dp que es la copia del dataProvider. (el # de filas de un datagrid no es = al numero de elementos del dataProvider!)
if( item != null && item.price < 20 ) color = 0xFF8800; --> Aqui digo que si item que es el que contiene los valores de la fila actual no es null y ademas el campo price <20 la variable color sera un naranja claro..;-)
else color = 0xFFFFFF; --> Si no la variable color sera blanca...

super.drawRowBackground(s,rowIndex,y,height,color,dataIndex); --> Aqui invocamos al metodo drawRowBackground de la superclase... (dataGrid)... dentro de los parametros que se le pasa..

Bien ahora abrimos nuestro proyecto Flex. y creamos el siguiente script que nos llena un arrayCollection provisional ..

Código :

<mx:Script>
   <![CDATA[
      import mx.collections.ArrayCollection;
      [Bindable] public var f:ArrayCollection = new ArrayCollection();
      
      function a()
      {
         var h:Object = new Object();
         for(var i:int=0;i<10;i++)
         {
            h = {};
            h["products"] = "Judias_"+i.toString();
            h["price"] = 10*i;
            f.addItem(h);
         }
      }
   ]]>
</mx:Script>


Ahora insertamos nuestro GRID (myDataGrid)...

Código :

<local:myDataGrid dataProvider="{ f }" >
   <local:columns>
      <mx:DataGridColumn headerText="Column 1" dataField="products"/>
      <mx:DataGridColumn headerText="Column 2" dataField="price"/>
   </local:columns>
</local:myDataGrid>


Ejecutamos y listo...


espero les sea de ayuda ....

Por Zandy

Claber

1345 de clabLevel

5 tutoriales

Genero:Masculino   Premio_Secretos

firefox
Citar            
MensajeEscrito el 10 Oct 2007 03:15 am
Es de mucha ayuda, yo también así lo hago y con Flex 2, creo que es la opción mas decente. Deberías pasar esto a tip.


saludos

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 12 Oct 2007 12:11 pm
Como paso esto a tips ???, es que nunca eh hecho uno y no se como es el mecanismo.... !!

saludos

Por Zandy

Claber

1345 de clabLevel

5 tutoriales

Genero:Masculino   Premio_Secretos

firefox
Citar            
MensajeEscrito el 13 Oct 2007 07:44 am

Joris Van Spilbergen escribió:

Como paso esto a tips ???, es que nunca eh hecho uno y no se como es el mecanismo.... !!

saludos
Simplemente escribe un artículo como un nuevo tema en el foro "Tips". Pasado un rato aparecerá en portada.

Saludos

Por Freddie

BOFH

53 tutoriales
597 articulos
43 ejemplos

Genero:Masculino   Admin

Conserje de Cristalab

firefox
Citar            
MensajeEscrito el 11 Jun 2009 10:00 pm
Y para que esto funcione local:myDataGrid, como hay que agregarlo?
xmlns:local="myDataGrid.as"

o como?

Por sergestux

49 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 12 Ene 2011 03:12 pm
Hola!, por casualidad saben hacer esto en un combobox de flash con as3? Muchas gracias! Saludos.
m

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.