Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 15.08.2018, 23:01
Atomnsq вне форума Посмотреть профиль Отправить личное сообщение для Atomnsq Найти все сообщения от Atomnsq
  № 1  
Ответить с цитированием
Atomnsq

Регистрация: Sep 2017
Сообщений: 5
По умолчанию Из XML в dataGrid и обратно

Подскажите пожалуйста как можно реализовать возможность редактирования 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>
Вложения
Тип файла: rar XMLtoGrid.rar (465.8 Кб, 75 просмотров)

Старый 15.08.2018, 23:41
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 2  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Цитата:
Пытаюсь сделать так чтобы все внесенные изменения в записались в XML.
Где пытаетесь?
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 16.08.2018, 13:03
Atomnsq вне форума Посмотреть профиль Отправить личное сообщение для Atomnsq Найти все сообщения от Atomnsq
  № 3  
Ответить с цитированием
Atomnsq

Регистрация: Sep 2017
Сообщений: 5
Цитата:
Где пытаетесь?
Судя по коду пока негде. Вот и хотелось узнать куда писать и что.

Запись в файл организовал через 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.

Старый 16.08.2018, 14:36
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 4  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Короче, я не очень люблю работать с чистым хмл, хотя иногда удобно. Но я бы поступил попроще.
Сконвертил бы хмл в массив типизированных объектов
Массив отдал бы как датапровайдер. И насколько помню - dg.editable = true; подразумевает двусторонний биндинг. Так что после редактирования в массиве будут измененные данные.

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


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

Создать новую тему Ответ Часовой пояс GMT +4, время: 11:55.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
datagrid , URLLoader() , xml
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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