powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / DataWindow его itemChanged и some ....... problem
11 сообщений из 11, страница 1 из 1
DataWindow его itemChanged и some ....... problem
    #32261338
Дремучий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня проблема :(. Написан скрипт на событие itemChanged. Осуществляется много проверок на разнообразные ошибочные ситуации. Везде один код в случае неверного значения:
gf_err( 'Сообщение об ошибке.' )
return 2
В случае, если я устанавливаю неверное значение и ухожу с DataWindow - все работает правильно (сообщение об ошибке и восстанавливается предыдущее значение). Если же я перехожу на другое поле внутри DataWindow - тоже сообщение об ошибке, НО НЕ ПРОИСХОДИТ возврата предыдущего значения.

Честно говоря не могу понять где я дурак :(. Ошибка, явно связана с каким-то соседним событием. Что может ТАК влиять?
...
Рейтинг: 0 / 0
DataWindow его itemChanged и some ....... problem
    #32261563
Фотография alienzzzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как ты восстанавливаешь предыдущее значение ?
...
Рейтинг: 0 / 0
DataWindow его itemChanged и some ....... problem
    #32261636
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В зависимости от того, какой edit style у колонки (а в общем то всегда), предыдущее значение нужно восстановливать ручками, с помощью команды SetText(), в случае return 2 или return 1 из itemChanged.
...
Рейтинг: 0 / 0
DataWindow его itemChanged и some ....... problem
    #32261686
Mykola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть ли код в собитие ItemError
...
Рейтинг: 0 / 0
DataWindow его itemChanged и some ....... problem
    #32262183
Дремучий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 alienzzzz
Предыдущее значение восстанавливается путем - return 2 (согласно хелпу)

2 Mykola
:) Код в собитие ItemError был. Потом я его убрал... не помогло. :(

2 Филипп
Stile Type у колонки EditMask :). параметр Mask установлен как dd.mm.yyyy. Format установлен как [shortdate].
Дело то в другом. Если я ухожу с поля вне DW, то все нормально, а вот если на другое поле (строка может меняться, а может нет), то значение не восстанавливается.
Кстати, если я не ошибаюсь, то возвращение 2 как раз и должно было восстановить старое значение. Это одна из милых фич Sybase? :(


С помощью метода "математического тыка" и с использованием сложных матерных заклинаний выяснил следущее. Влияние оказывает (по крайней мере, в данном случае) следущщая строка: this.setRow( this.getRow()). Она была в событии loseFocus. Как только закоментарил, сразу стало работать нормально при переходе к другим полям ВНУТРИ DW. Но теперь, я не знаю как бороться с проблемой "незнание DW, что у него изменилось значение" (в случае, если после изменения пользователь СРАЗУ выходит из поля, не нажимая Enter). Указанная строчка и должна была бороться с этой проблемой.
...
Рейтинг: 0 / 0
DataWindow его itemChanged и some ....... problem
    #32262187
Mykola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наверное необходимо использовать dw_1.AcceptText()
...
Рейтинг: 0 / 0
DataWindow его itemChanged и some ....... problem
    #32262780
Дремучий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм... а поставил я this.AcceptText() в loseFocus... ухожу с DW получаю сообщение об ошибке. Но что бы вернулось старое значение необходимо вернуться в DW... Юзверь такого явно не оценит. Может быть вместе с this.AcceptText() надо что-то в связке использовать? Или на какое-то другое свойство DW повесить (для справки. На форме около 25 различных объектов + 3 DW)?

Дело в том, что ранее мы никогда не использовали DW редактируемое. Все редактирование было вне. Сейчас изменился подход к интерфейсу и пошли проблемы (появляются неожиданно и очень невовремя).
...
Рейтинг: 0 / 0
DataWindow его itemChanged и some ....... problem
    #32262809
andy753
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько критично информацию в DW проверять на валидность сразу на месте - не проще оставить все проверки на пре апдейт?
...
Рейтинг: 0 / 0
DataWindow его itemChanged и some ....... problem
    #32262842
Дремучий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверка ОЧЕНЬ критична.
Причин много - например, в зависимости от введенной даты я должен автоматом подтянуть некоторое значение из БД. Самое главное - возможность добавить новую запись ТОЛЬКО если в предыдущей заполнены все поля.
...
Рейтинг: 0 / 0
DataWindow его itemChanged и some ....... problem
    #32262853
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дремучий, если ты уходишь с поля вне DW, то твой itemchanged просто НЕ бежит (будет бежать, если у тебя какие нибудь ГЛУПОСТИ, типа AcceptText() в Losefocus event написаны :-) , но я этого не делаю НИКОГДА, поскольку это прямая дорога к stack fault).

На самом деле, я бы дважды подумал, что при "неправильном" значении в itemchanged возвращать, 2 или 1. Всё, что ты выигрываешь с 2, это то что itemerror не бежит.
Я в таких случаях (чаще всего) 1 возвращаю, что вызовет itemerror, но его подавить можно, причём есть 2 стратегии для этого:
1) Если хочешь свои MessageBoxы в itemchanged пользователю вывешивать, то как я и сказал, делай SetText() на текст, СООТВЕТСТВУЮЩИЙ значению в буфере ДО попытки изменения, а на предке делаешь
Код: plaintext
protected instance boolean ib_suppressitemerror
, первое, что itemerror в предке (или наследниках, по обстоятельствам) делает, это:

Код: plaintext
1.
2.
3.
IF ib_suppressitemerror THEN
	ib_suppressitemerror = NOT ib_suppressitemerror	
	RETURN  1  // Reject, No Message
END IF


2) Если не обязательно свои MessageBoxы вешать, то просто делаешь Modify ValidationMsg property колонки на которой itemchanged бежит:
Код: plaintext
<DW Control Name>.Modify( "<Columnname>.ValidationMsg='<msg displayed instead of default when itemerror occurs>'" )


Кстати, ты ошибаешся, возвращение 2 как раз и НЕ должно было восстановить старое значение, оно должно не пустить НОВОЕ значение в буфер (из хелпа - 2 Reject the data value but allow the focus to change), всё что происходит, имеет отношение только к data value , о судьбе же ТЕКСТА, который в edit controle, висящем над колонкой, должен печься ты.
...
Рейтинг: 0 / 0
DataWindow его itemChanged и some ....... problem
    #32264016
Механик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри что возвращает AcceptText (он и вызывает itemchanged). Если возвращает ошибку, то перемещай фокус в DW.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / DataWindow его itemChanged и some ....... problem
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]