2012-01-24 2 views
0

Я использую Spark DataGrid в первый раз и считаю, что он в целом очень полезен. Теперь мне нужно сделать что-то с содержимым моей сетки, хотя я нарисовал ее, и я немного застрял, как продолжить.Программно запрограммировать содержимое ячеек Spark DataGrid?

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

Я знаю, что вы можете получить доступ к визуализатору элементов конкретной ячейки, используя функцию getItemRendererAt() и передавая индексы столбца и строки. Но я не вижу, как бы я, например, перебирал значения в каждом столбце.

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

Спасибо!

ответ

1

На самом деле, вы должны создать свой собственный <s:GridItemRenderer /> и использовать его как itemRenderer вашего dataGrid.

Таким образом, вы можете изменить цвет ячейки в зависимости от свойства data объекта <s:GridItemRenderer />.

Вот пример того, как вы могли бы сделать это:

<?xml version="1.0" encoding="utf-8"?> 
<s:GridItemRenderer xmlns:fx = "http://ns.adobe.com/mxml/2009" 
    xmlns:s = "library://ns.adobe.com/flex/spark" 
    xmlns:mx = "library://ns.adobe.com/flex/mx" > 

    <fx:Script> 
     <![CDATA[ 
     private function isValid(value:uint):Boolean 
     { 
      //whatever; 
      return true; 
     } 

     ]]> 
    </fx:Script> 

    <s:BorderContainer width="100%" height="100%"> 
     <s:borderStroke> 
      <s:SolidColorStroke color="{isValid(data)?#00FF00:#FF0000}" /> 
     </s:borderStroke> 
     <s:UITextField label="{data}" /> 
    </s:BorderContainer> 

</s:GridItemRenderer> 
+0

Большое спасибо, это поставило меня на правильный путь :) Я посмотрел на создание GridItemRenderer в Flash Builder, используя его создание автокомпонентов и сумел сделать что-то похожее на то, что вы предложили. Большое спасибо, очень ценю! – debu

1

Используя пример выше, также Override «набор данных», чтобы изменить цвет каждый раз, когда вы изменяете данные, а не только на сетке создание

<?xml version="1.0" encoding="utf-8"?> 
<s:GridItemRenderer xmlns:fx = "http://ns.adobe.com/mxml/2009" 
       xmlns:s = "library://ns.adobe.com/flex/spark" 
       xmlns:mx = "library://ns.adobe.com/flex/mx" > 

<fx:Script> 
    <![CDATA[ 
     import mx.controls.ColorPicker; 
     import mx.events.FlexEvent; 
     import mx.utils.ColorUtil; 

     override public function set data(value:Object):void{ 
      super.data = value; 

      if(data.different == 1){ 
       solidColor.color = 255; 
      } 
     } 

    ]]> 
</fx:Script> 

<s:BorderContainer width="100%" height="100%"> 
    <s:borderStroke> 
     <s:SolidColorStroke id="solidColor" /> 
    </s:borderStroke> 
    <s:UITextFieldGridItemRenderer label="{data.name}" /> 
</s:BorderContainer> 
</s:GridItemRenderer> 

Тогда следующие шаги легко, клонировать DataProvider из DataGrid, а затем сравнить оба, и если элемент изменяется, просто установите «1», например, флаг «другой» в пример выше, а затем itemRenderer вызовет себя и изменит цветовой автомат tically

+0

Большое спасибо, это тоже помогло. Хорошо иметь другой подход к тому, как я могу это сделать. – debu