DataGrid列名似乎没有绑定

时间:2010-03-23 21:45:39

标签: flex data-binding datagrid

这里有一个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中的更改?

2 个答案:

答案 0 :(得分:0)

您的数据已正确绑定,因为您直接将变量称为dataProvider。 对于列,您可以参考函数调用。

您可以将_dataSetLoader.columnNames的值分配给可绑定的ArrayCollection吗? 然后使用该ArrayCollection作为列。

答案 1 :(得分:0)

有各种替代方案或解决方法。这取决于您的要求究竟是什么。

您可以使用Datagrid组件执行以下操作

  1. 如果您已经知道列名称,即在UI界面中列名称不会更改。您可能想要硬编码而不是动态提供。

  2. 如果列名更改了数组集合或数据提供者,我建议您删除数据网格的列属性,并显示默认列名称。

  3. 您还可以在运行时添加列,具体取决于下拉菜单或复选框或其他条件提供的输入。

  4. 查看Flex Documentation了解详情。