Форум 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=132043)

olevacho 03.11.2009 02:53

Работа с отдельными ячейками DataGrid
 
Помогите пожалуйста а то уже целую неделю не могу решить задачу которая состоит в следующем: Нужно динамически рисовать таблицу где в каждой ячейке был бы radiobutton. Радиобатоны в строке должны принадлежать к одной группе (хотя сойдет даже и в одном столбце). То-есть в разных строках выбор пользователем должен делаться независимо. Перерыл много адобовской доки где написано что пользовательское переопределение содержимого ячеек делается с помощью написания пользовательского класса который должен инкапсулировать интерфейс ICellRenderer и наследовать UICOmponent с последующим присвоением класса свойству CellRenderer у DataGridColumn. http://www.adobe.com/devnet/flash/qu...pt3/#section14
Но этот путь заводит в тупик поскольку, невозможно одним пользовательским классом (например
Код AS3:

var dataCol:DataGridColumn = new DataGridColumn("data");
dataCol.cellRenderer = LoaderCellRenderer; var titleCol:DataGridColumn = new DataGridColumn("title");
titleCol.cellRenderer = LoaderCellRenderer;

) присвоить радиобатонам в разных ячейках одной строки разные например label поскольку елемент из масива или датапровайдера применяется один для всех ячеек одной строки. То-есть если мы добавляем в провайдер dp.addItem({data:"gr1", title:"choice1"}); то одни и те же значения свойств применяются и к ячейке из колонки data и к ячейке из колонки title.
Что касается применения разных класов для каждой колонки
Код AS3:

var dataCol:DataGridColumn = new DataGridColumn("data");
dataCol.cellRenderer = LoaderCellRenderer; var titleCol:DataGridColumn = new DataGridColumn("title");
titleCol.cellRenderer = LoaderCellRenderer2;

то это тоже не применимо по двух причинах:
-Во первых данные формируются динамически и я не могу знать наперед количества строк и столбцов
-во вторых если пользователь кликнет на определенном радиобатоне то обязательно выбранными станут остальные радиобатоны в той же строке в силу того, что Datagrid по щелчку выделяет целый item которому соответствует вся строка.
Как сделать так чтобы отдельно можно было присваивать значения каждой ячейке и соответственно щелчек приводил бы к выбору(selected) одной ячейки а не целой строки?

Max Stone 08.04.2010 00:09

Если еще не поздно, то решение вашей проблемы в переопределении set метода параметра selected у LoaderCellRenderer. Так как при нажатии на строку этот параметр у всех ячеек этой строки становится true; А так как ваша ячейка скорей всего унаследована от радиобатона, то соответственно и ему устанавливается true.

Пример такой

Код AS3:

override public function get selected():Boolean {
            return _selected;
        }
 
override public function set selected(value:Boolean):void{}

А чтобы радиобатон реагировал на нажатие в конструкторе класса LoaderCellRenderer
вешаем слушателя на нажатие мыши:

Код AS3:

public function LoaderCellRenderer()
        {
            ...
            addEventListener(MouseEvent.CLICK, onCheckClick);                       
        }
 
public function onCheckClick(e:MouseEvent)
        {
            _selected = !_selected;
            _data["selected"] = _selected;
        }

Таким образом у меня все заработало.


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

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