Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   DataGrid при скролле дублирует фон (http://www.flasher.ru/forum/showthread.php?t=118195)

andrey_p 17.11.2008 17:36

DataGrid при скролле дублирует фон
 
Я написал свой CellRenderer для тоо чтобы ряды выделять цветом

переназначив:
Код:

override protected function drawBackground():void {
                        if (int(data.stat) == 1) {
                                setStyle("upSkin", CellRenderer_upSkin_Green);
                        } else {
                              setStyle("upSkin", CellRenderer_upSkin_Red);
                        }
}

но после этого возникла странная проблемма, при скролинге вниз все ряды которые появляются (снизу) окрашиваются тем же цветом что и вверху стоящий ряд за исключением первего столбца (!!! у первого столбца все отлично с фоном видимо это как-то связано с простым списком List) Вобщем вон от вышестоящего ряда дублируется на нижестоящие ряды (!!!за исключением первого!!!)

Что за лажа? :( Кто-то сталкивался с таким багом? можно ли что-то с этим сделать?

s8000_1 17.11.2008 18:28

List так устроен. Он не перерисовывает компоненты, которые уже отрисованы. Он переносит ячейки уже отрисованными и загружает в них новые данные.

Попробуйте так:
Код AS3:

override public function set listData(value:ListData):void {
                        super.listData = value;
                      if (int(data.stat) == 1) {
                                setStyle("upSkin", CellRenderer_upSkin_Green);
                      } else {
                              setStyle("upSkin", CellRenderer_upSkin_Red);
                      }
                }

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

andrey_p 17.11.2008 18:59

не помогает :(
Взял простой пример с
http://www.adobe.com/devnet/flash/qu.../datagrid_pt3/

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

s8000_1 17.11.2008 19:05

Нет. не идентично:

"super.drawBackground();"

andrey_p 17.11.2008 19:13

"super.drawBackground()" тоже есть просто когда постил подредпктировал для понятности и потер строку эту )

Добавлено через 1 час 17 минут
Проблема разрешилась.
дело в том что в приведенном куске кода я осмелился написать не то, что у меня в коде а некую интерпретацию. на самом деле код был таким:
Код:



       
Код AS3:

       
if (int(data.stat) == 1) {
                setStyle("upSkin", CellRenderer_upSkin_Green);
}
if (int(data.stat) == 2) {
                setStyle("upSkin", CellRenderer_upSkin_Red);    }
}




Предполагалось что в значении 0, по умолчанию рисуется белый фон, все так и было пока не начался скроллинг. При скроллинге перерисовка для ячеек co "stat == 0" просто не выполнялась . вобщем сам виноват, чуть на адобовцев не начал грешить всердцах ))

Благодарю за отклик ;)


Часовой пояс GMT +4, время: 13:32.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.