Desenvolvimento - ActionScript
Trabalhando com a classe DataGrid – Pacote fl.controls
Neste artigo conheceremos as classes do pacote fl.controls.dataGridClasses no Flash CS3 construindo pequenas aplicações que visam mostrar os recursos oferecidos por essas classes junto ao componente DataGrid.
por Jhonatan Rosa JacintoNo 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!
- Actionscript AS3 + AMFPHPActionScript
- Video-player em AS3 no Flash - Parte 1ActionScript
- Upload de arquivos em Flash (parte 2)ActionScript
- Upload de arquivos em Flash usando a Class FileReference e integração com PHP e MySQLActionScript
- ActionScript: Conhecendo a class MovieClipLoaderActionScript