Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Из XML в dataGrid и обратно (http://www.flasher.ru/forum/showthread.php?t=215648)

Atomnsq 15.08.2018 23:01

Из XML в dataGrid и обратно
 
Вложений: 1
Подскажите пожалуйста как можно реализовать возможность редактирования XML файла через dataGrid.
Есть XML который выгружается в dataGrid. Пытаюсь сделать так чтобы все внесенные изменения в записались в XML.
Содержимое файла *.fla.
Код AS3:

/*импорт классов*/
import fl.controls.DataGrid;
import fl.controls.dataGridClasses.DataGridColumn;
import fl.data.DataProvider;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.*;
 
/*загрузка XML-файла*/
var loader:URLLoader = new URLLoader();
loader.load(new URLRequest("table.xml"));
loader.addEventListener(Event.COMPLETE,onComplete);
 
/*функция, которая выполняется после успешной загрузки XML-файла*/
function onComplete(event:Event):void
{
        /*        переменная, хранящая XML-файл        */
        var myxml:XML = XML(event.target.data);
 
        /*        создаём столбец "Имя"        */
        var users:DataGridColumn = new DataGridColumn("name");//создаём столбец и в качестве параметра указываем имя столбца
        users.headerText = "Имя";//заголовок столбца
        users.width = 150;//ширина столбца
 
        /*        создаём столбец "Очки"        */
        var scores:DataGridColumn = new DataGridColumn("score");//создаём столбец и в качестве параметра указываем имя столбца
        scores.headerText = "Очки";//заголовок столбца
        scores.width = 100;//ширина столбца
 
        /*        создаём поставщика данных на основе ранее загруженного XML-документа*/
        var dp:DataProvider = new DataProvider(myxml);
 
        /*        создаём компонент DataGrid        */
        var dg:DataGrid = new DataGrid();
        addChild(dg);//добавляем в список отображения
        dg.x = 150;//позиционируем по оси X
        dg.y = 100;//позиционируем по оси Y
        dg.width = 250;//ширина таблицы
        dg.headerHeight = 40;//высота заголовка таблицы
        dg.rowHeight = 30;//высота строк в таблице
        dg.columns = [users,scores];//указываем столбцы для нашей таблицы
        dg.dataProvider = dp;//источник данных для таблицы
        dg.rowCount = dg.length;//число строк, видимых в таблице
        dg.editable = true;
 
        for (var q:int = 0; q < myxml.length();q++)
        {
                trace((myxml));
        }
        //trace(event.target.data);
}

Содержимое файла *.xml

<?xml version="1.0" encoding="UTF-8" ?>
<table>
<user name="Елена" score="1"></user>
<user name="Ирина" score="2"></user>
<user name="Наталья" score="3"></user>
</table>

GBee 15.08.2018 23:41

Цитата:

Пытаюсь сделать так чтобы все внесенные изменения в записались в XML.
Где пытаетесь?

Atomnsq 16.08.2018 13:03

Цитата:

Где пытаетесь?
Судя по коду пока негде. Вот и хотелось узнать куда писать и что.

Запись в файл организовал через FileStream. Понял что реализовать нужно было через AIR.
Для примера записывал уже редактированные значения в другой файл XML.
Добавил код:
Код AS1/AS2:

//Редактируем XML содержимое // для теста
var outXML:XML = new XML  ;
for (var i:int = 0; i < myxml.children().length(); i++)
{
        trace(myxml.user[i].@name);
 
        //изменяем нужные нам значения
        myxml.user[0]. @ name = "Екатерина";
        myxml.user[1]. @ name = "Анастасия";
        myxml.user[2]. @ name = "Ольга";
}
 
//Сохраняем в изменения в другой файл//
var outFile:File = File.applicationStorageDirectory;
outFile = outFile.resolvePath("D:/XMLtoDG/tableOut.xml");
 
var outStream:FileStream = new FileStream();
outStream.open(outFile, FileMode.WRITE);
outStream.writeUTFBytes(myxml);
outStream.close();

Не могу понять как обратиться к dataGrid чтобы выгрузить данные с него и привести в приемлемый вид для сохранения в XML.
Предполагаю что нужно использовать какой-нибудь слушатель dataGrid.
Примерно что то типа:
Код AS1/AS2:

dg.addEventListener(???,имя функии);

Правильно я думаю или нет?

P.S. Наверное по тому что я пишу в кадре и так понятно что я новичок в AS3.

GBee 16.08.2018 14:36

Короче, я не очень люблю работать с чистым хмл, хотя иногда удобно. Но я бы поступил попроще.
Сконвертил бы хмл в массив типизированных объектов
Массив отдал бы как датапровайдер. И насколько помню - dg.editable = true; подразумевает двусторонний биндинг. Так что после редактирования в массиве будут измененные данные.

То есть тупо потом конвертим массив обратно в хмл. И сохраняем куда хотим.


С другой стороны по идее в dg.dataProvider содержит тоже измененные данные после редактирования. Но это надо дебажить. ХМЛ любит почковаться на каждое телодвижение.


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

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