Модераторы: SoWa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> dataProvider для DataGrid, не могу правильно объявить 
:(
    Опции темы
Alix
Дата 16.5.2008, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: нет
Всего: 23



Есть такое "приложение":
Код
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
     backgroundGradientColors="[#FFFFFF, #00608D]"
     horizontalAlign="left"
     verticalGap="15" horizontalGap="15"  backgroundGradientAlphas="[1.0, 1.0]" layout="absolute">
    <mx:DataGrid width="352" height="505" x="24" y="47" editable="false" id="myGrid">
        <mx:columns>
            <mx:DataGridColumn headerText="Дата" dataField="choiseDate" width="150"/>
            <mx:DataGridColumn headerText="Выбор" dataField="choiseDecision" width="50"/>
        </mx:columns>
        <mx:dataProvider/>
    </mx:DataGrid>
    <mx:Button x="384" y="48" label="Сделать выбор" width="136" click="onButtonClick()"/>
    
    <mx:Script>
<![CDATA[
    import mx.events.CloseEvent;
    import mx.controls.Alert;
    

    private function onButtonClick():void{
     Alert.show("Превед, медвед?", "Вопросик", Alert.YES | Alert.NO, this, alertClickHandler);
    }
    
    private function alertClickHandler(event:CloseEvent):void{
     myGrid.dataProvider.addItem({choiseDate:new Date(), choiseDecision:event.detail == Alert.YES ? "YES" : "NO"});
    }
]]>
</mx:Script>

    <mx:Label x="24" y="21" text="Choise Log:" fontWeight="bold"/>
     
</mx:Application>

Если нажать на кнопку, и выбрать любой вариант в появившемся Alert'e, то в DataGrid добавится строка с указанием выбора. Проблема в том, что добавится она на вторую позицию (т.е. с индексом 1). Я так понимаю, что это из-за кривого определения dataProvider выше по коду. Но как его тогда правильно объявить?

Честно говоря, впервые юзаю Flex - и эта прога - мой хелло ворлд. Сделать такое же во Flash - без проблем, а тут не получается. И вообще странная фигня, я использую Flex Builder 3 и когда пишу "myGrid.dataProvider.", подсказки по методам не появляется. И в хелпе ничего нет. Приходится лазать в хелп Flash IDE за справками.

Это сообщение отредактировал(а) Alix - 16.5.2008, 11:52


--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
Delite
Дата 17.5.2008, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 29.1.2007

Репутация: нет
Всего: нет



А зачем dataProvider там вобще описан?

Обычно делается так:

Код

<mx:Script>
  [Bindable] private var data_:Array = [];
</mx:Script>

<mx:DataGrid ... dataProvider="{data_}">
  ...
</mx:DataGrid>


dataProvider - в общем случае это Object. Поэтому никаких подсказок от Flex'а ждать не стоит... а Object он потому что в качестве него можно использовать объекты разных типов, Object, Array, ArrayCollection, XML, XMLList, String и др.
PM MAIL ICQ Skype YIM   Вверх
Alix
Дата 17.5.2008, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: нет
Всего: 23



Object... ну ясно, во флеше то там это вполне даже класс DataProvider.
Ну суть идеи вашей я уловил, а как заставить это работать? Вот в приведенном выше коде я заменил тело функции alertClickHandler на такое:
Код
    private function alertClickHandler(event:CloseEvent):void{
     data_.push({choiseDate:new Date(), choiseDecision:event.detail == Alert.YES ? "YES" : "NO"});
    }
Массив меняется, а в таблице ничего не происходит. Какой должен быть элемент в этом массиве?


--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
Delite
Дата 17.5.2008, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 29.1.2007

Репутация: нет
Всего: нет



Есть такая вешь как data binding, т.е. при изменения данных будут посылаться события всем кто хочет знать об этих изменениях. Так вот Array ничего не посылает при своей модификации. Для этого есть оберкта над ним ArrayCollection, он будет посылать события при изменении порядка, и количества элементов.

Т.о. сделать так:
Код

<mx:Script>
  [Bindable] private var data_:ArrayCollection = new ArrayCollection();

  private function alertClickHandler(event:CloseEvent):void{
    data_.addItem({choiseDate:new Date(), choiseDecision:event.detail == Alert.YES ? "YES" : "NO"});
  }
</mx:Script>
<mx:DataGrid ... dataProvider="{data_}">
  ...
</mx:DataGrid>


(в массиве все что угодно может лежать, т.к. там тоже Object'ы)
PM MAIL ICQ Skype YIM   Вверх
eternalko
Дата 11.7.2008, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 23.3.2008

Репутация: нет
Всего: нет



Код

<mx:Script>
  [Bindable] private var data_:ArrayCollection = new ArrayCollection();

  private function alertClickHandler(event:CloseEvent):void{
    data_.addItem({choiseDate:new Date(), choiseDecision:event.detail == Alert.YES ? "YES" : "NO"});
    [color=crimson]data_.refresh();[/color]
  }
</mx:Script>
<mx:DataGrid ... dataProvider="{data_}">
  ...
</mx:DataGrid>


Вот так вроде самое то будет
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Flex | Следующая тема »


 




[ Время генерации скрипта: 0.0655 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.