Definindo a ordem inicial de um DataGrid no Flex 3
Às vezes precisamos, no Flex, fazer com que um DataGrid mostre os dados ordenados por uma determinada coluna. O problema é que esses dados não vêm ordenados do backend (pois não faz nenhum sentido ordená-los lá, isso é tarefa para o frontend). Isso é possível quando o usuário clica no cabeçalho da coluna (desde que a ordenação não tenha sido desabilitada), mas … você acredita que ele vai clicar? ![]()
Temos duas formas de ordenar os dados a serem mostrados: ordenando o dataProvider do DataGrid ou simulando o clique no cabeçalho da coluna. Cada um deles tem suas vantagens e desvantagens. Vamos ver:
Ordenando o dataProvider
De acordo a documentação, a melhor forma de ordenar os dados do dataGrid é ordenar seu dataProvider. Para isso, ele tem que implementar a interface ICollectionView (um ArrayCollection, por exemplo), e você pode usar o objeto Sort, assim:
[as]
arrColl.sort = new Sort();
arrColl.sort.fields = [new SortField("nome", false, true)];
arrColl.refresh();
[/as]
Dessa forma, você está ordenando o seu dataProvider de acordo os campos (SortField) especificados. Nesse caso, o ArrayCollection arrColl será ordenado pelo campo “nome”, ignorando a diferença entre maiúsculas/minúsculas (segundo parâmetro – caseInsensitive) e em ordem ascendente (terceiro parâmetro – descending). Ainda existe um quarto parâmetro (numeric), um valor booleano que indica se os valores daquela coluna são numéricos ou textuais, o que resolve o problema da ordenação em colunas que possuem valores numéricos, mas que o FlashPlayer interpreta como texto.
Essa forma de ordenação não funciona caso o seu dataProvider seja um XML. Veja um exemplo no site BealeARTS.
Simulando o clique no cabeçalho da coluna
Essa é a solução mais óbvia: se o usuário precisaria clicar no cabeçalho da coluna que queremos ordenar toda vez que o dataProvider fosse carregado e não queremos confiar que ele fará isso (e já sabemos que ele não fará), podemos fazer isso pra ele!
Imagine: quando o usuário clica no cabeçalho da coluna, o que acontece? Ele dispara um evento, não é? Então taí a solução: disparar esse evento quando o dataProvider for atualizado. Aqui está um exemplo de como disparar esse evento:
[as]
dispatchEvent ( new DataGridEvent(DataGridEvent.HEADER_RELEASE, false, true, 0, null, 0, null, null, 0));
[/as]
Vamos explicar melhor as coisas. Os parâmetros passados para o DataGridEvent são: o tipo do evento (type), se ele vai ou não “flutuar” entre os componentes superiores a ele na hierarquia (bubble), se o evento pode ou não ser interrompido enquanto flutua (cancellable), o índice da coluna a ser ordenada contada a partir do zero (columnIndex), o campo dataField da coluna (dataField), o número da linha onde está o item a ser ordenado contado a partir de zero (rowIndex), a razão do evento no caso de um evento do tipo itemEditEnd (reason) e o ItemRenderer do cabeçalho que foi clicado (itemRenderer).
A desvantagem dessa forma de ordenação é que ela é menos flexível. você só consegue ordenar uma coluna por vez, e não tem como especificar que a ordenação deve ignorar ou não a diferença entre os caracteres maiúsculos e minúsculos. Além disso, dependendo de onde você aplicar essa “técnica”, podemos até considerar isso uma “gambiarra”, algo que devemos evitar sempre. Veja um exemplo no site Flexamples.
Boa sorte!
Poderia avaliar este artigo, por favor? |
Posts relacionados
-
Tatiane
-
Tatiane
-
Aaa
