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

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

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

Регистрация: Jan 2010
Сообщений: 211
По умолчанию Валидация и форматирование в редактируемом DataGrid

Есть DataGrid с редактированием. Более сложные варианты - с выбором из комбобокса - получаются, а казалось бы с более легким простым - нет. К примеру (укороченно):
Код AS3:
<mx:PhoneNumberValidator source="{phone_column}" property="text" trigger="{phone_column}" triggerEvent="change" required="true" invalid="Alert.show('Invalid!!!')"/>
 
<mx:DataGrid id="grid_phones" editable="true" dataProvider="{grid.selectedItem.phones}">
	<mx:columns>
		<mx:DataGridColumn labelFunction="phonecodeLabelFunction">
			<mx:itemEditor>
				<fx:Component>
					<mx:ComboBox editable="false" change="outerDocument.changePhonecodeHandler(event)" dataProvider="{outerDocument.phonecodes}" labelField="code"/>
				</fx:Component>
			</mx:itemEditor>							</mx:DataGridColumn>
		<mx:DataGridColumn id="phone_column" dataField="phone" />
	</mx:columns>
</mx:DataGrid>
Есть также вариант садить на DataGrid событие itemEditEnd и при получении события из конкретного столбца проверять его, сравнивать с регвыражением и в зависимости от результата пропускать с форматированием или отказывать. Но к сожалению в обработчике не получается получить исправленное значение - это а) и б) - не уверен, что событие возникает ДО занесения значения в ячейку таблицы.

Плиз, подскажите - как правильнее и удобнее сделать валидатор для текстовой изменяемой ячейки (с невозможностью допуска неправильного значения)?

Добавлено через 13 часов 24 минуты
Нашел решение. На мой взгляд - наиболее простое, короткое и ненавязчивое для пользователя.
Публикую для тех, кому интересно.
Код:
<fx:Script>
<![CDATA[
	private function itemEditEndHandler(event:DataGridEvent):void {
		if (event.dataField == "phone") {
			var newValue:String = (grid_phones.itemEditorInstance as TextInput).text;
			var regExp:RegExp = /\d{3}-\d{4}|\d{7}/;
			if (regExp.test(newValue)) {
				grid_phones.editedItemRenderer.data.phone = phoneFormatter.format(newValue);
				grid_phones.destroyItemEditor();
				grid_phones.dataProvider.itemUpdated(event.itemRenderer.data);
			} else event.preventDefault();
		}
	}
]]>
</fx:Script>
<fx:Declarations>
	<mx:PhoneFormatter id="phoneFormatter" formatString="###-####" validPatternChars="#-"/>
</fx:Declarations>
...
<mx:DataGrid id="grid_phones" editable="true" dataProvider="{grid.selectedItem.phones}" itemEditEnd="itemEditEndHandler(event)">
	<mx:columns>
		...
		<mx:DataGridColumn dataField="phone"/>
		...
	</mx:columns>
</mx:DataGrid>


Последний раз редактировалось Dimitry_II; 27.05.2010 в 19:21.
Создать новую тему Ответ Часовой пояс GMT +4, время: 03:32.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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