Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PowerBuilder Новый топик    Ответить
 ReselectRow  [new]
ЧК
Guest
В событии itemchanged
проверяю подходит ли значение по заданым параметрам если да сохраняю, если нет то хочу возвратить назад старое значение ReselectRow (возвращает 1), но после этого все равно в поля возвращается введенное значение, а не считаное в запросе.

Если вывести сообщение messagebox("",this.ReselectRow(Row)) то на экране видно как раз значение считаное в запросе, но после продолжения вновь возвращается нововведенное значение
28 май 04, 11:34    [707278]     Ответить | Цитировать Сообщить модератору
 Re: ReselectRow  [new]
PaulJB
Member

Откуда: Киев
Сообщений: 737
Вобще не красиво или даже запрещено делать такие вещи в событии ItemChanged, т.к. поля принимают значения опосля его выполнения.
Исходя из этого все операции по откату надо делать или методом POST или с помощью кодов возврата данного события (см. хелп по этому событию).

Для отката всей строки я бы создал UserEvent для текущего DW например ue_rollbackrow(row)
[Script]
this.object.data.primary.current[row] = this.object.data.primary.original[row]
this.setitemstatus( row,0,notmodified!) // это на всякий случай
return

В событии ItemChanged
[Script]
if not <условие> then
this.post event ue_rollbackrow(row)
return 0
end if
return 0
28 май 04, 14:40    [708130]     Ответить | Цитировать Сообщить модератору
 Re: ReselectRow  [new]
ЧК
Guest
Спасибо за помощь!
Будем поднимать свой уровень.
28 май 04, 15:47    [708410]     Ответить | Цитировать Сообщить модератору
 Re: ReselectRow  [new]
Centner
Member

Откуда: Где-то рядом с Ё-бургом
Сообщений: 45
А чем не устраивает:
F1(Help), ItemChanged
ItemChanged event: syntax 1
...
Return code choices (specify in a RETURN statement):
0 (Default) Accept the data value
1 Reject the data value and don't allow focus to change
2 Reject the data value but allow the focus to change


Или я чего-то не понял?
31 май 04, 11:07    [710518]     Ответить | Цитировать Сообщить модератору
 Re: ReselectRow  [new]
ЗоринАндрей
Member

Откуда: Санкт-Петербург
Сообщений: 3004
2 PaulJB
Хуже другое. Постить событие из itemchanged с целью внесения каких-либо изменений может привести к сохранению некорректных значений.
Например:
позьзователь ввел значение и не переходя на другое поле тут же нажал кнопку ну например Save.
пошел выполняться Clicked кнопки.
Вызываем перед сохранением AcceptText
что приводит к срабатыванию itemchanged.
Из itemchanged постится event.
он встает в очередь и будет выполнен после отработки clicked, так?
т.е. мы продолжаем процесс сохранения со старыми данными, а потом вызывается ваш ue_rollbackrow.
Или у Вас там где-то между AcceptText и Update стоит что-то типа
DO WHILE Yield()
LOOP
???

2 ЧК
Для возвращения старого значения ReselectRow использовать не надо, тут PaulJB прав - значение в буфере Original - оттуда его и надо брать если конечно нужно вернуть именно изначальное значение прочитанное из базы.
Но выставить его следует обычным SetItem + Return 2 для отказа от значения введенного пользователем.

если нужно всего лишь отказаться от введенного значения то достаточно будет Return 2, и никаких SetItem(original) или того хуже ReselectRow.

2 Centner
Где-то рядом с Ё-бургом
это часом не СТЗ ?
31 май 04, 14:25    [711198]     Ответить | Цитировать Сообщить модератору
 Re: ReselectRow  [new]
PaulJB
Member

Откуда: Киев
Сообщений: 737
2 ЗоринАндрей
Согласен с Вами. Возможно, в Вашем случае так оно и будет (c POST Event).
Вобще я обычно пользуюсь кодами возврата ItemError-a, а Post Event был предложен как вариант для случая, если сложно перевести уже написанный код на вариант с ItemError.
31 май 04, 18:32    [712119]     Ответить | Цитировать Сообщить модератору
 Re: ReselectRow  [new]
Centner
Member

Откуда: Где-то рядом с Ё-бургом
Сообщений: 45
ЗоринАндрей
это часом не СТЗ ?

Я, я, натюрлихь! (Он родимый.)
Я так понял, что Санкт-Петербург это что-то вроде "Поликома"?
1 июн 04, 15:21    [714044]     Ответить | Цитировать Сообщить модератору
Все форумы / PowerBuilder Ответить