|
|
|||||
Регистрация: Sep 2017
Сообщений: 5
|
Из XML в dataGrid и обратно
Подскажите пожалуйста как можно реализовать возможность редактирования XML файла через dataGrid.
Есть XML который выгружается в dataGrid. Пытаюсь сделать так чтобы все внесенные изменения в записались в XML. Содержимое файла *.fla. /*импорт классов*/ 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 version="1.0" encoding="UTF-8" ?> <table> <user name="Елена" score="1"></user> <user name="Ирина" score="2"></user> <user name="Наталья" score="3"></user> </table> |
|
|||||
Регистрация: Sep 2017
Сообщений: 5
|
Цитата:
Запись в файл организовал через FileStream. Понял что реализовать нужно было через AIR. Для примера записывал уже редактированные значения в другой файл XML. Добавил код: //Редактируем 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. Примерно что то типа: Правильно я думаю или нет? P.S. Наверное по тому что я пишу в кадре и так понятно что я новичок в AS3. |
|
|||||
Короче, я не очень люблю работать с чистым хмл, хотя иногда удобно. Но я бы поступил попроще.
Сконвертил бы хмл в массив типизированных объектов Массив отдал бы как датапровайдер. И насколько помню - dg.editable = true; подразумевает двусторонний биндинг. Так что после редактирования в массиве будут измененные данные. То есть тупо потом конвертим массив обратно в хмл. И сохраняем куда хотим. С другой стороны по идее в dg.dataProvider содержит тоже измененные данные после редактирования. Но это надо дебажить. ХМЛ любит почковаться на каждое телодвижение.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку. |
Часовой пояс GMT +4, время: 03:52. |
|
« Предыдущая тема | Следующая тема » |
Теги |
datagrid , URLLoader() , xml |
|
|