21.02.2012, 12:12 | #1 |
Участник
|
значение из realControl
Здравствуйте.
В гриде есть realcontrol у которого вызывается loopup - форма которая использует значение из realcontrol. Если пользователь ввел некое значение в realcontrol и нажал lookup, значение realcontrol восстанавливается по значению таблицы. 1) Как получить текущее значение в realcontrol 2) Как до перехода в соседнее поле синхронизировать значение в realcontrol со значением в таблице С уважением, Дмитрий. |
|
21.02.2012, 12:38 | #2 |
Участник
|
Цитата:
1) Получить где? В лукап форме? После закрытия лукап формы? И самое главное для чего? 2) Синхронизировать - это значит в таблицу записать из контрола или наоборот из контрола в таблицу? У вас контрол связан с источником данных? ds.write() запишит курсор в БД. ds.reread() наоборот перечитает курсор из БД и значения в курсоре источника данных обновяться. ds.refresh() - обновит значения связанных с источником данных контролов. |
|
21.02.2012, 13:13 | #3 |
Участник
|
Извините, Сергей, попробую подробней.
1) Форма самописная, должна сделать варианты пересчета значения в realControl 2) Контрол связан с источником данных 3) Пользователь вводит/меняет значение в realcontrol. 4) Вызывается lookup, значение введенное пользователем заменяется значением из datasource Если пользователь после ввода значения переходит на следующее поле (происходит запись в datasource) и после возвращается и вызывает lookup, то соответственно - все хорошо. Попробывал под отладчиком. В источнике данных 5.5, в realcontrol изменяю на 10, спрашиваю как текст control.ValueStr возвращает 5.5 Соответственно 2 подхода, как мне кажется... 1) Есть ли возможность получить значение В ДАННЫЙ момент введенное в control и еще не синхронизированное с datasourse? 2) Перед вызовом lookup принудительно синхронизировать ТЕКУЩЕЕ значение контрола с datasource? Мне кажется, что первый вариант лучше, если он возможен... C уважением, Дмитрий. |
|
21.02.2012, 13:27 | #4 |
Ищущий знания...
|
Цитата:
Сообщение от DmitryK
Извините, Сергей, попробую подробней.
1) Форма самописная, должна сделать варианты пересчета значения в realControl 2) Контрол связан с источником данных 3) Пользователь вводит/меняет значение в realcontrol. 4) Вызывается lookup, значение введенное пользователем заменяется значением из datasource Если пользователь после ввода значения переходит на следующее поле (происходит запись в datasource) и после возвращается и вызывает lookup, то соответственно - все хорошо. Попробывал под отладчиком. В источнике данных 5.5, в realcontrol изменяю на 10, спрашиваю как текст control.ValueStr возвращает 5.5 Соответственно 2 подхода, как мне кажется... 1) Есть ли возможность получить значение В ДАННЫЙ момент введенное в control и еще не синхронизированное с datasourse? 2) Перед вызовом lookup принудительно синхронизировать ТЕКУЩЕЕ значение контрола с datasource? Мне кажется, что первый вариант лучше, если он возможен... C уважением, Дмитрий. если нужно что бы при открытии lookUp введенное значение сохранялось, тогда можете в методе lookUp до вызова super() (ну или до вызова построения и вывода Вашего lookUp) написать ds.write() (только надо учесть, что сохранятся все измененные поля), т.е. принудительно сохранить введенные значения в курсоре. Единственно мне не очень понятно, зачем открывать lookUp на поле, когда туда введено не сохраненное значение. Какая собственно стоит задача? Может она решается как то по другому?
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
21.02.2012, 13:56 | #5 |
Участник
|
Артем, lookup надо открывать так, так как это удобно пользователю, т.е. открытие lookup есть элемент изменения значения, специфического пересчета цен. Ввел, подправил, сохранил. А так получается ввел, сохранил, подправил, опять сохранил.
Ваше предложение по решению понятно, попробую его использовать. Но так, для себя, было бы интересно получить напрямую значение из realcontrol, ведь в сущности это такой же editcontrol, так почему же нельзя? С уважением, Дмитрий. |
|
21.02.2012, 14:09 | #6 |
Участник
|
Цитата:
Баг стандартного механизма перекрытия лукапа |
|
21.02.2012, 14:24 | #7 |
Ищущий знания...
|
Цитата:
Сообщение от DmitryK
Артем, lookup надо открывать так, так как это удобно пользователю, т.е. открытие lookup есть элемент изменения значения, специфического пересчета цен. Ввел, подправил, сохранил. А так получается ввел, сохранил, подправил, опять сохранил.
Ваше предложение по решению понятно, попробую его использовать. Но так, для себя, было бы интересно получить напрямую значение из realcontrol, ведь в сущности это такой же editcontrol, так почему же нельзя? С уважением, Дмитрий. Т.е. можно придти к вводу цифры сразу, без уточнений и прочего. Я бы настоятельно рекомендовал пользователю вместо алгоритма:
следовать алгоритму:
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
21.02.2012, 14:32 | #8 |
Участник
|
Сергей, у меня версия 2009, и действительно, Вы правы, realValue возвращает значение текущее в контроле, а valueStr из datasoursce. Забавно... Неисповедимы пути господни...
Большое спасибо! ) C уваженем, Дмитрий. |
|
21.02.2012, 14:43 | #9 |
Участник
|
Артем, конечно, в общем, Вы правы.
Но есть единый механизм, где по правам, один вид пользователей просто вводит число, а другой, имеет право проделать с ним магические преобразования с помощью lookup. Артем, попробывал перед вызовом lookup, в методе lookup контрола, сделать element.dataSource().write(); В результате lookup сразу закрывается. Не посоветуете где можно сделать запись? C уважением, Дмитрий. Последний раз редактировалось DmitryK; 21.02.2012 в 15:12. |
|