PDA

Просмотр полной версии : подгрузка xml в datagrid с фильтром


misha912
16.10.2010, 22:24
Добрый день, направте на путь истинны.

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

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

alatar
17.10.2010, 16:47
В чем собственно состоит вопрос?

misha912
17.10.2010, 19:03
В чем собственно состоит вопрос?

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

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

misha912
17.10.2010, 22:01
Вариант 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
В смысле? Какая у вас структура 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 в цикле создаете объекты, например такие:
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; //параметр по которому будем фильтровать

private function filterFunction(item:Object):Boolean
{
/*отображаем все, если секция не задана
или отображаем объект, если его секция
совпадает с необходимой*/
if (_currentSection == -1 || _currentSection == item['section'])
{
return true;
{
return false;
}
Присваиваете функцию в свойство filterFunction коллекции (это можно сделать и сразу).
И вызываете метод коллекции refresh().
Если секция меняется, то меняете _currentSection и вызываете refresh().