DClick

Alterando o Sort Default do Datagrid de Case-Sensitive para Case-Insensitive


Como todos sabem, o DataGrid possui a possibilidade de efetuar Sort em cada uma de suas colunas, bastanto somente o click no botão header correspondente.

Mas o que percebí­amos até então, era que dados comparados em uma coluna pelo Sort da Collection associada ao DataGrid, somente funcionava quando o Case (lower ou upper) era o mesmo, falhando quando haviam dados com Cases diferentes.

Ou seja, o valor da propriedade "caseInsensitive" do SortField associado à coluna era por default "false". Como não há hoje, nenhuma propriedade no DataGrid ou em cada DataGridColumn que possibilite alterar o valor dessa propriedade para "true", ou até mesmo sobrescrever o método que executa o Sort, por este ser privado, somente conseguí­amos utilizando a propriedade "compareFunction", o que não era muito conveniente, visto que terí­amos que implementá-la para cada coluna do DataGrid.

Para evitar esta última solução, conseguimos através de um método utilitário, acessar a Sort da Collection "bindada" ao DataProvider do DataGrid, e alterar a propriedade CaseInsensitive para "true" de cada SortField da seguinte maneira:

Actionscript:
  1. public static function prepareGridColumnSort(grid:DataGrid, dataProvider:ICollectionView):ICollectionView
  2. {
  3. if (dataProvider)
  4. {
  5. var sort:Sort = dataProvider.sort;
  6. var field:SortField;
  7.  
  8. if (sort == null)
  9. {
  10. sort = new Sort();
  11. var sf:Array = new Array();
  12. for each (var column:DataGridColumn in grid.columns)
  13. {
  14. field = new SortField(column.dataField);
  15. field.descending = column.sortDescending;
  16. field.caseInsensitive = true;
  17. field.numeric = true;
  18. sf.push(field);
  19. }
  20. sort.fields = sf;
  21. dataProvider.sort = sort;
  22. }
  23. else
  24. {
  25. for each (field in sort.fields)
  26. {
  27. field.caseInsensitive = true;
  28. field.numeric = true;
  29. }
  30. }
  31. }
  32.  
  33. return dataProvider;
  34. }

Percebam que alterei a propriedade "numeric" para true, afim de resolver também a comparação entre valores numéricos.

Uma maneira de utilizar este método é exemplificada abaixo:

XML:
  1. <mx:datagrid id="rpGrid" dataprovider="{Util.prepareGridColumnSort(rpGrid, listaTipoProjeto)}">
  2. <mx:columns>
  3. <mx:datagridcolumn datafield="nome" headertext="Nome" width="150">
  4. <mx:datagridcolumn datafield="status" headertext="Status" width="50">
  5. </mx:datagridcolumn>
  6. </mx:datagridcolumn>
  7. </mx:columns></mx:datagrid>

Por Marcello Rego em 2/June/2007 | Comentar | Trackback


No Translations

Um comentário para “Alterando o Sort Default do Datagrid de Case-Sensitive para Case-Insensitive”


[...] o caso do Sort no DataGrid, que no post anterior em http://blog.dclick.com.br/2007/06/02/alterando-o-sort-default-do-datagrid-de-case-sensitive-para-cas... onde foi relatado como se utilizar a propriedade caseInsensitive, chegamos agora no problema de [...]

Adicionar comentário

(requerido)
(requerido, não será publicado)