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

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

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

Регистрация: Jul 2008
Адрес: Украина, Киев
Сообщений: 253
По умолчанию DataGrid - itemEditEnd - получение измененных данных

Всем доброго времени суток.
Есть необходимость сделать табличку, данные в которой можно редактировать - измененные данные должны сразу же отображаться в других компонентах формы. Поведение примера, приведенного в справке по flex, немного удивило:

Код AS3:
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
 
	<mx:Script>
		<![CDATA[
			import mx.events.DataGridEvent;
			import mx.collections.ArrayCollection;
 
			[Bindable]                
			private var myDP:ArrayCollection = new ArrayCollection([
				{label1:"Order #2314", quant:3, Sent:true},
				{label1:"Order #2315", quant:3, Sent:false}     
			]); 
 
			private function eventItemEditEnd(e:DataGridEvent):void
			{
				trace(e.dataField, e.rowIndex, e.columnIndex);
				trace(myDP[e.rowIndex][e.dataField]);
 
				trace(myDG.selectedItem.quant);
			}
		]]>
	</mx:Script>
 
	<mx:DataGrid id="myDG" dataProvider="{myDP}" 
				 variableRowHeight="true" 
				 editable="true"
				 itemEditEnd="eventItemEditEnd(event)">
		<mx:columns>
			<mx:DataGridColumn dataField="label1" headerText="Order #"/>
			<mx:DataGridColumn dataField="quant" headerText="Qty"/>
		</mx:columns>
	</mx:DataGrid> 
</mx:Application>
событие itemEditEnd отдает мне те же данные, что были в начале редактирования, т.е. логика работы событий itemEditBegin и itemEditEnd мне не понятна (, можно как-то получить новые, обновленные данные, введенные пользователем? Спасибо

Добавлено через 40 часов 7 минут
Попробовал решить проблему следующим образом:
написал свой itemEditor:

Код AS3:
<?xml version="1.0" encoding="utf-8"?>
<mx:TextInput xmlns:mx="http://www.adobe.com/2006/mxml"
			  focusOut="eventFocusOut(event)">
	<mx:Script>
		<![CDATA[
			public static const ITEM_PROP_CHANGED:String = "itemPropChanged"; // пользователь изменил данные в таблице свойств
 
			protected function eventFocusOut(e:FocusEvent):void
			{
				//ObjectPropertiesSet.SELECTED_ITEM_DATA = text;
				dispatchEvent(new Event(TextGridEdit.ITEM_PROP_CHANGED, true));
			}
		]]>
	</mx:Script>
</mx:TextInput>
в котором подписался на событие потери фокуса к текстовому полю: в этом событии я выбрасываю свое событие о том, что данные изменились, в основном приложении:
Код AS3:
<?xml version="1.0"?>
<!-- itemRenderers\inline\InlineNumStepper.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
 
	<mx:Script>
		<![CDATA[
			import mx.events.DataGridEvent;
			import mx.collections.ArrayCollection;
 
			[Bindable]                
			private var myDP:ArrayCollection = new ArrayCollection([
				{label1:"Order #2314", quant:3, Sent:true},
				{label1:"Order #2315", quant:3, Sent:false}     
			]); 
 
			private function eventCreationComplete(e:Event):void
			{
				myDG.addEventListener(TextGridEdit.ITEM_PROP_CHANGED, eventPropChanged);
			}
 
			private function eventItemEditEnd(e:DataGridEvent):void
			{
				trace(e.dataField, e.rowIndex, e.columnIndex);
				trace(myDP[e.rowIndex][e.dataField]);
 
				trace(myDG.selectedItem.quant);
			}
 
			private function eventPropChanged(e:Event):void
			{
				trace("dispatch catch = " + e);
			}
		]]>
	</mx:Script>
 
	<mx:DataGrid id="myDG" dataProvider="{myDP}" 
				 variableRowHeight="true" 
				 editable="true"
				 itemEditEnd="eventItemEditEnd(event)"
				 creationComplete="eventCreationComplete(event)">
		<mx:columns>
			<mx:DataGridColumn dataField="label1" headerText="Order #"/>
			<mx:DataGridColumn dataField="quant" headerText="Qty" editorDataField="text" itemEditor="TextGridEdit"/>
		</mx:columns>
	</mx:DataGrid> 
</mx:Application>
на creationComplete вешаю слушатель - но события от своего itemEditor'а, но эти события никогда не приходят в основное приложение

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

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

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


 


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


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