Проверить содержимое ячеек Spark DataGrid программно?

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

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

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

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

Спасибо!


person debu    schedule 24.01.2012    source источник


Ответы (2)


На самом деле, вы должны создать свой собственный <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>
person Kodiak    schedule 24.01.2012
comment
Большое спасибо, это поставило меня на правильный путь :) Я посмотрел на создание GridItemRenderer в Flash Builder, используя его автоматическое создание компонентов, и мне удалось сделать что-то похожее на то, что вы предложили. Большое спасибо, очень ценю это! - person debu; 24.01.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 вызовет сам и автоматически меняет цвет

person Andre Mariano    schedule 24.01.2012
comment
Большое спасибо, это тоже помогло. Хорошо иметь другой взгляд на то, как я могу это сделать. - person debu; 24.01.2012