|
|
|
Как вернуть предыдущее значение контрола?
|
|||
|---|---|---|---|
|
#18+
Есть форма с гридом, привязанным к курсору и множеством контролов (checkbox-ы, Combobox, TextBox и т.д.) не связанных с курсором (работаю с ними через Value). Юзер управляя контролами получает в курсор новые данные, которые может править. Если он, например, через комбо выберет что-то, отличное от того что было курсор перезагрузится новыми данными и то что он там наисправлял потеряется, если конечно он не нажал до этого "Сохранить". По InteractiveChange() я могу проверить - сохранил или нет и предложить "Сохранить? Да, Нет, Отмена" Внимание, вопрос! Как в случае "Отмены" вернуть состояние контрола на первоначальное? Заранее, спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2008, 12:50 |
|
||
|
Как вернуть предыдущее значение контрола?
|
|||
|---|---|---|---|
|
#18+
Для этого давно изобретена и работает буферизация. Обсуждалась 1001 раз и здесь, и на www.foxclub.ru Поиск в помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2008, 13:16 |
|
||
|
Как вернуть предыдущее значение контрола?
|
|||
|---|---|---|---|
|
#18+
Я пользовался поиском, но обычно это вопросы о контролах связаных с таблицей и их буферизации, а то что мне надо не нашел. Может не так искал? У меня контролы не связаны ни с какой таблицей, их более 10, многие между собой связаны "логически" через Valid(). Каким образом организовать буферизацию если контролы к ни к базе ни к курсору не подвязаны. Не ужели для каждого контрола по GotFocus() сохранять Value в кучу локальных переменных? Вопрос скорее, касается порядка выполнения событий контрола, т.е. на каком этапе мне перехватить попытку изменения значения контрола,чтобы сделать проверку записали/не записали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2008, 13:39 |
|
||
|
Как вернуть предыдущее значение контрола?
|
|||
|---|---|---|---|
|
#18+
А может пересмотреть подход и таки отказаться от своей "буферизации". И контролы таки привязать к полям своих курсоров, а не переменных? Обрати внимание - даже не таблиц, а курсоров. Или в курсоры загнать данные труднее, чем в переменные? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2008, 13:55 |
|
||
|
Как вернуть предыдущее значение контрола?
|
|||
|---|---|---|---|
|
#18+
если не лень - делай пару переменных на каждый контрол- текущее и начальное значения при "отмена"- выставляешь начальное значение из переменной-дублера (как ей рулить в процессе, какое ей значение присваивать при работе пользователя - определяй сам) ИМХО - долго и нудно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2008, 14:33 |
|
||
|
Как вернуть предыдущее значение контрола?
|
|||
|---|---|---|---|
|
#18+
Sergey Sizov.А может пересмотреть подход и таки отказаться от своей "буферизации". И контролы таки привязать к полям своих курсоров, а не переменных? Обрати внимание - даже не таблиц, а курсоров. Или в курсоры загнать данные труднее, чем в переменные? Может я чего-то не понимаю? Комбо и так используют в качестве источника курсоры полученные с MS SQL, причем разные в зависимости от например Option1.Value. Если я по Option1 клацну у меня список другой высветиться, индекс поменяется. Вы мне предлагаете создать курсор, в котором будут храниться тот самый Option1.Value и индекс COmbo ? Я не применяю "свою" буферизацию, на основе контролов формируется запрос. Создавать курсор для каждого контрола (у меня их с десяток) только для "отката" интерфейса ну как-то странно. Здесь помогло бы событие что-то типа ComboBox1.BeforeChange(). К сожалению ничего похожего не нашел, поэтому наверно прийдется делать примерно так: 1. В нужных контролах добавить properties OldValue 2. В GotFocus() заполнять OldValue=Value, проверять изменения, предлагать "Да", "Нет", "Отмена" 3. В Interactivechange() если "Отмена" Value=OldValue и не выполнять блок по перезагрузке курсора и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2008, 12:04 |
|
||
|
Как вернуть предыдущее значение контрола?
|
|||
|---|---|---|---|
|
#18+
Откуда берешь первоначальное значение Value для инициализации значения Combo? ДО модификации? Разве нельзя повторно взять то же самое значение, если пользователь отказался от модификации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2008, 18:40 |
|
||
|
Как вернуть предыдущее значение контрола?
|
|||
|---|---|---|---|
|
#18+
Ну , например, при загрузке формы начальное значение комбо "Москва". Юзер выбирает "Киев". Исходя из этого формируется курсор,связанный с гридом и юзер в гриде просматривает и правит данные (прайс-лист). Потом, забыв сохранить то что он там на исправлял, он в комбо выбирает "Симферополь". Перед загрузкой данных для Симферополя я проверяю, если есть не сохраненные изменения - выводу диалог "Сохранить? Да, Нет, Отмена". Если Отмена естественно курсор не перезагружаю, НО В КОМБО УЖЕ ВЫБРАН "Симферополь", а в гриде отображаются данные "Киева". Это примитивный пример, так как есть еще комбо на список типов товара, который в разных городах разный, т.е. при выборе города перезагружается еще один комбо. Там еще много чекбоксов, оптионс, около десятка контролов. Можно конечно им делать Disable пока не сохранит, но это как-то не правильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2008, 13:37 |
|
||
|
Как вернуть предыдущее значение контрола?
|
|||
|---|---|---|---|
|
#18+
По большому счету, даже в случае привязки к данным все-равно останется только сохранение значения до модификации и сравнение со значением после. Например, в свойстве TAG объекта или, как Вы и предложили, в специально созданном свойстве OldValue (свойство TAG только символьного типа). Так что, описанное Вами решение, по сути, единственно возможное. Привязка к данным здесь ничего не изменит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2008, 15:06 |
|
||
|
|

start [/forum/topic.php?fid=41&fpage=164&tid=1587933]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 351ms |

| 0 / 0 |
