Apache flex DataGrid列名似乎没有绑定
有点像个灵活的新手,所以请容忍我。我有一个DataGrid定义如下:Apache flex DataGrid列名似乎没有绑定,apache-flex,data-binding,datagrid,Apache Flex,Data Binding,Datagrid,有点像个灵活的新手,所以请容忍我。我有一个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
<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实例上调用reset时,DataGrid会按预期清空单元格中的数据,但保留列名,即使reset调用了_columnNames.removeAll。集合中的更改不应该触发DataGrid中的更改吗?您的数据已正确绑定,因为您直接将变量引用为dataProvider。 对于这些列,您将引用函数调用 能否将_dataSetLoader.columnNames的值指定给可绑定的ArrayCollection?
然后将该ArrayCollection用作列。嗯,有各种替代方案或解决方法。这取决于你的具体要求 下面是您可以对Datagrid组件执行的操作 如果您已经知道列名,即在UI界面中,列名不会更改。您可能希望对它们进行硬编码,而不是动态提供 如果列名随数组集合或dataprovider而更改,我建议您删除datagrid的column属性,并显示默认列名 您还可以在运行时添加列,具体取决于下拉框、复选框或其他一些条件提供的输入
查看更多信息。嗯,列是一个数组而不是一个ArrayCollection。但无论如何,我也尝试向DataSetLoader类添加一个名为_ColumnNamesArray的数组,在column=子句中引用它,并在reset中清空它,但得到了相同的结果。另外,我的理解是,只要函数的参数被绑定,数据绑定也可以跨函数调用工作?也就是说,_columnNames中的更改应该触发对getColumns的调用。我错了吗?是的,这些选择都不适合我。DataGrid基本上实现了一个CSV阅读器。CSV的第一行是列名,第二行是字段类型,其余的行是数据。因此,根据正在读取的文件,列名一直在更改。这就是为什么我希望将它们存储在ArrayCollection中,并使用数据绑定来管理对视图的更新。如果您没有筛选出任何列,则选项2应该可以工作。
[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();
}
...