2010-04-14 3 views
4

Возможно ли использовать средство рендеринга для treecolumn в advanceddatagrid и сохранить иерархическую функциональность? Если я использую поставщика визуализации, я теряю стрелку для раскрывающегося списка дерева. Я хочу сохранить функциональность дерева и изменить отображение столбца (а не только папка изображения)ItemRenderer для TreeColumn в AdvancedDataGrid в Flex

<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> 

ответ

10

Вот что я сделал для достижения этой цели:

  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); 
+0

Это близко к тому, что мне нужно, но я не просто пытаюсь изменить цвет. Я хотел бы добавить к нему VBox и поместить некоторые элементы в VBox. Я попробовал это и super.addChild, но сделал приложение заморозить. есть идеи? – Barrest

+0

Думаю, вам придется использовать комбинацию методов жизненного цикла createChildren (для создания vbox и vbox-детей), измерить (чтобы определить ширину и высоту рендеринга на основе его дочерних элементов) и updateDisplayList (до расположите все внутри рендерера, как значок папки, ярлык папки и ваш vbox). Этот поток может помочь: http://forums.adobe.com/message/846259 - Есть ссылка на какой-то пример кода, который может вам помочь. –

+0

+1 Это мне очень помогло. Благодаря! –

Смежные вопросы