[RESOLVIDO] Ordenar valores inteiros no DataGrid

2 respostas
EugenioMonteiro

Tenho um DataGrid preenchido por valores provenientes de uma consulta em PHP. Quando o usuário clica na cabeçalho da tabela, a tabela é ordenada pelo valor da coluna selecionada (evento headerRelease), porém esta ordem considera os valores como String e não como inteiros. Considerando números como Strings a ordem fica incorreta pois, por exemplo, (20,23,34,100) devem ficar nessa ordem, mas se forem ordenados como String ficam assim: 100,20,23,34.
Consegui resolver este problema para o caso das datas, fazendo o seguinte:

No evento headerRelease eu usei preventDefault e stopPropagation para evitar a ordenação padrão e criei um novo campo de ordenação pela data em formato UNIX_TIMESTAMP, ou seja, na minha consulta eu tenho um campo data formatado como String para ser exibido e outro como TimeStamp para ser objeto de ordenação.

O problema é que eu segui este método para resolver o problema dos inteiros, mas não funcionou.

Eu fui claro? Alguém pode me ajudar a ordenar valores inteiros corretamente?

2 Respostas

andre.gil

Bom dia Eugenio,

Tanto para o caso da data quanto para o caso dos numeros, acredito que você possa resolver de outra maneira. Fazer isso com o preventDefault e stopPropagation, não acredito ser a melhor maneira. Existe uma propriedade do DataGridColumn chamada sortCompareFunction, no qual você pode criar uma function para cuidar do “sort” daquela coluna. Para usar, coloque na sua coluna assim:

<mx:DataGridColumn dataField="myColumn" sortCompareFunction="numberSortFunction" />

E crie uma function assim:

private function numberSortFunction(obj1:Object, obj2:Object):int
{
	var n1: Number =  Number(obj1["myColumn"]) ;
	var n2: Number =  Number(obj2["myColumn"]) ;
	
	if( n1 < n2 )
	{
		return -1;
	}
	else if( n1 > n2 )
	{
		return 1;
	}
				
	return 0;
}

Saiba mais sobre o sortCompareFunction aqui:
http://livedocs.adobe.com/flex/3/langref/mx/controls/dataGridClasses/DataGridColumn.html#sortCompareFunction

E um exemplo de sort com data aqui:
http://blog.flexexamples.com/2007/08/12/sorting-date-columns-in-a-datagrid/

[]s

EugenioMonteiro

Muito obrigado. Muito melhor que a minha gambiarra.

Criado 9 de novembro de 2009
Ultima resposta 9 de nov. de 2009
Respostas 2
Participantes 2