Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   В разных СТРОКАХ DataGrid разные ItemRenderer (http://www.flasher.ru/forum/showthread.php?t=111570)

Borman2000 02.05.2008 13:41

В разных СТРОКАХ DataGrid разные ItemRenderer
 
Реально ли сделать сабж? На всякий поясню: в зависимости от одного из значений данных датасорса строка должна содержать ItemRenderer, наример, либо с ЧекБоксом либо с РадиоБаттоном. Реально ли такое сделать в принципе? Если реально - то как?

Sneg 02.05.2008 15:22

Лично я решал эту задачу, с помощью одного itemRender'a в котором был ViewStack. Возможно, это был не рационально - но тогда сгодилось.

Borman2000 02.05.2008 18:23

Пасиб, хорошее решение. Если можно, кинь примерчик, а то я идею понял, но никак не соображу, как прикрутить... :-/

Borman2000 05.05.2008 22:57

Сделал программно. В реднерере. НО!!! Допустим в dataProvider возвращается 2 записи. Рендерер при этом вызывается 2+1 раза! Т.е. он еще и для заголовка вызывается??? Как это обойти?

Sneg 06.05.2008 00:57

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

Borman2000 06.05.2008 02:09

Цитата:

Сообщение от Sneg (Сообщение 737362)
Для заголовка пользуется headerRenderer - это совсем другой ренедерер, если конечно и его задали тем же самым - то он и вызовется, в противном случае не должен.

Есть тока один Рендерер - itemRenderer

Цитата:

Сообщение от Sneg (Сообщение 737362)
Для того чтобы понять какой элемент в ViewStack пользовать, переопределите сеттер set data и смотрите что туда приходит и от этого значения дальше меняйте, что там вам нужно.

Я сделал без ViewStack. Просто по значению одного из полей dataProvider'а добавляю (addChild) либо ЧекБокс, либо РадиоБаттон.

И вопрос в том, что мой рендерер при 2-х записях вызывается 3 раза. И када через 10 сек. обновляем данные (отправляем на сервак запрос и получаем те же 2 записи), то происходит смещение моих компонентов.

Если на пальцах:
- при отображении ДатаГрида
ЧекБокс
РадиоБаттон
- через 10 сек
ЧекБокс
ЧекБокс
- еще через 10 сек
РадиоБаттон
ЧекБокс
и т.д.
Т.е. как бы по кругу ходит. Подозреваю, что это происходит потому, что при инициализации создается 3 объекта, а отображается тока 2. Один как бы в очереди остается и отображается тока при след. апдейте...

Вот примерно так. Если что непонятно - спрашиваете, попробую продетализировать.

max_oil 06.05.2008 10:32

У меня такая же проблема.. Я заметил что это именно первая строка дважды инициализируется, исправил костылями..

Sneg 06.05.2008 11:23

Ребят, а вы их добавляете просто как addChild()? Если да, то подозреваю происходит следущее.
Ваш дата провайдер обновляется/переписывается/меняется о чем уведомляется рендерер. Это может происходить много раз (приходит data) ,и вы каждый раз чего-то добавляете - и эти компоненты там просто копятся.
Выход: пользовать states в рендерере (достаточно медленная) или viewStack.

Если красивые рендереры нужны для редактирования каких-то специальных значений (например числа NumbericStepper'ом), то стоит смотреть в сторону ItemEditor'ов, т.к. такие "сложные" рендереры не самые быстрые.

Borman2000 06.05.2008 18:59

Цитата:

Сообщение от max_oil (Сообщение 737400)
У меня такая же проблема.. Я заметил что это именно первая строка дважды инициализируется, исправил костылями..

Можно подробней про костыли? А то я за вчера так и не придумал... :rolleyes:

Borman2000 06.05.2008 19:03

Цитата:

Сообщение от Sneg (Сообщение 737410)
Ребят, а вы их добавляете просто как addChild()? Если да, то подозреваю происходит следущее.
Ваш дата провайдер обновляется/переписывается/меняется о чем уведомляется рендерер. Это может происходить много раз (приходит data) ,и вы каждый раз чего-то добавляете - и эти компоненты там просто копятся.

Добавление лишней строки происходит ТОЛЬКО первый раз (первых заход на форму). Потом - всё по плану. Но лишняя запись никуда не девается.
При обновлении data Childы добавляются с одинаковыми id-шниками... )) так что не копятся... Не должны по крайней мере. :cool:


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

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