Просмотр полной версии : CheckBox и Image в ячейке DataGrid
Добрый день.
Имеется DataGrid заполняемый динамически из xml через URLLoader.
Потом добавляется ещё несколько колонок(опять таки через экшнскрипт, не в mxml коде). Вобщем всё генерится динамически.
Мне необходимо вставить в каждую ячейку одной из колонок какой-то компонент, чекбокс или имидж. Такой же компонент надо вствить и в head колонки.
Нашел несколько подобных примеров, но там используется вставкка компонента прямо в mxml, а мне надо динамически.
Вобщем за помощь буду очень признателен ))
Нужно создать сначала свой ItemRenderern (в Flex Developer Guide -> Customizing User Interface есть статьи и по MXML и по AS)
Далее тебе нужно через фабрику, установить рендерер, вроде
myDataGridCollumn.itemRenderer = new ClassFactory(MyItemRendererClass);
Спасибо помогло, но теперь у меня возникла другая проблема.
Для начаа опишу то что получилось на данный момент:
есть датагрид у которого в колонках стоит компонент headerCheck(на основе чекбокса), а в строках другой компонент itemCheck(тоже на основе чекбокса).
Мне надо реализовать функцию типа "отметить все". То есть при переключении чекбокса headerCheck, надо переключатьв соответствующее положение все чекбоксы в строках (itemCheck).
На данный момент представляю себе несколько решений:
1) Создать в компоненте itemCheck функцию selectAll() и вызывать её при переключении чекбокса в headerCheck. Но так не получается, потому что из компонента headerCheck не видна функция находящаяся в itemCheck.[Bindable] не помогает.
2) Создать такую функцию прямов headerCheck, и она будет переключать чекбоксы в itemCheck. Но не понятно как к этим чекбоксам обратиться.
может есть какая то функция наподобие document.getElementById() в javascript ??
логичнее всего управлять нужно из датапровайдера, т.е. в датапровайдере скидываешь все "галки", а рендеры должны автоматом обновиться (гы гы если ты это реализовал).
Добро пожаловать в мир кастомных айтемрендеров, вас ждет незабываемая бесконечная долгая любовь, постигнув которую вы обретете покой...
Чё то не сильно понятно.
Попробую сам разобраться, только ответьте мне на такой вопрос.
Как мне из компонента обратиться к объекту или переменной которая определена как 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;
}
}
Шаг 2. делаем атем рендер "заточеный" под наши данные:
<?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>
Шаг номер 3, наша мега аппликуха:
<?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>
Усе фокус готов, ловкость рук и никакого мошенничества )
этот код попонятней
<?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>
<mx:DataGrid id="myDG"
dataProvider="{myDP}"
variableRowHeight="true"
width="474" height="250"
editable="true" horizontalCenter="24" y="10">
<mx:columns>
<mx:DataGridColumn dataField="Sent"
headerText=" "
itemRenderer="mx.controls.CheckBox"
rendererIsEditor="true"
width="25"
editorDataField="selected"/>
<mx:DataGridColumn dataField="City"
headerText=" "
editable="false"/>
</mx:columns >
</mx:DataGrid>
<mx:Button click="click()">
</mx:Button>
</mx:Application>
Некропостинг у нас не в почёте, кроме того, код нужно оформлять тегами .
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.