Aqui a minha é uma Advanced Data Crid.
Este único package controla todas as colunas....
Eu pego o fieldName, e trato ele... na realidade recebo a propriedade
"fieldName" + _COR para saber qual cor devo colocar no campo...
Chamo a classe assim:
[Bindable]
public var corFundo:ClassFactory = new ClassFactory(BackgroundRenderer);
Adiciono a propriedade:
//Faz renderer dos campos coloridos
ADVDATAGRID.itemRenderer = corFundo;
ARQUIVO:
BackgroundRenderer.as
package scripts.renderers{
import flash.display.Graphics;
import mx.controls.AdvancedDataGrid;
import mx.controls.Label;
import mx.controls.dataGridClasses.*;
public final class BackgroundRenderer extends Label{
override protected function updateDisplayList(unscaledWidth:Number,
unscaledHeight:Number):void{
super.updateDisplayList(unscaledWidth, unscaledHeight);
var g:Graphics = graphics;
//Limpa as alterações anteriores do Objeto g.
g.clear();
var grid:AdvancedDataGrid = AdvancedDataGrid(DataGridListData(listData).owner);
//Faz com que o Highlight altere tb. a cor de fundo
//if (grid.isItemSelected(data) || grid.isItemHighlighted(data))
// return;
//Pega nome da Coluna
var columnMetadata:DataGridListData = DataGridListData(listData);
var fieldName:String = columnMetadata.dataField;
/**
* @param if
* Deixa o fundo conforme a cor desejada
*/
//Deixa FieldCol apenas com nome da coluna antes de _COR
var fieldCol:Array = fieldName.split("_");
fieldName = fieldCol[0] + "_COR";
//data.AM_R = fieldCor;
if(data[fieldName] == "A" ){
g.beginFill(0xfcf880);
}
if(data[fieldName] == "V" ){
g.beginFill(0xfda1a1);
}
//Termina Renderer
g.drawRect(0, 0, unscaledWidth, unscaledHeight);
g.endFill();
}
}
}
Atenciosamente
Jean Duarte
----- Original Message -----
From: "Gabriela Trindade Perry" <[email protected]>
To: "flexdev" <[email protected]>
Sent: Thursday, July 23, 2009 11:23 AM
Subject: [flexdev] Re: Datagrid "Lento"
Bem, se vais definir a tecnologia com base nisso, é uma escolha tua.
A solução do problema passa pelo caminho que eu dei antes. Vou postar
código porque é uma coisa que eu acho que a maioria do pessoal já
poderia ter aprendido, mas que não sabe fazer.
1. Tem estilos prontos? Não
2. Tem skins prontas? Não (porque não tem estilos)
3. É fácil criar skins a partir de ProgrammaticSkins? Não (idem)
4. Olhando no sdk, é fácil identificar os métodos que controlam a
renderização? Sim. DataGridColumn tem uma propriedade que chama
itemRenderer, que define o itemRenderer (veja só...) da coluna. Porém,
não vai dar pra usar esta classe porque ela descende de UITextField,
que não tem cor de fundo. Então só nos resta...
5. ItemRenderer. SIM
Porém você deve estar implementando mal. Veja a forma correta de
solucionar este problema (de acordo com o link que eu passei antes).
Daqui para frente é contigo (ou com quem quiser te ajudar a mexer
neste código)
package{
import mx.controls.listClasses.IListItemRenderer;
import mx.core.UIComponent;
import mx.events.FlexEvent;
public class MyCustomItemRenderer extends UIComponent implements
IListItemRenderer{
private var _data:Object;
[Bindable("dataChange")]
public function MyCustomItemRenderer(){
super();
}
public function get data():Object {
return _data;
}
public function set data(value:Object):void {
_data = value;
invalidateProperties();
dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
}
override protected function updateDisplayList( uw:Number,
uh:Number ) : void{
super.updateDisplayList(uw, uh);
graphics.beginFill(0x440099);
graphics.drawRect(0,0,uw, uh);
graphics.endFill();
}
}
}
Boa sorte
--~--~---------~--~----~------------~-------~--~----~
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para [email protected]
Para sair da lista, envie um email em branco para
[email protected]
Mais opções estão disponíveis em http://groups.google.com/group/flexdev
-~----------~----~----~----~------~----~------~--~---