Domanda

Sto creando una tabella che visualizza le informazioni da un database MySQL, sto usando ForeignKeys tutto il luogo per dati di riferimenti incrociati.

In pratica ho un datagrid con una colonna denominata 'del sistema.' Il sistema è un int che rappresenta il id di un oggetto in un'altra tabella. Ho usato lableFunction per riferimento incrociato i due e rinominare la colonna. Ma ora l'ordinamento non funziona, ho capito che si deve creare una funzione di ordinamento personalizzato. Ho provato incrociando nuovamente le due tabelle, ma che richiede ~ 30sec per ordinare 1200 righe. Ora io sono solo all'oscuro di ciò che dovrei provare successiva.

C'è un modo per accedere all'etichetta colonne campo all'interno della funzione di ordinamento?

public function order(a:Object,b:Object):int
{
    var v1:String = a.sys;
    var v2:String = b.sys;
    if ( v1 < v2 ){
        trace(-1);
        return -1;
    }else if ( v1 > v2 ){
        trace(1);
        return 1;
    }else {
        trace(0);
        return 0;
    }
}

È stato utile?

Soluzione

Un modo per gestire questa situazione è quello di passare attraverso gli oggetti che hai ricevuto e aggiungere l'etichetta come una proprietà su ciascuno di loro in base all'ID con riferimenti incrociati. Poi è possibile specificare la vostra proprietà Label per visualizzare nella colonna griglia di dati invece di utilizzare una funzione di etichetta. In questo modo si otterrebbe l'ordinamento come ci si aspetterebbe, piuttosto che dover creare la propria funzione di ordinamento.

Altri suggerimenti

Il modo in cui DataGrid, e altro elenco basato lavoro classi è quello di utilizzare itemRenderers. Renderers vengono creati solo per i dati che vengono visualizzati sullo schermo. Nella maggior parte dei casi v'è molto di più dati nel dataProvider di ciò che si vede sullo schermo.

Il tentativo di ordinare i dati in base a qualcosa visualizzato dal DataGrid non è più probabile dare i risultati desiderati.

Ma, non v'è alcuna ragione per cui non si può chiamare la stessa funzione dell'etichetta sui dati oggetti nel sortFunction.

Un modo è quello di utilizzare la funzione itemToLabel del DataGrid:

var v1:String = dataGrid.itemToLabel(a);
var v2:String = dataGrid.itemToLabel(b);

Un secondo modo è quello di chiamare solo il labelFunction esplicitamente:

var v1:String = labelFunction(a);
var v2:String = = labelFunction(b);

Nella mia esperienza ho trovato l'ordinamento di essere estremamente veloce, ma voi sono recordset è leggermente più grande di quello che di solito si carica in memoria in una sola volta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top