В моем мобильном приложении есть 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 получает старое значение следующей строки.