Ограничить данные FlexRark DataGrid ItemRenderer столбцом - PullRequest
0 голосов
/ 27 февраля 2012

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

Возможно ли что-то подобное?

Просто для справки, это мой текущий рендерер элементов (опять же, это отлично работает для нескольких строк, для 5+ быстро меняющихся данных, это больше не работает, ячейки форматируются, даже если их данные не изменились ).

public class ColorGridItemRenderer extends DefaultGridItemRenderer 
{
    public function ColorGridItemRenderer() {
        super();
    }           

    override public function set text(value:String):void {
        if (!value)
            value = "";

        if(Number(value) > Number(text) && text!="")
                setStyle("color", 0x40c040);
            else if(Number(value) < Number(text) && text!="")
                setStyle("color", 0xf05050);
            else 
                setStyle("color", 0xc1c1c1);
        }

        super.text = value;
    }
}

Edit: Я просто дважды проверил и должен отменить свое предыдущее утверждение. Одна строка работает нормально, вторая строка уже портит цветовое форматирование. Кажется, что сетка данных как-то сбрасывает значения. Выполнение форматирования цвета в заданном методе данных показывает точно такой же эффект;

override public function set data(value:Object):void {

        if(value && data) {

            label = value[column.dataField];

            if(value[column.dataField] > _oldVal && _oldVal != 0)
                setStyle("color", 0x40c040);
            else if(value[column.dataField] < _oldVal)
                setStyle("color", 0xf05050);
            else 
                setStyle("color", 0xc0c0c0);

            _oldVal = value[column.dataField];  
        }
        super.data = value;

    }

Edit2: Мое предположение о том, что сетка испортила данные ItemRenderer, кажется правильным. Простая трассировка в методе набора данных (trace ("old:" + _oldVal + "new:" + value [column.dataField]);) показала, что каким-то образом значения следующей строки сетки (если их 2) получают используется, а также _oldVal получает старое значение следующей строки.

1 Ответ

0 голосов
/ 28 февраля 2012

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

...