|
|
|||||
Регистрация: Oct 2006
Сообщений: 44
|
CheckBox и Image в ячейке DataGrid
Добрый день.
Имеется DataGrid заполняемый динамически из xml через URLLoader. Потом добавляется ещё несколько колонок(опять таки через экшнскрипт, не в mxml коде). Вобщем всё генерится динамически. Мне необходимо вставить в каждую ячейку одной из колонок какой-то компонент, чекбокс или имидж. Такой же компонент надо вствить и в head колонки. Нашел несколько подобных примеров, но там используется вставкка компонента прямо в mxml, а мне надо динамически. Вобщем за помощь буду очень признателен )) |
|
|||||
4AM Games
|
Нужно создать сначала свой ItemRenderern (в Flex Developer Guide -> Customizing User Interface есть статьи и по MXML и по AS)
Далее тебе нужно через фабрику, установить рендерер, вроде
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^ |
|
|||||
Регистрация: Oct 2006
Сообщений: 44
|
Спасибо помогло, но теперь у меня возникла другая проблема.
Для начаа опишу то что получилось на данный момент: есть датагрид у которого в колонках стоит компонент headerCheck(на основе чекбокса), а в строках другой компонент itemCheck(тоже на основе чекбокса). Мне надо реализовать функцию типа "отметить все". То есть при переключении чекбокса headerCheck, надо переключатьв соответствующее положение все чекбоксы в строках (itemCheck). На данный момент представляю себе несколько решений: 1) Создать в компоненте itemCheck функцию selectAll() и вызывать её при переключении чекбокса в headerCheck. Но так не получается, потому что из компонента headerCheck не видна функция находящаяся в itemCheck.[Bindable] не помогает. 2) Создать такую функцию прямов headerCheck, и она будет переключать чекбоксы в itemCheck. Но не понятно как к этим чекбоксам обратиться. может есть какая то функция наподобие document.getElementById() в javascript ?? |
|
|||||
логичнее всего управлять нужно из датапровайдера, т.е. в датапровайдере скидываешь все "галки", а рендеры должны автоматом обновиться (гы гы если ты это реализовал).
Добро пожаловать в мир кастомных айтемрендеров, вас ждет незабываемая бесконечная долгая любовь, постигнув которую вы обретете покой...
__________________
33 коровы |
|
|||||
Регистрация: Oct 2006
Сообщений: 44
|
Чё то не сильно понятно.
Попробую сам разобраться, только ответьте мне на такой вопрос. Как мне из компонента обратиться к объекту или переменной которая определена как public в родительском апликейшене??? Я из компонента вообще не вижу никких переменных апликейшена. Как с этим бороться? Опять же [Bindable] не помогает ( |
|
|||||
смотри, ща я буду показывать мега фокусы(пошагово %) ):
шаг 1, делаем описание наших данных: package { import flash.events.IEventDispatcher; import flash.events.EventDispatcher; [Bindable] public class ItemVO extends EventDispatcher { public var label : String; public var checked : Boolean; } } <?xml version="1.0" encoding="utf-8"?> <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="100" height="20"> <mx:CheckBox id="checker" label="{data.label}" selected="{data.checked}" change="{data.checked = checker.selected}" /> </mx:Canvas> <?xml version="1.0" encoding="utf-8"?> <!-- Tree control example. --> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:local="*" layout="vertical"> <mx:Script> <![CDATA[ public function clearItems() : void { for (var i : Number=0; i<arcoltest.length; i++) { arcoltest.getItemAt(i).checked = false; } } ]]> </mx:Script> <mx:ArrayCollection id="arcoltest"> <local:ItemVO label="qewqw" checked="true" /> <local:ItemVO label="1" checked="true" /> <local:ItemVO label="2" checked="true" /> <local:ItemVO label="1231" checked="true" /> <local:ItemVO label="qweqwe" checked="true" /> </mx:ArrayCollection> <mx:List dataProvider="{arcoltest}" itemRenderer="CheckBoxItemRender" /> <mx:Button label="Clear all" click="clearItems()"/> </mx:Application>
__________________
33 коровы |
|
|||||
Регистрация: Jan 2009
Сообщений: 9
|
этот код попонятней
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Script> <![CDATA[ import mx.controls.Alert; import mx.collections.ArrayCollection; private function click():void { for (var i : Number=0; i<myDP.length; i++) { var o:Object = myDP.getItemAt(i); o.Sent = false; myDP.setItemAt(o, i); } } [Bindable] private var myDP:ArrayCollection = new ArrayCollection([ {City:"Все регионы", Sent:true}, {City:"Альметьевск", Sent:true}, {City:"Астрахань", Sent:true}, {City:"Альметьевск", Sent:true}, {City:"Волгоград", Sent:true}, {City:"Волжский", Sent:true}, {City:"Вологда", Sent:true} ]); ]]> </mx:Script> <mxataGrid id="myDG" dataProvider="{myDP}" variableRowHeight="true" width="474" height="250" editable="true" horizontalCenter="24" y="10"> <mx:columns> <mxataGridColumn dataField="Sent" headerText=" " itemRenderer="mx.controls.CheckBox" rendererIsEditor="true" width="25" editorDataField="selected"/> <mxataGridColumn dataField="City" headerText=" " editable="false"/> </mx:columns > </mxataGrid> <mx:Button click="click()"> </mx:Button> </mx:Application> |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Некропостинг у нас не в почёте, кроме того, код нужно оформлять тегами [code][/code].
|
Часовой пояс GMT +4, время: 00:18. |
|
« Предыдущая тема | Следующая тема » |
|
|