这里有一个Flex新手,所以请耐心等待。我有一个DataGrid定义如下:
<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}"
/>
...其中_dataSetLoader是一个对象的实例,如下所示:
[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();
}
...
当在dataSetLoader实例上调用reset()时,DataGrid会按预期清空单元格中的数据,但保留列名称,即使reset()调用_columnNames.removeAll()也是如此。集合中的更改是否应该触发DataGrid中的更改?
答案 0 :(得分:0)
您的数据已正确绑定,因为您直接将变量称为dataProvider。 对于列,您可以参考函数调用。
您可以将_dataSetLoader.columnNames的值分配给可绑定的ArrayCollection吗? 然后使用该ArrayCollection作为列。
答案 1 :(得分:0)
有各种替代方案或解决方法。这取决于您的要求究竟是什么。
您可以使用Datagrid组件执行以下操作
如果您已经知道列名称,即在UI界面中列名称不会更改。您可能想要硬编码而不是动态提供。
如果列名更改了数组集合或数据提供者,我建议您删除数据网格的列属性,并显示默认列名称。
您还可以在运行时添加列,具体取决于下拉菜单或复选框或其他条件提供的输入。
查看Flex Documentation了解详情。