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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | public static function prepareGridColumnSort(grid:DataGrid, dataProvider:ICollectionView):ICollectionView { if (dataProvider) { var sort:Sort = dataProvider.sort; var field:SortField; if (sort == null) { sort = new Sort(); var sf:Array = new Array(); for each (var column:DataGridColumn in grid.columns) { field = new SortField(column.dataField); field.descending = column.sortDescending; field.caseInsensitive = true; field.numeric = true; sf.push(field); } sort.fields = sf; dataProvider.sort = sort; } else { for each (field in sort.fields) { field.caseInsensitive = true; field.numeric = true; } } } return dataProvider; } |
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:
1 2 3 4 5 6 7 | <mx:datagrid id="rpGrid" dataprovider="{Util.prepareGridColumnSort(rpGrid, listaTipoProjeto)}"> <mx:columns> <mx:datagridcolumn datafield="nome" headertext="Nome" width="150"> <mx:datagridcolumn datafield="status" headertext="Status" width="50"> </mx:datagridcolumn> </mx:datagridcolumn> </mx:columns></mx:datagrid> |

Um comentário
Trackbacks
Deixe Seu Comentário