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:
-
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:
-
<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 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
[...] 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 [...]

