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

  1. DClick Blog

Deixe Seu Comentário