Desenvolvimento - ActionScript
Trabalhando com a classe DataGrid – Pacote fl.controls
por Jhonatan Rosa Jacinto
No Flash, também podemos trabalhar com componentes mais complexos de interface com o usuário (UI – User interface). Um exemplo destes componentes é o que veremos neste Tutorial: o DataGrid.
DataGrid(Grade de Dados) é um recurso que disponibiliza a visualização de dados em uma espécie de tabela dinâmica. Este recurso é muito utilizado em outras tecnologias como ASP.NET, para a visualização de informações vindas de um banco de dados por exemplo.
Este tutorial será composto pelos seguintes itens:
fl.controls.DataGrid = Classe DataGrid a qual permite a visualização de dados em uma espécie de tabela personalizada.
fl.data.DataProvider = Classe Provedora de dados para objetos contêiner.
fl.controls.dataGridClasses.DataGridCellEditor = Classe que permite a edição de dados em um DataGrid.
fl.controls.dataGridClasses.DataGridColumn = Classe que permite a personalização de colunas em um DataGrid.
fl.controls.dataGridClasses.HeaderRenderer = Classe que obtém informações sobre o cabeçalho das colunas de um DataGrid.
Primeiramente conheceremos o DataGrid. Por isso, abra o Adobe Flash CS3 Professional e clique em Actionscript File 3.0.

A tela de inserção de SCRIPT aparecerá.
Digite o código abaixo(ele está completamente comentado para ajudar no entendimento da lógica aplicada):
package{
//Classe que permite o desenho de objetos no Stage
import flash.display.Sprite;
//Pacote da classe DataGrid que iremos utilizar
import fl.controls.DataGrid;
//O pacote fl.events possui vários eventos relacionados a componentes
//Um destes eventos é o ListEvent que é aplicado à qualquer objeto
//que permita listagem de dados como por exemplo o DataGrid
import fl.events.ListEvent;
//DataProvider é uma classe contêiner que armazena dados a serem
//aplicados em qualquer outro objeto
import fl.data.DataProvider;
//Criamos uma classe chamada DataGridExample que representará os
//objetos que serão adicionados no Stage
public class DataGridExample extends Sprite{
//criamos uma instância da classe DataGrid chamada ‘dg’
private var dg:DataGrid = new DataGrid();
//criamos agora uma instancia da classe DataProvider
private var dp:DataProvider = new DataProvider();
//criamos o contrutor da classe principal. Ele é o responsável
//por inicializar todos os componentes e métodos da classe
public function DataGridExample():void{
var i:Number;
//Adicionamos um laço “for” para adicionar itens randomicamente ao
//DataProvider
for(i=0; i<=50; i++)
{
dp.addItem({label:"Meu Item " + i});
}
//O evento ITEM_CLICK da classe ListEvent foi adicionado ao DataGrid.
//Assim quando algum item do dg for clicado, o evento itemClickEvent
//Será disparado.
dg.addEventListener(ListEvent.ITEM_CLICK, itemClickEvent);
//configuramos o tamanho do DataGrid: Width=300 e Heigth=300
dg.setSize(300, 300);
//a propriedate sortableColumns permite ou não a ordenação Crescente ou
//decrescente dos itens
dg.sortableColumns = true;
//atribuímos os itens do DataProvider ao DataGrid
dg.dataProvider = dp;
//finalmente adicionamos o DataGrid no Stage.
this.addChild(dg);
}
//Declaramos a função itemClickEvent que será disparada quando algum
//item do DataGrid for clicado
private function itemClickEvent(event:ListEvent):void{
//uma mensagem é mostrada no painel output em função do evento.
trace(event.item.label + " foi clicado!");
}
}
}
Salve o arquivo como DataGridExample.as em algum local. Crie um novo arquivo Flash File (ActionScript 3.0) adicione à Biblioteca (library) um componente DataGrid. Em Document Class, na aba properties, digite o Nome do Arquivo .as(No caso DataGridExample) e salve o arquivo .fla no mesmo diretório onde salvou o .as.
Rode o .swf e veja o resultado:

Um DataGrid é adicionado ao Stage com 50 itens adicionados. Ao clicarmos em algum...

Uma mensagem aparece com o nome do item clicado.
Introdução ao pacote fl.controls.dataGridClasses
O pacote fl.controls.dataGridClasses foi criado para justamente a manipulação de qualquer ícone relacionado ao objeto DataGrid. Isso significa que os métodos e propriedades deste pacote só podem ser atribuídos ao objeto DataGrid.
Veremos a utilização de cada um na seqüência abaixo:
fl.controls.dataGridClasses.DataGridColumn
Veremos agora um exemplo de utilização desta classe:
package{
//Como já dissemos a classe Sprite é a responsável por permitir o desenho
//de objetos no Stage
import flash.display.Sprite;
//pacote da classe DataGrid
import fl.controls.DataGrid;
//Importamos a classe DataGridColumn
import fl.controls.dataGridClasses.DataGridColumn;
//Para este exemplo usaremos um evento da classe DataGridEvents
//O evento que usaremos é o COLUMN_STRETCH que será explicado mais adiante
import fl.events.DataGridEvent;
//Importamos o DataProvider
import fl.data.DataProvider;
//Criamos a classe principal da aplicação
public class DataGridColumnExample extends Sprite{
//criamos uma nova instancia da classe DataGrid chamada ‘dg’
private var dg:DataGrid = new DataGrid();
//Fazemos o mesmo com o DataProvider
private var dp:DataProvider = new DataProvider();
public function DataGridColumnExample():void{
var i:Number;
//Usando o laço for novamente adicionamos no objeto DataProvider
//Os itens de cada coluna do DataGrid
for(i=0; i<=50; i++)
{
dp.addItem({Coluna1:"Meu item Coluna 1" + i,
Coluna2:"Meu Item Columa 2 " + i,
Coluna3:"Meu Item Coluna 3 " + i});
}
//O comando With() permite acessar de uma só vez vários métodos e
//propriedades de um objeto. No caso o DataGrid
with(dg)
{
//O evento COLUMN_STRETCH da classe DataGridEvent faz referência à ação
//de redimensionamento da largura de uma coluna.
addEventListener(DataGridEvent.COLUMN_STRETCH, columnStretchEvent);
//Adicionamos 3 colunas ao DataGrid
columns = [new DataGridColumn("Coluna1"), new DataGridColumn("Coluna2"), new DataGridColumn("Coluna3")];
//Permitimos a ordenação dos itens através da propriedade sortableColumns
sortableColumns = true;
setSize(500,500);
}
//Adiciomandos o DataProvider ao DataGrid
dg.dataProvider = dp;
this.addChild(dg);
}
//O método columStretchEvent será acionado todas as vezes que uma certa
//coluna do DataGrid for redimensionada
private function columnStretchEvent(event:DataGridEvent):void{
//Criamos uma nova instancia da classe DataGrid que receberá o nome
//do DataGrid que está no Stage através dos comandos
//event.target que será tratado como uma instancia da classe DataGrid
//’as DataGrid’
var dg1:DataGrid = event.target as DataGrid;
//Mostramos no painel output o nome da coluna que foi modificada.
trace(dg1.columns[event.columnIndex].headerText + " foi modificada");
}
}
}
Salve o arquivo como sendo DataGridColumnExample.as e faça a relação deste com um arquivo .fla.
O resultado no swf será o seguinte:

Ao tentarmos redimensionar uma das colunas...
![]()
Uma mensagem aparece no painel output:

Poderíamos escrever o final deste código da seguinte maneira, usando como referencia um DataGridColumn:
private function columnStretchEvent(event:DataGridEvent):void{
var dg1:DataGrid = event.target as DataGrid;
var dgc:DataGridColumn = dg1.columns[event.columnIndex];
trace(dgc.headerText + " foi modificada");
}
fl.controls.dataGridClasses.DataGridCellEditor
Como o próprio nome diz, a classe DataGridCellEditor refere-se à edição de dados em células de um DataGrid.
Isso permite que itens, como os adicionados possam ser editados diretamente em tempo de execução.
Além disso podemos definir estilos para personalizar a edição.
Utilizaremos um outro exemplo usando o ActionScript File 3.0.
Após criação do Arquivo .as salve-o como DataGridCellEditorExample.as no mesmo diretório da aplicação .fla
Não se esqueça de atribuir no Painel Properties, o nome do arquivo .as em Document Class.
Vejamos o código da aplicação.
package{
import flash.display.Sprite;
import fl.controls.DataGrid;
import fl.controls.dataGridClasses.DataGridCellEditor;
import fl.controls.dataGridClasses.DataGridColumn;
import fl.data.DataProvider;
import flash.text.TextFormat;
import flash.text.TextFormatAlign;
import fl.events.DataGridEvent;
public class DataGridCellEditorExample extends Sprite{
private var dg:DataGrid = new DataGrid();
private var dp:DataProvider = new DataProvider();
private var textFormat:TextFormat = new TextFormat();
private var dgce:DataGridCellEditor = new DataGridCellEditor();
public function DataGridCellEditorExample():void{
var i:Number;
for(i=0; i<=50; i++)
{
dp.addItem({Coluna1:"Meu Item - Coluna1",
Coluna2:"Meu Item - Coluna2",
Coluna3:"Meu Item - Coluna3"});
}
with(textFormat)
{
align = TextFormatAlign.CENTER;
font = "Verdana";
color = 0xff9900;
bold = true;
}
dgce.textField.background = true;
dgce.textField.backgroundColor = 0x666666;
dgce.setStyle("textFormat", textFormat);
with(dg)
{
sortableColumns = false;
setSize(400,400);
columns = [new DataGridColumn("Coluna1"), new DataGridColumn("Coluna2"), new DataGridColumn("Coluna3")];
dataProvider = dp;
editable = true;
addEventListener(DataGridEvent.ITEM_EDIT_BEGINNING, itemEditBeginEvent);
}
var t:Number;
for(t=0; t<3; t++)
{
dg.columns[t].itemEditor = dgce;
}
this.addChild(dg);
}
private function itemEditBeginEvent(event:DataGridEvent):void{
trace("Item pronto para ser Editado");
}
}
}
Veja o Resultado no .swf

Quando clicamos em um dos itens, a célula correspondente do DataGrid abre espaço para edição atribuindo à essa edição uma personalização graças às configurações feitas com a classe TextFormat. Além disso o evento ITEM_EDIT_BEGINNING é acionado mostrando uma mensagem no painel output.
*OBS.: Você poder ter observado que existiam os eventos ITEM_EDIT_BEGIN e ITEM_EDIT_BEGINNING. Não há diferenças relevantes sobre os dois eventos. Nesta aplicação você poderia ter usado um ou outro sem problemas com o resultado.
fl.controls.dataGridClasses.HeaderRenderer
Basicamente a classe HeaderRenderer provê mecanismos de eventos e propriedades relacionadas aos cabeçalhos das colunas em um DataGrid.
Vejamos um exemplo prático.
*OBS.: Não se esqueça de salvar o arquivo como HeaderRendererExample.as no mesmo diretório da aplicação .fla.
package{
import flash.display.Sprite;
import fl.controls.DataGrid;
import fl.controls.dataGridClasses.DataGridColumn;
import fl.controls.dataGridClasses.HeaderRenderer;
import fl.events.DataGridEvent;
import fl.data.DataProvider;
public class HeaderRendererExample extends Sprite{
private var dg:DataGrid = new DataGrid();
private var dgc:DataGridColumn;
private var dp:DataProvider = new DataProvider();
public function HeaderRendererExample():void{
var cont:uint;
for(cont=0; cont<=30;cont++)
{
dp.addItem({Coluna1:"Meu Item - C1",
Coluna2:"Meu Item - C2",
Coluna3:"Meu Item - C3"});
}
with(dg)
{
addEventListener(DataGridEvent.HEADER_RELEASE, headerReleaseEvent);
setSize(300,300);
editable = false;
columns = [new DataGridColumn("Coluna1"), new DataGridColumn("Coluna2"), new DataGridColumn("Coluna3")];
dataProvider = dp;
sortableColumns = true;
}
addChild(dg);
}
private function headerReleaseEvent(event:DataGridEvent):void{
var hr:HeaderRenderer = event.itemRenderer as HeaderRenderer;
trace(dg.columns[hr.column].headerText + " - este é o resultado final");
}
}
}
O resultado final no .swf é o seguinte.

Ao clicarmos no cabeçalho de uma das colunas e nos trás a mensagem correspondente.
Bem, neste tutorial vimos que o DataGrid tem muito a nos oferecer no desenvolvimento de aplicações complexas com o Flash. Conhecemos de “cabo a rabo” o pacote fl.controls.dataGridClasses e aplicamos suas funcionalidades em nossas aplicações de exemplo. Agora é com vc!
Pratiquem sempre e até o nosso próximo tutorial, se Deus quiser!
- SQL Server Integration Service - OverviewActionScript
- Melhorias e inovações - Novidades do Visual Studio 2011ActionScript
- Actionscript AS3 + AMFPHPActionScript
- Video-player em AS3 no Flash - Parte 1ActionScript
- Upload de arquivos em Flash (parte 2)ActionScript








