ItemRenderer для TreeColumn в AdvancedDataGrid во Flex - PullRequest
4 голосов
/ 14 апреля 2010

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

<mx:AdvancedDataGridRendererProvider column="{titleCol}" depth="1"
        renderer="com.something.titleColumnRenderer"/>

titleColumnRenderer:

<mx:VBox width="100%" xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Label id="titleLabel" textAlign="center" text="sometext" width="100"/></mx:VBox>

1 Ответ

10 голосов
/ 15 апреля 2010

Вот что я сделал для этого:

  1. Создайте класс, расширяющий AdvancedDataGridGroupItemRenderer
  2. В новом классе переопределите updateDisplayList и сделайте то, что вам нужно сделать
  3. Назначьте новый класс свойству groupItemRenderer в AdvancedDataGrid

Вот как может выглядеть ваш новый класс

public class CustomGroupRenderer extends AdvancedDataGridGroupItemRenderer
{
    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
    {
        super.updateDisplayList(unscaledWidth, unscaledHeight);

        var listData:AdvancedDataGridListData = listData as AdvancedDataGridListData;
        var advancedDataGrid:AdvancedDataGridDataGrid = listData.owner as AdvancedDataGrid;

        var cellBackgroundColor:uint = 0xFF0000;

        var g:Graphics = graphics;
        g.clear();

        if (!advancedDataGrid.isItemSelected(data) && !advancedDataGrid.isItemHighlighted(data))
        {
            g.beginFill(cellBackgroundColor);
            g.drawRect(0, 0, unscaledWidth, unscaledHeight);
            g.endFill();
        }
    }
}

А затем назначьте этот класс свойству groupItemRenderer в AdvancedDataGrid:

<mx:AdvancedDataGrid groupItemRenderer="com.whereever.CustomGroupRenderer"/>

Или в ActionScript:

myAdvancedDataGrid.groupItemRenderer = new ClassFactory(com.whereever.CustomGroupRenderer);
...