Sorte d'un débutant Flex ici donc supportez-moi. J'ai un DataGrid défini comme suit:Les noms des colonnes DataGrid ne semblent pas être liés
<mx:Script>
...
private function getColumns(names:ArrayCollection):Array {
var ret:Array = new Array();
for each (var name:String in names) {
var column:DataGridColumn = new DataGridColumn(name);
ret.push(column);
}
return ret;
}
</mx:Script>
<mx:DataGrid id="grid" width="100%" height="100%" paddingTop="0"
columns="{getColumns(_dataSetLoader.columnNames)}"
horizontalScrollPolicy="auto" labelFunction="labelFunction"
dataProvider="{_dataSetLoader.data}"
/>
... où _dataSetLoader est une instance d'un objet qui ressemble à:
[Bindable]
public class DataSetLoader extends EventDispatcher {
...
private var _data:ArrayCollection = new ArrayCollection();
private var _columnNames:ArrayCollection = new ArrayCollection();
...
public function reset():void {
_status = NOTLOADED;
_data.removeAll();
_columnNames.removeAll();
}
...
Lorsque la réinitialisation() est appelée sur l'instance dataSetLoader, Le DataGrid vide les données dans les cellules, comme prévu, mais laisse les noms de colonnes, même si reset() appelle _columnNames.removeAll(). La modification de la collection ne devrait-elle pas provoquer une modification du DataGrid?
Eh bien, les colonnes sont un tableau plutôt qu'une collection Array. Mais en tout cas, j'ai aussi essayé d'ajouter un tableau appelé _columnNamesAsArray à la classe DataSetLoader, en le référençant dans la clause column = et en le vidant dans reset(), mais en obtenant le même résultat. Aussi, ma compréhension est que la liaison de données fonctionne également à travers les appels de fonction, aussi longtemps que l'argument de la fonction est lié? Autrement dit, la modification de _columnNames devrait déclencher un appel à getColumns(). Est-ce que je me trompe? – Jason