Имена столбцов DataGrid не являются обязательными - PullRequest
0 голосов
/ 24 марта 2010

Вроде новичок 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();
    }
    ...

Когда метод reset () вызывается для экземпляра dataSetLoader, DataGrid очищает данные в ячейках, как и ожидалось, но оставляет имена столбцов, хотя reset () вызывает _columnNames.removeAll (). Разве изменения в коллекции не должны вызывать изменения в DataGrid?

Ответы [ 2 ]

0 голосов
/ 24 марта 2010

Ну, есть различные альтернативы или обходные пути. Это зависит от того, что именно ваше требование.

Ниже описано, что вы можете сделать с вашим компонентом Datagrid

  1. Если вы уже знаете имена столбцов, т.е. в вашем пользовательском интерфейсе имена столбцов не меняются. Вы могли бы хотеть жестко закодировать их вместо того, чтобы поставлять динамически.

  2. Если имя столбца изменяется вместе с коллекцией массивов или поставщиком данных, я предлагаю вам удалить свойство столбца вашей таблицы данных и разрешить отображение имен столбцов по умолчанию.

  3. Вы также можете добавлять столбцы во время выполнения в зависимости от входных данных, предоставляемых раскрывающимися или флажками, или некоторых других условий.

Проверьте Документация Flex для получения дополнительной информации.

0 голосов
/ 24 марта 2010

Ваши данные правильно связаны, потому что вы напрямую ссылаетесь на переменную как dataProvider. Для столбцов вы обратитесь к вызову функции.

Можно ли вместо этого присвоить значения _dataSetLoader.columnNames привязываемой коллекции ArrayCollection? Затем используйте эту коллекцию ArrayCollection в качестве столбцов.

...