![]() |
Изменение цвета ряда DataGrid в зависимости от значения датапровайдера
Привет!
Каким образом можно прорисовывать цвет ряда в датагриде в зависимости от значения, полученного из датапровайдера? |
|
Вообще не совсем понятно.
Дело в том что дата провайдер содержит в себе объекты, которые передаются ячейкам, тоесть дата провайдер не содержит в себе информации для самой колонки. Есть два способа, либо реализовать возможность смены цвета у каждой ячейки в отдельности (тогда нужно передавать, каждой ячейке цвет), либо вывести цвета в отдельное свойство. Есть вариант через задницу, это задавать цвет скажем только первому эллементу в колонке, и остальные ячейки берут значение первого эллемента. Вот например если юзать отдельное свойство colors Код:
package controls |
Цитата:
Кстати, по поводу >> Вот например если юзать отдельное свойство colors Цвет надо передавать в датапровайдере? Я не совсем понял. Можешь привести примерчик... |
В моем случае я цвет подаю через свойство colors
Код:
<myNamespace:ColoredDataGrid colors="{[0xF2F2F2, 0xFF6600]}"...... |
Ага, ясно, спасибо!
Блин, нафига убрали только dg.setPropertiesAt(2, {backgroundColor:0xFF0000})... |
использовал вариант http://flasher.ru/forum/showpost.php...98&postcount=5
При использовании ColoredDataGrid все почему-то тормозит. |
Переделал немного примере Питера Энта по отрисовке фонов рядов в гриде:
Код:
<?xml version="1.0" encoding="utf-8"?> |
у меня сейчас времени мало, можешь демонстрацию сделать?
|
|
шаманство айтем рендеров это особый раздел флекса..., вобщем в глубине всего этого конкретный экземпляр айтем рендера ни как особо не связан с конкретным элементом (далее "элемент") в дата провайдере. Вернее его связывает свойство айтем рендера(далее "айтем рендер" ))) ) "data" (ну или типа того). Но эта связь очень легко рвущаяся и заменяемая :
В жизни листовые компонеты создают количество айтем рендеров которое помещаеться в видимую область + 1-2 чтобы сделать иллюзию непрерывной прокрутки (ну или если количество элементов помещаеться в сам компонет, то количество айтем рендеров равно ему скролл не отображается). Теперь при прокрутке происходит этакая "карусель", когда айтем рендер скрывается вверху(внизу) то его просто перекидывают вниз (вверх) и меняют ему поле data. Выглядит это гдето так: 1 2 <- первый видимый 3 4 5 6 <- последний видимый после скрола(проскролили на 2 пункта) получаеться: 5 6 <- первый видимый 1 2 3 4 <- последний видимый Вполне вероятно (в твоем случае), создав 10 атем рендеров, при уменьшении размера листа, лист просто не ремувит лишние атем рендеры, а держит их "прозапас" (утверждать не буду, но как вариант, вполне вероятно это глупость я сказал). Но все в конце концов сводиться к следующему при перестройке листа, лист просто выстраивает свои айтем рендеры как нужно и присваивает им соответствующие положению данные data. Тут вполне вероятно просиходит следующия ситуация. При этом присваивании айтем рендер просто думает что ему "досталась" старые данные и ничего не делает. Инвалидейты/валидейты ему пофигу (он выровнял себя как нужно, покрасил станлартные вещи и забил на остальное). Поэтому тебе нужно переопределить несколько методов у твоего айтем рендера, какие конкретно я тебе не скажу, но вполне вероятно это метод получения данных (setData вроде или data его тебе 100% нужно переопределить) вполне вероятно тот метод который "слушает" изменения внутри элемента(данных) , ну и какие-то методы которые отвечают за отрисовку твоего айтем рендера (скорей всего это будет тотже validate*|invalidate* и в нем ты просто будешь задавать соответствующий стиль ). Ну и пару слов про секс. Все кастомные айтем рендеры которые приведены в примерах в виде мхмл это ОТСТОЙ. Они только для красоты и ничего более. Какой-то более менние продвинутый функционал на них построить довольно сложно Усе типа рассказал, когда выросту может даже напишу умную статью ). |
Цитата:
( http://flasher.ru/forum/showpost.php...98&postcount=5 ) ну разве что нужно убрать апдейтдисплей лист! т.к. они зачем-то все время перерисовывают замечательный айтем. Его нужно заменить на что то более оптимальное |
__i прав, тебе нужно переопределять itemRenderer.
|
Согласен, и айтем рендер должен реализовывать mx.controls.listClasses.IDropInListItemRenderer
тогда будет у элемента {get | set} listData ():BaseListData, где в BaseListData есть и rowIndex и columnIndex собственно Nirth дал самое оптимальное решение |
А вроде каждый второй компонент (Label\CheckBox и тд) реализуют IDropInLitItemRenderer.
|
Сanvas не реализует например
|
нормальное решение:
http://www.mikenimer.com/index.cfm/2...Grid-component |
У меня возник вопрос, а как можно поменять цвет строки уже во время работы? например после какого-то действия пользователя?
|
Цитата:
|
Цитата:
пробовал переопределять listData, как советовал 7thsky™, таким способом - не помогает. Код:
private var _listData:BaseListData; |
в itemRenderer в методе set data удаляйте все предыдущие настройки редерера и будет вам счастье!
Вот пример одного из моих айтимов смысл его в том что бы показывать в виде цветных прямоугольников историю перемещения объекта Код:
package su.quarta.kadry |
| Часовой пояс GMT +4, время: 19:48. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.