Flex DataGrid larghezza colonna
-
18-09-2019 - |
Domanda
Nel mio flex app che memorizzare le larghezze e visiblility di colonne in un file XML. Quando i carichi app che legge dal file XML e imposta valori che colonne a seconda del caso:
for(i = 0; i < columnsOrder.length; i++){
newOrder[i] = myDG.columns[Number(columnsOrder[i]) - 1];
newOrder[i].visible = (Number(columnsVisiblity[i]) == 1);
newOrder[i].width = Number(columnsWidth[i]);
}
myDG.columns = newOrder;
myDG.invalidateList();
Il problema sembra essere l'impostazione della visibilità (imposta il campo visibile correttamente, ma scombina la larghezza) ... Ho provato a installare dopo l'impostazione della larghezza (al di fuori del ciclo) e prima del ciclo pure. Si ridimensiona le colonne correttamente se non faccio niente con la visibilità.
Tutte le idee?
Soluzione
Aggiungi un'istruzione import nella parte superiore del file di classe:
import mx.core.mx_internal;
Quindi rimuovere utilizzando lo spazio mx_internal, rimuovere il proprietario della colonna, modificare la larghezza e poi reasign il genitore:
public static function resizeColumn(col:DataGridColumn, size:int):void
{
var owner:* = col.mx_internal::owner
col.mx_internal::owner = null;
col.width = size;
col.mx_internal::owner = owner;
}
Questo dovrebbe fare il trucco (o meglio, lo ha fatto per noi dopo un paio di giorni di giuramento)
Altri suggerimenti
è che si horizontalScrollPolicy impostato su false sul datagrid?
"Se la proprietà horizontalScrollPolicy del DataGrid è falso, tutte le colonne visibili deve inserirsi nella zona visualizzabile, e il DataGrid non sempre onorare la larghezza delle colonne, se la larghezza totale delle colonne è troppo piccolo o troppo grande per il visualizzabile la zona."
Sono riuscito a farlo funzionare chiamando il ciclo precedente in una funzione due volte ... la prima volta che aggiungere le colonne visibili, la seconda volta è imposta la larghezza corretta. Non è la soluzione migliore, ma non posso spendere più tempo su di esso.