2014-01-13 2 views
0

У меня есть информация о gird, и вы хотите установить цвет bg строки сетки на основе условия означает, что есть флаг = 1, тогда будет отображаться строка сетки фона в сером цвете, иначе как в файле сценария действия. Я использовал блейд-сервис.Как установить цвет фона в сетке на основе условия в файле сценария действия

, пожалуйста, помогите мне. Я уже пробовал setStyle(), но не получил успеха.

Заранее спасибо.

ответ

0

Это решение для ActionScript 3. Вам нужно сделать это в специальном классе itemRenderer. Я предлагаю вам расширить класс Label и в нем переопределить функцию updateDisplayList.

public class DynamicItemRenderer extends Label 
{ 
    private var _backgroundColorFunction:Function=null; 

    override protected function commitProperties():void 
    { 
     super.commitProperties(); 
     var cellBackgroundColor:Boolean=this.document.hasOwnProperty("cellColorFunction"); 
     if (cellBackgroundColor && _backgroundColorFunction == null) 
     { 
      _backgroundColorFunction=this.document.cellColorFunction as Function; 
     } 
    } 

    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void 
    { 
     super.updateDisplayList(unscaledWidth, unscaledHeight); 
     if (_backgroundColorFunction != null) 
     { 
      _backgroundColorFunction.call(this, data, graphics, unscaledWidth, unscaledHeight); 
     } 
    } 
} 

Затем в файле MXML, где определяется ваш DataGrid, вам нужно создать функцию, которая будет окрашивать ячейку, которая будет вашим backgroundColorFunction.

<mx:Script> 
    <![CDATA[ 
     public function cellColorFunction(... args):void 
     { 
      var item:Object=args[0]; 
      var g:Graphics=args[1] as Graphics; 
      var width:Number=args[2] as Number; 
      var height:Number=args[3] as Number; 

      g.clear(); 
      if (grid.isItemSelected(item) || grid.isItemHighlighted(item)) 
       return; 
      if (item.flag == 1) 
      { 
       g.beginFill(0xE2E2E2); 
       g.drawRect(0, 0, width, height + 4); 
       g.endFill(); 
      } 
     } 
    ]]> 
</mx:Script> 

Затем вам необходимо определить средство визуализации элементов на вашей клетке gridColumn, и все.

<mx:DataGridColumn itemRenderer="path.to.your.DynamicItemRenderer"/> 

Это лучшее решение, с которым я столкнулся. Если кто-нибудь знает лучший способ, я бы хотел его увидеть :)

+0

Я использую пользовательский datagrid, поэтому он будет работать и на нем? \t \t <элементы управления: столбцы> anshul

+0

@anshul Если ваш Класс MDataGridColumn расширяет DataGridColumn, тогда все должно быть хорошо. – Franz1986

+0

: Я создал файл класса DynamicItemRenderer.as и поместил ur-метод и импортировал этот файл в файл mxml. когда я использовал этот код , он дает ошибку "Функциональность DynamicItemRenderer не может быть найдена". Я также попытался использовать этот путь , но он не с той же ошибкой. Пожалуйста, предложите или есть какие-либо простое решение для цвета сетки row.I является новым в Flex. – anshul

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