Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   подгрузка xml в datagrid с фильтром (http://www.flasher.ru/forum/showthread.php?t=145699)

misha912 16.10.2010 22:24

подгрузка xml в datagrid с фильтром
 
Добрый день, направте на путь истинны.

Нужно сделать чтоб по нажатию на кнопку произошла подгрузка данных их XML при чем сразу с фильтром в DataGRid. данные для фильтра передает кнопка.

при запуске flex приложения данные в datagrid не должны показываться.

alatar 17.10.2010 16:47

В чем собственно состоит вопрос?

misha912 17.10.2010 19:03

Цитата:

Сообщение от alatar (Сообщение 943330)
В чем собственно состоит вопрос?

как загрузить xml сразу с выборкой

alatar 17.10.2010 19:14

Вариант 1. Сделать выборку на сервере, отдать XML.
Вариант 2. Загрузить XML, сделать выборку.
Вариант 3. Загрузить XML, распарсить в объекты, объекты запихнуть в ArrayCollection, для ArrayCollection прописать filterFunction.

misha912 17.10.2010 22:01

Цитата:

Сообщение от alatar (Сообщение 943366)
Вариант 1. Сделать выборку на сервере, отдать XML.
Вариант 2. Загрузить XML, сделать выборку.
Вариант 3. Загрузить XML, распарсить в объекты, объекты запихнуть в ArrayCollection, для ArrayCollection прописать filterFunction.

1 вариант отпадает, так как делаю некий офлайн каталог
2. такой вариант у меня сейчас сначала загружается а потом по кнопке фильтруется
3. Как сделать?

alatar 18.10.2010 14:48

Цитата:

3. Как сделать?
В смысле? Какая у вас структура XML? По какому параметру должно фильтроваться?

misha912 18.10.2010 14:54

Цитата:

Сообщение от alatar (Сообщение 943518)
В смысле? Какая у вас структура XML? По какому параметру должно фильтроваться?

Структура такая примерно:
Код:

<?xml version="1.0" encoding="windows-1251" standalone="yes"?>
<DATAPACKET Version="2.0">

  <ROWDATA>
    <ROW ID="120" SECTION="7" NAME="111111" " YEAR="90-92"  PRICE1="28,81" PRICE2="22,96" PRICE3="19,81"/>
    <ROW ID="230" SECTION="7" NAME="2222"  PRICE1="11,27" PRICE2="7,61" PRICE3="6,2"/>
    <ROW ID="43493" SECTION="7" NAME="33333"  YEAR="86-88" PRICE1="39,56" PRICE2="31,53" PRICE3="27,2"/>
    <ROW ID="327" SECTION="151" NAME="44444"  YEAR="91-92" PRICE1="18,73" PRICE2="12,64" PRICE3="10,3"/>
    <ROW ID="354" SECTION="104" NAME="555555"  YEAR="07-09" PRICE1="15,91" PRICE2="10,74" PRICE3="8,75"/>
    <ROW ID="380" SECTION="104" NAME="66666"  YEAR="90-92" PRICE1="4,31" PRICE2="2,91" PRICE3="2,37"/>
  </ROWDATA>
</DATAPACKET>

фильтровать по section.

alatar 18.10.2010 15:19

Проходите по XML в цикле создаете объекты, например такие:
Код AS3:

package
{
    public class RowVO //value object
    {
        public var id:int;
        public var section:int;
        public var name:String;
        public var year:String;
        public var prices:/*Number*/Array;
    }
}

Там же, в цикле, заполняете поля и добавляете объекты в заблаговременно созданный ArrayCollection.
Пишите функцию:

private var _currentSection:int = -1; //параметр по которому будем фильтровать

Код AS3:

private function filterFunction(item:Object):Boolean
{
  /*отображаем все, если секция не задана
  или отображаем объект, если его секция
  совпадает с необходимой*/

  if (_currentSection == -1 || _currentSection == item['section'])
  {
        return true;
  {
    return false;
}

Присваиваете функцию в свойство filterFunction коллекции (это можно сделать и сразу).
И вызываете метод коллекции refresh().
Если секция меняется, то меняете _currentSection и вызываете refresh().


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

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