sortCompareFunction non viene chiamato quando si usa HierarchicalData in un AdvancedDataGrid
Flex | Soft! | Commenta l'articolo |
Come da titolo, la chiamata a sortCompareFunction quando come dataprovider viene usato un HierarchicalData non parte.
Il codice seguente mostra come un datagrid riordini la colonna secondo una funzione specifica:
<mx:AdvancedDataGrid dataProvider={list} > <mx:AdvancedDataGridColumn headerText="Prodotto" labelFunction="getDescrizione" sortCompareFunction="sortProdottoDescrizione" sortable="true" />
Se però utilizziamo un oggetto gerarchico, esce fuori un bug, per cui sortCompareFunction non viene chiamata.
Sono riuscito a correggere questo bug aggirando il problema.
<mx:AdvancedDataGrid > <mx:dataProvider> <mx:HierarchicalData source="{_list}"/> </mx:dataProvider> <mx:AdvancedDataGridColumn headerText="Prodotto" labelFunction="getDescrizione" sortCompareFunction="sortProdottoDescrizione" sortable="true" />
Aggiungiamo al datagrid l’evento headerRelease:
<mx:AdvancedDataGrid headerRelease="clickHeaderDataGrid(event)"> <mx:dataProvider> <mx:HierarchicalData source="{_list}"/> </mx:dataProvider> <mx:AdvancedDataGridColumn headerText="Prodotto" labelFunction="getDescrizione" sortCompareFunction="sortProdottoDescrizione" sortable="true" />
Dopodichè procediamo a riconoscere quale colonna è stata “cliccata”:
private function clickHeaderDataGrid(event:AdvancedDataGridEvent): void { var s: String = ((event.itemRenderer as AdvancedDataGridHeaderRenderer ).data as AdvancedDataGridColumn).headerText; if (s == 'Prodotto') headerSortProdottoDescrizione(); }
La funzione headerSortProdottoDescrizione crea l’ordinamento che si era perso con la chiamata a sortCompareFuction:
static private var descendingProdottoDescrizione: Boolean = false; private function headerSortProdottoDescrizione(): void { dgProdottiConf.validateNow(); var sort:Sort = new Sort(); var sortField:SortField = new SortField(); sortField.descending = descendingProdottoDescrizione; descendingProdottoDescrizione = !descendingProdottoDescrizione; sortField.compareFunction = sortProdottoDescrizione; sort.fields = [sortField]; _listProdottoConf.sort = sort; _listProdottoConf.refresh(); }
Vediamolo in dettaglio. La variabile descendingProdottoDescrizione serve per mantenere ordine crescente e decrescente ad ogni click, altrimenti rimane sempre decrescente (anche questo è un bug). Assegna a compareFunction la funzione per l’ordinamento e applica l’ordinamento con .refresh().
Il risultato è quello di avere l’ordinamento che avevamo prima per un semplice datagrid, ma questa volta con l’oggetto gerarchico per rappresentare i dati.
Buon lavoro.
Ultimi Commenti