Puoi restituire una stringa da un summaryObjectFunction
-
09-06-2019 - |
Domanda
In un Flex AdvancedDatGrid
, stiamo facendo molti raggruppamenti.La maggior parte delle colonne sono le stesse per i genitori e per i figli, quindi vorrei mostrare il primo valore del gruppo come riepilogo anziché MAX, MIN o AVG
Questo codice funziona su valori numerici ma non testuali (senza la riga commentata ottieni NaN):
private function firstValue(itr:IViewCursor,field:String, str:String=null):Object
{
//if(isNaN(itr.current[field])) return 0 //Theory: Only works on Numeric Values?
return itr.current[field]
}
L'XML:
(mx:GroupingField name="Offer")
(mx:summaries)
(mx:SummaryRow summaryPlacement="group")
(mx:fields)
(mx:SummaryField dataField="OfferDescription" label="OfferDescription" summaryFunction="firstValue"/)
(mx:SummaryField dataField="OfferID" label="OfferID" summaryFunction="firstValue"/)
(/mx:fields)
(/mx:SummaryRow)
(/mx:summaries)
(/mx:GroupingField)
OfferID
funziona correttamente, OfferDescription
e non farlo.
Soluzione
Sembra che la funzione summaryFunction debba restituire un numero.Secondo il Rilevatore di bug di Adobe, si tratta di un bug nella documentazione:
Commento di Sameer Bhatt:
Nella documentazione si dice che - le funzioni di riepilogo incorporate per Sum, Min, Max, AVG e contano tutti restituiscono un numero contenente i dati di riepilogo.
Quindi le persone possono farsi un'idea, ma sono d'accordo con te sul fatto che dovremmo menzionare chiaramente che il tipo di ritorno dovrebbe essere un numero.
L'abbiamo mantenuto come oggetto in modo che in futuro sia facile aggiungervi più cose.
Altri suggerimenti
Se è necessario ottenere una stringa da mostrare, utilizzare la funzione label su advancedDataGridColumn.Ciò renderà la riga di riepilogo.
(mx:AdvancedDataGridColumn headerText="Commento" larghezza="140" dataField="commento" labelFunction="formatColumn" /)
private function getNestedItem(item:Object):Object {
try {
if (item.undefined[0]) {
item = getNestedItem(item.undefined[0]);
}
} catch (e:Error) {
// leave item alone
}
return item;
}
private function formatColumn(item:Object, column:AdvancedDataGridColumn):String {
var output:String;
// If this is a summary row
if (item.GroupLabel) {
item = getNestedItem(item);
}
switch (column.dataField) {
case 'comment':
return item.comment;
}
}