Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   XML -> DataGrid with CheckBox. Selected values (http://www.flasher.ru/forum/showthread.php?t=120989)

Foli 04.02.2009 18:14

XML -> DataGrid with CheckBox. Selected values
 
Привет друзья. :umnik2: Нужна помощь. :confused:
Есть у меня XML объект который я скормил DataGrid'u

Нужно добавить в DataGrid в каждую строку CheckBox.
Потом нужно получить все значения выделенных CheckBox'ов (id - элемент в XML)

Пример XML'я:
Код AS3:

<messages>
            <msg>
                <id>1</id>
                <date>10.11.2009</date>
                <subject>I lost my Password</subject>
                <message>Hi there. I lost my pass dude. Need help</message>
        </msg>
        <msg>
                <id>2</id>
                <date>11.11.2009</date>
                <subject>I dit that</subject>
                <message>Admin, call me pls.</message>
        </msg>
</messages>

DataGrid:
Код AS3:

<mx:DataGrid id="gridMsg">
        <mx:columns>
                <mx:DataGridColumn>
                        <mx:itemRenderer>
                                <mx:Component>
                                        <mx:CheckBox/>
                                </mx:Component>                                               
                        </mx:itemRenderer>
                </mx:DataGridColumn>
                <mx:DataGridColumn dataField="date" headerText="Date"/>
                <mx:DataGridColumn dataField="subject" headerText="Subject"/>                                               
      </mx:columns>
</mx:DataGrid>

Прошу помочь кто знает. :umnik2:

r_r_f_r 04.02.2009 19:52

А ведь google помогает

Foli 05.02.2009 14:02

Цитата:

Сообщение от r_r_f_r (Сообщение 795618)
А ведь google помогает

Думаю что этот пример не для меня. Всё равно спасибо.

Вот зачем это делать?
Код AS3:

selected="{data.online}"

А тут вообще не пойму логики:
Код AS3:

click="data.online=!data.online"

И зачем тут добавили поле которого нет в изначальной структуре данных? dataField="online"
Код AS3:

 <mx:DataGridColumn headerText="Online" dataField="online">

Каша в голове. :umnik2: Обязательно ли добавлять элемент в мой XML:
Цитата:

<selected> true or false </selected>

r_r_f_r 05.02.2009 15:28

Вообще, с хмл могут возникнуть сложности поскольку большинство методов по работе с хмл создают новый XML или XmlList, т.е. изменение его не повлечёт изменение начального, сразу не могу понять что и как должно быть, и это собственно не самое благодарное занятие:)

Код AS3:

selected="{data.online}"

это для задания начальных значей в общем-то, т.е. в данном примере это не обязательно, но если какой-то online будет на старте true, то это задание всё исправит.

Код AS1/AS2:

click="data.online=!data.online"

При клике мы изменяем содержимое, само чекБокс поле забиндино на это содержимое см. выше

Цитата:

И зачем тут добавили поле которого нет в изначальной структуре данных? dataField="online"
Как это его нет?
Если я правильно понял вопрос, то этот столбец добавлен просто для показаетльных выступлений.

Цитата:

Обязательно ли добавлять элемент в мой XML
Если хочешь всё таки работать с XML то предлагая погуглить чуть:), во всяком случае я бы не работал с ним.

Добавлено через 14 минут
Или собственно вот так:

Код AS3:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init();" viewSourceURL="srcview/index.html">
 
    <mx:Script>
        <![CDATA[
                import mx.controls.CheckBox;
 
            [Bindable]
            private var _xml:XMLList = new XMLList('<msg><id>1</id><date>10.11.2009</date><subject>I lost my Password</subject><message>Hi there. I lost my pass dude. Need help</message></msg><msg><id>2</id><date>11.11.2009</date><subject>I dit that</subject><message>Admin, call me pls.</message></msg>');
            private var _arr:Array;
 
            private function init():void
            {
                    _arr = new Array(_xml.length);
                    gridMsg.addEventListener('CheckBoxChanged',change);
            }
 
            private function change(e:Event):void
            {
                    _arr[(e.target as CheckBox).data.id] = (e.target as CheckBox).selected;
                    trace (_arr);
            }
        ]]>
    </mx:Script>
    <mx:DataGrid id="gridMsg" dataProvider="{_xml}">
        <mx:columns>
                <mx:DataGridColumn>
                        <mx:itemRenderer>
                                <mx:Component>
                                        <mx:CheckBox click="onClick(event)">
                                                <mx:Script>
                                                        <![CDATA[
                                                                private function onClick(e:MouseEvent):void
                                                                {
                                                                        var ev:Event = new Event('CheckBoxChanged',true,false);
                                                                        (this as EventDispatcher).dispatchEvent(ev);
                                                                }
                                                        ]]>
                                                </mx:Script>
                                        </mx:CheckBox>
                                </mx:Component>
                        </mx:itemRenderer>
                </mx:DataGridColumn>
            <mx:DataGridColumn dataField="date" headerText="Date"/>
            <mx:DataGridColumn dataField="subject" headerText="Subject"/>                                               
      </mx:columns>
        </mx:DataGrid>
</mx:Application>


Foli 05.02.2009 16:49

:umnik2:Спасибо что объяснил. :drinks:
Всё понятно стало. Хехеххе, сделал, работает.

Код AS3:

<mx:DataGrid>
        <mx:columns>
        <mx:DataGridColumn>
            <mx:itemRenderer>
                <mx:Component>
                            <mx:HBox>
                      <mx:CheckBox id="chbox" click="data.sel=chbox.selected"/>
                            </mx:HBox>
                          </mx:Component>
                </mx:itemRenderer>
            </mx:DataGridColumn>
</mx:DataGrid>

Изменения в гриде остаются в XML объекте. :umnik2:
Когда нужно будет получить выделенные элементы, я просто пробегу по XML объекту и соберу урожай. :umnik2:

Дело в том что мне удобно работать с XML.
У меня есть Server Side. Мне функции на Jave возвращают уже готовый объект и я его тупо отдаю гриду. Использую GlassFish + BlazeDS
Оборачиваю всё в xml используя org.w3c.Document etc...

Всё очень просто и удобно.

Добавлено через 23 минуты
Забыл сказать. Добавил в XML элемент:
Цитата:

<sel> true or false </sel>


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

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