Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex DataGrid列名似乎没有绑定_Apache Flex_Data Binding_Datagrid - Fatal编程技术网

Apache flex 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

有点像个灵活的新手,所以请容忍我。我有一个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实例上调用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();
    }
    ...