【问题标题】:DataGrid Column names don't seem to be bindingDataGrid 列名似乎没有绑定
【发布时间】:2010-03-23 21:45:38
【问题描述】:

这里有点像 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 中的更改吗?

【问题讨论】:

    标签: apache-flex data-binding datagrid


    【解决方案1】:

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

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

    【讨论】:

    • 嗯,columns 是一个 Array 而不是 ArrayCollection。但无论如何,我也尝试在 DataSetLoader 类中添加一个名为 _columnNamesAsArray 的数组,在 column= 子句中引用它,然后在 reset() 中将其清空,但得到了相同的结果。另外,我的理解是,只要绑定了函数的参数,数据绑定也可以跨函数调用工作?也就是说,_columnNames 的变化应该触发对 getColumns() 的调用。我错了吗?
    【解决方案2】:

    嗯,有各种替代方案或解决方法。这取决于您的要求到底是什么。

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

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

    2. 如果列名随着数组集合或者dataprovider的变化而变化,建议你去掉datagrid的column属性,让默认的列名显示出来。

    3. 您还可以在运行时根据下拉菜单或复选框或其他条件提供的输入添加列。

    查看Flex Documentation 了解更多信息。

    【讨论】:

    • 是的,这些选项都不适合我。 DataGrid 基本上是在实现一个 CSV 阅读器。 CSV 的第一行是列名,第二行是字段类型,其余行是数据。因此,列名一直在变化,具体取决于正在读取的文件。这就是为什么我想将它们存储在 ArrayCollection 中并使用数据绑定来管理对视图的更新。
    • 如果您没有过滤掉任何列,那么选项 2 应该可以工作。
    猜你喜欢
    • 2015-08-26
    • 1970-01-01
    • 2010-10-29
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 2011-10-01
    相关资源
    最近更新 更多