Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Почему событие itemEditEnd в DataGrid посылается 2 раза? (http://www.flasher.ru/forum/showthread.php?t=110464)

undr 03.04.2008 11:14

Почему событие itemEditEnd в DataGrid посылается 2 раза?
 
Почему событие itemEditEnd в DataGrid при окончании редактирования ячейки посылается 2 раза? Причем объект event в обоих случаях совершенно одинаков.
Нужно при окончании редактирования ячейки сохранить результат в базе, в итоге происходит 2 запроса к базе, не оптимально. Есть способ отлавливать это событие только один раз?

baron27 03.04.2008 14:29

там нужно проверять при наступлении
Код:

if (event.reason == DataGridEventReason.OTHER || event.reason == DataGridEventReason.CANCELLED)
{
    return;
}

Насколько я разобрался, ситуация там следующая. Событие наступает тогда, когда ячейка теряет фокус по следующим причинам (DataGridEventReason):
CANCELLED - редактирование отменено (нажат Esc)
NEW_COLUMN - по окончанию редактирования фокус ушел на соседнюю колонку этого ряда.
NEW_ROW - фокус ушел на новый ряд этой колонки.
OTHER - То есть просто потерян фокус, произошло скроллирование или был переход в состояние, в котором редактирование не допущено.

Значит, что за одно редактирование у нас событие может случиться 2 раза: при NEW_COLUMN или NEW_ROW и OTHER.

undr 03.04.2008 16:18

Да это я знаю, но оба события имеют причину OTHER (они вообще абсолютно одинаковы)
Просто если пользователь изменил данные и ткнул мышью в любое место, программа должна сохранить значение. Поэтому у меня стоит только:
Код:

if (event.reason == DataGridEventReason.CANCELLED) {
    return;
}

В итоге посылаются два абсолютно одинаковых события. Почему?

undr 03.04.2008 19:11

Если я сохраню результат и вызову event.stopImmediatePropagation(), событие повторится?
Код:

if (event.reason == DataGridEventReason.CANCELLED) {
    return;
}

saveItemToDatabase();

event.stopImmediatePropagation();


baron27 04.04.2008 13:12

насколько я понял, да. У решил эту ситуацию вышеприведенным способом. У меня уходило 2 события при нажатии ENTER после редактирования - одно связано с переходом на новую строку/столбец, другое - с потерей фокуса (OTHER). Почему у тебя 2 раза получается OTHER?

undr 04.04.2008 16:40

Похоже что событие отсылается дважды, если в код поставить Alert.show(). Именно в момент вызова Alert.show() вызывается это же сообщение еще раз, прирывая выполнение обработчика текущего события. Вызов Alert.show() при не завершенной обработке события itemEditEnd, провоцирует срабатывание этого же события еще раз.
Если я ставлю trace(event.reason), то событие отрабатывает один раз. Интересно что еще может спровацировать повторную отправку события?


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

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