Проверять содержимое ячеек Spark DataGrid программно? - PullRequest
0 голосов
/ 24 января 2012

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

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

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

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

Спасибо!

Ответы [ 2 ]

1 голос
/ 24 января 2012

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

<?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 из таблицы данных, а затем сравните оба, и, если элемент изменен, просто установите «1», например, для флага «другой» в приведенном выше примере, а затем itemRenderer сам позвонит и изменит цвет автоматически

1 голос
/ 24 января 2012

На самом деле, вы должны создать свой собственный <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>
...