Средство визуализации заголовка CheckBox с HierarchicalCollectionView - PullRequest
1 голос
/ 07 января 2011

Я получил средство визуализации заголовка флажка, чтобы хорошо работать с плоскими DP, но иерархическое представление коллекции - другая история.При нажатии я хочу, чтобы он установил все флажки в данном столбце.Вот мой код:

var dp: HierarchicalCollectionView = _dataGrid.dataProvider as HierarchicalCollectionView;var testDp: GroupingCollection = dp.source as GroupingCollection;var rawDp: ArrayCollection = testDp.source as ArrayCollection;

для (var i: int = 0; i

Он устанавливает все флажки на втором уровне данных, но не выбирает верхний уровень данных.Что мне здесь не хватает?Я не могу найти его.

Любые советы очень ценятся.Спасибо.

1 Ответ

1 голос
/ 07 января 2011

Для иерархических данных вы должны использовать курсор, который перебирает все уровни иерархических данных.

var dp:IHierarchicalCollectionView = _dataGrid.hierarchicalCollectionView;
var cursor:IViewCursor= dp.createCursor();

while (!cursor.afterLast)
{
    cursor.current[_dataField] = cb.selected;
    cursor.moveNext();
}

Однако, это работает только с ранее открытыми узлами.Так что либо разверните все узлы с помощью _dataGrid.expandAll() (вы можете свернуть их впоследствии, поскольку узлы нужно открывать только один раз), либо выполните итерацию ваших иерархических данных вручную:

function setCheckBoxValue(children:ArrayCollection, value:Boolean):void
{
    for each (var child:Object in children)
    {
        if (child.hasOwnProperty("children") && child["children"])
            setCheckBoxValue(child["children"], value);

        child[_dataField] = value;
    }
}

var myDataProvider:HierarchicalData = /* your data provider */;

// Call it like this...
setCheckBoxValue(myDataProvider.source, cb.selected);

Обновление: чтобы ответить на ваш второй вопрос.

  1. Создайте новый CheckBoxColumn, который расширяет AdvancedDataGridColumn.Вы можете использовать его для предварительной настройки ваших headerRenderer и itemRenderer.
  2. . В вашем средстве визуализации пользовательских элементов вы получите свой столбец следующим образом:
    grid = AdvancedDataGrid(listData.owner);
    column = grid.columns[listData.columnIndex] as CheckBoxColumn;
  3. Сделайте то же самое в своем заголовкеrenderer.
  4. Всякий раз, когда изменяется значение CheckBox в одном из ваших средств визуализации, отправляйте событие через ваш столбец.Что-то вроде: column.dispatchEvent(new Event("checkBoxValueChanged"));
  5. Ваш рендер заголовка должен добавить прослушиватель событий в столбец для события "checkBoxValueChanged" (или как вы его называете).Всякий раз, когда происходит это событие, переберите вашего провайдера данных и обновите заголовки CheckBox соответственно.

Теоретически это должно работать.НТН

...