|
DataWindow его itemChanged и some ....... problem
|
|||
---|---|---|---|
#18+
У меня проблема :(. Написан скрипт на событие itemChanged. Осуществляется много проверок на разнообразные ошибочные ситуации. Везде один код в случае неверного значения: gf_err( 'Сообщение об ошибке.' ) return 2 В случае, если я устанавливаю неверное значение и ухожу с DataWindow - все работает правильно (сообщение об ошибке и восстанавливается предыдущее значение). Если же я перехожу на другое поле внутри DataWindow - тоже сообщение об ошибке, НО НЕ ПРОИСХОДИТ возврата предыдущего значения. Честно говоря не могу понять где я дурак :(. Ошибка, явно связана с каким-то соседним событием. Что может ТАК влиять? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2003, 15:30 |
|
DataWindow его itemChanged и some ....... problem
|
|||
---|---|---|---|
#18+
А как ты восстанавливаешь предыдущее значение ? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2003, 17:50 |
|
DataWindow его itemChanged и some ....... problem
|
|||
---|---|---|---|
#18+
В зависимости от того, какой edit style у колонки (а в общем то всегда), предыдущее значение нужно восстановливать ручками, с помощью команды SetText(), в случае return 2 или return 1 из itemChanged. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2003, 18:54 |
|
DataWindow его itemChanged и some ....... problem
|
|||
---|---|---|---|
#18+
Есть ли код в собитие ItemError ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2003, 20:04 |
|
DataWindow его itemChanged и some ....... problem
|
|||
---|---|---|---|
#18+
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). Указанная строчка и должна была бороться с этой проблемой. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2003, 12:03 |
|
DataWindow его itemChanged и some ....... problem
|
|||
---|---|---|---|
#18+
наверное необходимо использовать dw_1.AcceptText() ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2003, 12:06 |
|
DataWindow его itemChanged и some ....... problem
|
|||
---|---|---|---|
#18+
Хм... а поставил я this.AcceptText() в loseFocus... ухожу с DW получаю сообщение об ошибке. Но что бы вернулось старое значение необходимо вернуться в DW... Юзверь такого явно не оценит. Может быть вместе с this.AcceptText() надо что-то в связке использовать? Или на какое-то другое свойство DW повесить (для справки. На форме около 25 различных объектов + 3 DW)? Дело в том, что ранее мы никогда не использовали DW редактируемое. Все редактирование было вне. Сейчас изменился подход к интерфейсу и пошли проблемы (появляются неожиданно и очень невовремя). ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2003, 17:22 |
|
DataWindow его itemChanged и some ....... problem
|
|||
---|---|---|---|
#18+
Насколько критично информацию в DW проверять на валидность сразу на месте - не проще оставить все проверки на пре апдейт? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2003, 17:49 |
|
DataWindow его itemChanged и some ....... problem
|
|||
---|---|---|---|
#18+
Проверка ОЧЕНЬ критична. Причин много - например, в зависимости от введенной даты я должен автоматом подтянуть некоторое значение из БД. Самое главное - возможность добавить новую запись ТОЛЬКО если в предыдущей заполнены все поля. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2003, 18:17 |
|
DataWindow его itemChanged и some ....... problem
|
|||
---|---|---|---|
#18+
Дремучий, если ты уходишь с поля вне DW, то твой itemchanged просто НЕ бежит (будет бежать, если у тебя какие нибудь ГЛУПОСТИ, типа AcceptText() в Losefocus event написаны :-) , но я этого не делаю НИКОГДА, поскольку это прямая дорога к stack fault). На самом деле, я бы дважды подумал, что при "неправильном" значении в itemchanged возвращать, 2 или 1. Всё, что ты выигрываешь с 2, это то что itemerror не бежит. Я в таких случаях (чаще всего) 1 возвращаю, что вызовет itemerror, но его подавить можно, причём есть 2 стратегии для этого: 1) Если хочешь свои MessageBoxы в itemchanged пользователю вывешивать, то как я и сказал, делай SetText() на текст, СООТВЕТСТВУЮЩИЙ значению в буфере ДО попытки изменения, а на предке делаешь Код: plaintext
Код: plaintext 1. 2. 3.
2) Если не обязательно свои MessageBoxы вешать, то просто делаешь Modify ValidationMsg property колонки на которой itemchanged бежит: Код: plaintext
Кстати, ты ошибаешся, возвращение 2 как раз и НЕ должно было восстановить старое значение, оно должно не пустить НОВОЕ значение в буфер (из хелпа - 2 Reject the data value but allow the focus to change), всё что происходит, имеет отношение только к data value , о судьбе же ТЕКСТА, который в edit controle, висящем над колонкой, должен печься ты. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2003, 18:30 |
|
|
start [/forum/topic.php?fid=15&msg=32261563&tid=1339511]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
181ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 288ms |
0 / 0 |